00001 #ifdef COIN_USE_DYLP
00002 #ifndef OsiDylpWarmStartBasis_H
00003 #define OsiDylpWarmStartBasis_H
00004
00015
00016
00017
00018
00019
00020 #include "CoinWarmStartBasis.hpp"
00021
00022 #define DYLP_INTERNAL
00023 extern "C" {
00024 #include "dylp.h"
00025 }
00026
00027
00028
00040 class OsiDylpWarmStartBasis : public CoinWarmStartBasis
00041
00042 { public:
00043
00052
00055 int numberActiveConstraints() const ;
00056
00057
00060 inline Status getConStatus (int i) const
00061
00062 { const int st = (constraintStatus_[i>>2] >> ((i&3)<<1)) & 3 ;
00063 return (static_cast<CoinWarmStartBasis::Status>(st)) ; }
00064
00065
00068 inline void setConStatus (int i, Status st)
00069
00070 { char &st_byte = constraintStatus_[i>>2] ;
00071 st_byte &= ~(3 << ((i&3)<<1)) ;
00072 st_byte |= (st << ((i&3)<<1)) ; }
00073
00074
00077 inline char *getConstraintStatus () { return (constraintStatus_) ; }
00078
00085 inline const char *getConstraintStatus () const
00086
00087 { return (constraintStatus_) ; }
00088
00089
00092 inline void setPhase (dyphase_enum phase) { phase_ = phase ; }
00093
00096 inline dyphase_enum getPhase () const { return (phase_) ; }
00097
00099
00102
00105 CoinWarmStartDiff *generateDiff (const CoinWarmStart *const oldCWS) const ;
00106
00109 void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
00110
00112
00115
00118 void setSize (int ns, int na) ;
00119
00122 void resize (int numRows, int numCols) ;
00123
00131 void deleteRows (int number, const int *which) ;
00132
00134
00137
00140 OsiDylpWarmStartBasis () ;
00141
00144 OsiDylpWarmStartBasis (int ns, int na, const char *sStat,
00145 const char *aStat, const char *cStat = 0) ;
00146
00149 OsiDylpWarmStartBasis (const OsiDylpWarmStartBasis &ws) ;
00150
00153 CoinWarmStart *clone () const ;
00154
00157 ~OsiDylpWarmStartBasis () ;
00158
00161 OsiDylpWarmStartBasis& operator= (const OsiDylpWarmStartBasis &rhs) ;
00162
00165 void assignBasisStatus
00166 (int ns, int na, char *&sStat, char *&aStat, char *&cStat) ;
00167
00170 void assignBasisStatus
00171 (int ns, int na, char *&sStat, char *&aStat) ;
00172
00173
00175
00178
00181 void print () const ;
00182
00184
00185 private:
00186
00189
00190 dyphase_enum phase_ ;
00191
00192 char *constraintStatus_ ;
00193
00195
00196 } ;
00197
00198
00199
00223 class OsiDylpWarmStartBasisDiff : public CoinWarmStartBasisDiff
00224 { public:
00225
00227 virtual CoinWarmStartDiff *clone() const
00228 { OsiDylpWarmStartBasisDiff *odwsbd = new OsiDylpWarmStartBasisDiff(*this) ;
00229 return (dynamic_cast<CoinWarmStartDiff *>(odwsbd)) ; }
00230
00232 virtual
00233 OsiDylpWarmStartBasisDiff &operator= (const OsiDylpWarmStartBasisDiff &rhs) ;
00234
00236 virtual ~OsiDylpWarmStartBasisDiff()
00237 { delete[] condiffNdxs_ ;
00238 delete[] condiffVals_ ; }
00239
00240 private:
00241
00242 friend CoinWarmStartDiff *OsiDylpWarmStartBasis::generateDiff
00243 (const CoinWarmStart *const oldCWS) const ;
00244 friend void OsiDylpWarmStartBasis::applyDiff
00245 (const CoinWarmStartDiff *const diff) ;
00246
00248 OsiDylpWarmStartBasisDiff (int sze, const unsigned int *const diffNdxs,
00249 const unsigned int *const diffVals,
00250 const CoinWarmStartBasisDiff *const cwsbd) ;
00251
00253 OsiDylpWarmStartBasisDiff ()
00254 : CoinWarmStartBasisDiff(),
00255 consze_(0),
00256 condiffNdxs_(0),
00257 condiffVals_(0)
00258 { } ;
00259
00266 OsiDylpWarmStartBasisDiff (const OsiDylpWarmStartBasisDiff &odwsbd) ;
00267
00268
00269
00271 int consze_ ;
00272
00275 unsigned int *condiffNdxs_ ;
00276
00279 unsigned int *condiffVals_ ;
00280
00281 } ;
00282
00283
00284
00285 #endif // OsiDylpWarmStartBasis_H
00286 #endif // COIN_USE_DYLP