Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

OsiDylpWarmStartBasis.hpp

Go to the documentation of this file.
00001 #ifdef COIN_HAS_DYLP
00002 #ifndef OsiDylpWarmStartBasis_H
00003 #define OsiDylpWarmStartBasis_H
00004 
00015 /*
00016   sccs: @(#)OsiDylpWarmStartBasis.hpp   1.5     09/16/04
00017   cvs: $Id: OsiDylpWarmStartBasis.hpp,v 1.8 2006/04/06 19:40:47 lou Exp $
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 
00136   void compressRows (int tgtCnt, const int *tgts) ;
00137 
00145   void deleteRows (int number, const int *which) ;
00146 
00148 
00151 
00154   OsiDylpWarmStartBasis () ;
00155 
00158   OsiDylpWarmStartBasis (int ns, int na, const char *sStat,
00159                          const char *aStat, const char *cStat = 0) ;
00160 
00163   OsiDylpWarmStartBasis (const CoinWarmStartBasis &cwsb) ;
00164 
00167   OsiDylpWarmStartBasis (const OsiDylpWarmStartBasis &ws) ;
00168 
00171   CoinWarmStart *clone () const ;
00172 
00175   ~OsiDylpWarmStartBasis () ;
00176 
00179   OsiDylpWarmStartBasis& operator= (const OsiDylpWarmStartBasis &rhs) ;
00180 
00183   void assignBasisStatus
00184     (int ns, int na, char *&sStat, char *&aStat, char *&cStat) ;
00185 
00188   void assignBasisStatus
00189     (int ns, int na, char *&sStat, char *&aStat) ;
00190 
00191 
00193 
00196 
00199   void print () const ;
00200 
00203   void checkBasis () const ;
00204 
00206 
00207   private:
00208 
00211 
00212   dyphase_enum phase_ ;         
00213 
00214   char *constraintStatus_ ;     
00215 
00217 
00218 } ;
00219 
00220 
00221 
00245 class OsiDylpWarmStartBasisDiff : public CoinWarmStartBasisDiff
00246 { public:
00247 
00249   virtual CoinWarmStartDiff *clone() const
00250   { OsiDylpWarmStartBasisDiff *odwsbd =  new OsiDylpWarmStartBasisDiff(*this) ;
00251     return (dynamic_cast<CoinWarmStartDiff *>(odwsbd)) ; }
00252 
00254   virtual
00255   OsiDylpWarmStartBasisDiff &operator= (const OsiDylpWarmStartBasisDiff &rhs) ;
00256 
00258   virtual ~OsiDylpWarmStartBasisDiff()
00259   { delete[] condiffNdxs_ ;
00260     delete[] condiffVals_ ; }
00261 
00262   private:
00263 
00264   friend CoinWarmStartDiff *OsiDylpWarmStartBasis::generateDiff
00265     (const CoinWarmStart *const oldCWS) const ;
00266   friend void OsiDylpWarmStartBasis::applyDiff
00267     (const CoinWarmStartDiff *const diff) ;
00268 
00270   OsiDylpWarmStartBasisDiff (int sze, const unsigned int *const diffNdxs,
00271                              const unsigned int *const diffVals,
00272                              const CoinWarmStartBasisDiff *const cwsbd) ;
00273   
00275   OsiDylpWarmStartBasisDiff ()
00276     : CoinWarmStartBasisDiff(),
00277       consze_(0),
00278       condiffNdxs_(0),
00279       condiffVals_(0)
00280   { /* intentionally left blank */ } ;
00281 
00288   OsiDylpWarmStartBasisDiff (const OsiDylpWarmStartBasisDiff &odwsbd) ;
00289     
00290   /* Data members */
00291 
00293   int consze_ ;
00294 
00297   unsigned int *condiffNdxs_ ;
00298 
00301   unsigned int *condiffVals_ ;
00302 
00303 } ;
00304 
00305 
00306 
00307 #endif // OsiDylpWarmStartBasis_H
00308 #endif // COIN_HAS_DYLP

Generated on Sun Jun 11 02:00:40 2006 by  doxygen 1.3.9.1