00001 // Copyright (C) 2000, International Business Machines 00002 // Corporation and others. All Rights Reserved. 00003 #ifndef _BCP_BRANCH_H 00004 #define _BCP_BRANCH_H 00005 00006 // This file is fully docified. 00007 00008 #include "BCP_vector.hpp" 00009 00010 class OsiSolverInterface; 00011 class BCP_buffer; 00012 class BCP_lp_branching_object; 00013 00014 //############################################################################# 00015 00031 class BCP_internal_brobj { 00032 private: 00036 BCP_internal_brobj(const BCP_internal_brobj&); 00038 BCP_internal_brobj& operator=(const BCP_internal_brobj&); 00041 private: 00045 int _child_num; 00049 BCP_vec<int> _var_positions; 00051 BCP_vec<int> _cut_positions; 00056 BCP_vec<double> _var_bounds; // 2*_child_num*_var_positions.size() 00058 BCP_vec<double> _cut_bounds; 00061 public: 00066 BCP_internal_brobj() : _child_num(0), 00067 _var_positions(), _cut_positions(), _var_bounds(), _cut_bounds() {} 00071 BCP_internal_brobj(BCP_lp_branching_object& candidate); 00073 ~BCP_internal_brobj() {} 00079 inline int child_num() const { return _child_num; } 00081 inline int affected_varnum() const { return _var_positions.size(); } 00083 inline int affected_cutnum() const { return _cut_positions.size(); } 00084 00087 inline const BCP_vec<int>& var_positions() const { return _var_positions; } 00090 inline const BCP_vec<int>& cut_positions() const { return _cut_positions; } 00091 00095 inline 00096 BCP_vec<double>::const_iterator var_bounds_child(const int index) const { 00097 return _var_bounds.entry(2 * _var_positions.size() * index); 00098 } 00102 inline 00103 BCP_vec<double>::const_iterator cut_bounds_child(const int index) const { 00104 return _cut_bounds.entry(2 * _cut_positions.size() * index); 00105 } 00112 void apply_child_bounds(OsiSolverInterface* lp, int child_ind) const; 00118 void pack(BCP_buffer& buf) const; 00120 void unpack(BCP_buffer& buf); 00122 }; 00123 00124 #endif 00125