00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef BlisNodeDesc_h_
00026 #define BlisNodeDesc_h_
00027
00028
00029
00030 #include "CoinWarmStartBasis.hpp"
00031
00032 #include "AlpsNodeDesc.h"
00033 #include "BcpsNodeDesc.h"
00034
00035 #include "BlisHelp.h"
00036 #include "BlisModel.h"
00037
00038
00039
00040
00041 class BlisNodeDesc : public BcpsNodeDesc {
00042
00043 private:
00044
00046 int branchedDir_;
00047
00049 int branchedInd_;
00050
00052 double branchedVal_;
00053
00055 CoinWarmStartBasis *basis_;
00056
00057 public:
00058
00060 BlisNodeDesc() :
00061 BcpsNodeDesc(),
00062 branchedDir_(0),
00063 branchedInd_(-1),
00064 branchedVal_(0.0),
00065 basis_(NULL)
00066 {}
00067
00069 BlisNodeDesc(BlisModel* m)
00070 :
00071 BcpsNodeDesc(m),
00072 branchedDir_(0),
00073 branchedInd_(-1),
00074 branchedVal_(0.0),
00075 basis_(NULL)
00076 {}
00077
00079 virtual ~BlisNodeDesc() { delete basis_; }
00080
00082 void setBasis(CoinWarmStartBasis *&ws) {
00083 if (basis_) { delete basis_; }
00084 basis_= ws;
00085 ws = NULL;
00086 }
00087
00089 CoinWarmStartBasis * getBasis() const { return basis_; }
00090
00092 void setBranchedDir(int d) { branchedDir_ = d; }
00093
00095 int getBranchedDir() const { return branchedDir_; }
00096
00098 void setBranchedInd(int d) { branchedInd_ = d; }
00099
00101 int getBranchedInd() const { return branchedInd_; }
00102
00104 void setBranchedVal(double d) { branchedVal_ = d; }
00105
00107 double getBranchedVal() const { return branchedVal_; }
00108
00109 protected:
00110
00112 AlpsReturnStatus encodeBlis(AlpsEncoded *encoded) const {
00113 AlpsReturnStatus status = AlpsReturnStatusOk;
00114
00115 encoded->writeRep(branchedDir_);
00116 encoded->writeRep(branchedInd_);
00117 encoded->writeRep(branchedVal_);
00118
00119
00120 int ava = 0;
00121 if (basis_) {
00122 ava = 1;
00123 encoded->writeRep(ava);
00124 BlisEncodeWarmStart(encoded, basis_);
00125 }
00126 else {
00127 encoded->writeRep(ava);
00128 }
00129
00130 return status;
00131 }
00132
00134 AlpsReturnStatus decodeBlis(AlpsEncoded &encoded) {
00135 AlpsReturnStatus status = AlpsReturnStatusOk;
00136
00137 encoded.readRep(branchedDir_);
00138 encoded.readRep(branchedInd_);
00139 encoded.readRep(branchedVal_);
00140
00141
00142 int ava;
00143 encoded.readRep(ava);
00144 if (ava == 1) {
00145 basis_ = BlisDecodeWarmStart(encoded, &status);
00146 }
00147 else {
00148 basis_ = NULL;
00149 }
00150
00151 return status;
00152 }
00153
00154 public:
00155
00157 virtual AlpsReturnStatus encode(AlpsEncoded *encoded) const {
00158 AlpsReturnStatus status = AlpsReturnStatusOk;
00159
00160 status = encodeBcps(encoded);
00161 status = encodeBlis(encoded);
00162
00163 return status;
00164 }
00165
00167 virtual AlpsReturnStatus decode(AlpsEncoded &encoded) {
00168
00169 AlpsReturnStatus status = AlpsReturnStatusOk;
00170
00171 status = decodeBcps(encoded);
00172 status = decodeBlis(encoded);
00173
00174 return status;
00175 }
00176
00177 };
00178 #endif