Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members

OsiDylpWarmStartBasis.hpp

00001 #ifdef COIN_USE_DYLP
00002 #ifndef OsiDylpWarmStartBasis_H
00003 #define OsiDylpWarmStartBasis_H
00004 
00015 /*
00016   sccs: %W%     %G%
00017   cvs: $Id: OsiDylpWarmStartBasis.hpp,v 1.2 2003/10/23 17:34:33 lou-oss 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 
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   { /* intentionally left blank */ } ;
00259 
00266   OsiDylpWarmStartBasisDiff (const OsiDylpWarmStartBasisDiff &odwsbd) ;
00267     
00268   /* Data members */
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

Generated on Wed Dec 3 14:35:31 2003 for Osi by doxygen 1.3.5