00001
00002
00003 #ifndef _BCP_WARMSTART_BASIS_H
00004 #define _BCP_WARMSTART_BASIS_H
00005
00006 #include "BCP_warmstart.hpp"
00007 #include "BCP_vector_change.hpp"
00008
00009
00010
00011
00012
00013
00014
00015
00016
00024 class BCP_warmstart_basis : public BCP_warmstart {
00025 private:
00027 BCP_warmstart_basis& operator=(const BCP_warmstart_basis&);
00028
00032 BCP_warmstart_basis() :
00033 _var_stat(BCP_Storage_WrtParent), _cut_stat(BCP_Storage_WrtParent) {}
00034
00035 private:
00037 BCP_vec_change<char> _var_stat;
00039 BCP_vec_change<char> _cut_stat;
00040
00041 public:
00045 BCP_warmstart_basis(BCP_buffer& buf) : _var_stat(buf), _cut_stat(buf) {}
00050 BCP_warmstart_basis(const char* vfirst, const char* vlast,
00051 const char* cfirst, const char* clast) :
00052 _var_stat(vfirst, vlast), _cut_stat(cfirst, clast) {}
00054 BCP_warmstart_basis(const BCP_warmstart_basis& ws) :
00055 _var_stat(ws._var_stat), _cut_stat(ws._cut_stat) {}
00056
00057 ~BCP_warmstart_basis() {}
00060
00061
00065 virtual CoinWarmStart* convert_to_CoinWarmStart() const;
00066
00067 virtual BCP_storage_t storage() const;
00068
00069 virtual BCP_warmstart* clone() const {
00070 return new BCP_warmstart_basis(*this);
00071 }
00072
00073 virtual BCP_warmstart* empty_wrt_this() const {
00074
00075
00076 return new BCP_warmstart_basis();
00077 }
00078
00079 virtual int storage_size() const {
00080 return _var_stat.storage_size() + _cut_stat.storage_size();
00081 }
00082
00083 virtual void update(const BCP_warmstart* const change);
00084
00085 virtual BCP_warmstart* as_change(const BCP_warmstart* const old_ws,
00086 const BCP_vec<int>& del_vars,
00087 const BCP_vec<int>& del_cuts,
00088 const double petol,
00089 const double detol) const;
00090
00091
00092
00094 void pack(BCP_buffer& buf) const {
00095 _var_stat.pack(buf);
00096 _cut_stat.pack(buf);
00097 }
00098 };
00099
00100 #endif