/home/coin/SVN-release/Cbc-1.1.1/Osi/src/OsiDylp/OsiDylpWarmStartBasis.hpp

Go to the documentation of this file.
00001 #ifndef OsiDylpWarmStartBasis_H
00002 #define OsiDylpWarmStartBasis_H
00003 
00014 /*
00015   sccs: @(#)OsiDylpWarmStartBasis.hpp   1.5     09/16/04
00016   cvs: $Id: OsiDylpWarmStartBasis.hpp 684 2006-05-11 22:27:01Z andreasw $
00017 */
00018 
00019 #include "CoinWarmStartBasis.hpp"
00020 
00021 #define DYLP_INTERNAL
00022 extern "C" {
00023 #include "dylp.h"
00024 }
00025 
00026 
00027 
00039 class OsiDylpWarmStartBasis : public CoinWarmStartBasis
00040 
00041 { public:
00042 
00051 
00054   int numberActiveConstraints() const ;
00055 
00056 
00059   inline Status getConStatus (int i) const
00060 
00061   { const int st = (constraintStatus_[i>>2] >> ((i&3)<<1)) & 3 ;
00062     return (static_cast<CoinWarmStartBasis::Status>(st)) ; }
00063 
00064 
00067   inline void setConStatus (int i, Status st)
00068 
00069   { char &st_byte = constraintStatus_[i>>2] ;
00070     st_byte &= ~(3 << ((i&3)<<1)) ;
00071     st_byte |= (st << ((i&3)<<1)) ; }
00072 
00073 
00076   inline char *getConstraintStatus () { return (constraintStatus_) ; }
00077 
00084   inline const char *getConstraintStatus () const
00085   
00086   { return (constraintStatus_) ; }
00087 
00088 
00091   inline void setPhase (dyphase_enum phase) { phase_ = phase ; }
00092 
00095   inline dyphase_enum getPhase () const { return (phase_) ; }
00096 
00098 
00101 
00104   CoinWarmStartDiff *generateDiff (const CoinWarmStart *const oldCWS) const ;
00105 
00108   void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
00109 
00111 
00114 
00117   void setSize (int ns, int na) ;
00118 
00121   void resize (int numRows, int numCols) ;
00122 
00135   void compressRows (int tgtCnt, const int *tgts) ;
00136 
00144   void deleteRows (int number, const int *which) ;
00145 
00147 
00150 
00153   OsiDylpWarmStartBasis () ;
00154 
00157   OsiDylpWarmStartBasis (int ns, int na, const char *sStat,
00158                          const char *aStat, const char *cStat = 0) ;
00159 
00162   OsiDylpWarmStartBasis (const CoinWarmStartBasis &cwsb) ;
00163 
00166   OsiDylpWarmStartBasis (const OsiDylpWarmStartBasis &ws) ;
00167 
00170   CoinWarmStart *clone () const ;
00171 
00174   ~OsiDylpWarmStartBasis () ;
00175 
00178   OsiDylpWarmStartBasis& operator= (const OsiDylpWarmStartBasis &rhs) ;
00179 
00182   void assignBasisStatus
00183     (int ns, int na, char *&sStat, char *&aStat, char *&cStat) ;
00184 
00187   void assignBasisStatus
00188     (int ns, int na, char *&sStat, char *&aStat) ;
00189 
00190 
00192 
00195 
00198   void print () const ;
00199 
00202   void checkBasis () const ;
00203 
00205 
00206   private:
00207 
00210 
00211   dyphase_enum phase_ ;         
00212 
00213   char *constraintStatus_ ;     
00214 
00216 
00217 } ;
00218 
00219 
00220 
00244 class OsiDylpWarmStartBasisDiff : public CoinWarmStartBasisDiff
00245 { public:
00246 
00248   virtual CoinWarmStartDiff *clone() const
00249   { OsiDylpWarmStartBasisDiff *odwsbd =  new OsiDylpWarmStartBasisDiff(*this) ;
00250     return (dynamic_cast<CoinWarmStartDiff *>(odwsbd)) ; }
00251 
00253   virtual
00254   OsiDylpWarmStartBasisDiff &operator= (const OsiDylpWarmStartBasisDiff &rhs) ;
00255 
00257   virtual ~OsiDylpWarmStartBasisDiff()
00258   { delete[] condiffNdxs_ ;
00259     delete[] condiffVals_ ; }
00260 
00261   private:
00262 
00263   friend CoinWarmStartDiff *OsiDylpWarmStartBasis::generateDiff
00264     (const CoinWarmStart *const oldCWS) const ;
00265   friend void OsiDylpWarmStartBasis::applyDiff
00266     (const CoinWarmStartDiff *const diff) ;
00267 
00269   OsiDylpWarmStartBasisDiff (int sze, const unsigned int *const diffNdxs,
00270                              const unsigned int *const diffVals,
00271                              const CoinWarmStartBasisDiff *const cwsbd) ;
00272   
00274   OsiDylpWarmStartBasisDiff ()
00275     : CoinWarmStartBasisDiff(),
00276       consze_(0),
00277       condiffNdxs_(0),
00278       condiffVals_(0)
00279   { /* intentionally left blank */ } ;
00280 
00287   OsiDylpWarmStartBasisDiff (const OsiDylpWarmStartBasisDiff &odwsbd) ;
00288     
00289   /* Data members */
00290 
00292   int consze_ ;
00293 
00296   unsigned int *condiffNdxs_ ;
00297 
00300   unsigned int *condiffVals_ ;
00301 
00302 } ;
00303 
00304 
00305 
00306 #endif // OsiDylpWarmStartBasis_H

Generated on Thu May 15 21:59:05 2008 by  doxygen 1.4.7