OsiDylpWarmStartBasis.hpp
Go to the documentation of this file.
1 #ifndef OsiDylpWarmStartBasis_H
2 #define OsiDylpWarmStartBasis_H
3 
14 /*
15  sccs: @(#)OsiDylpWarmStartBasis.hpp 1.5 09/16/04
16  cvs: $Id: OsiDylpWarmStartBasis.hpp 1408 2009-10-04 10:27:59Z stefan $
17 */
18 
19 #include "CoinWarmStartBasis.hpp"
20 
21 class CoinMessageHandler;
22 
23 #define DYLP_INTERNAL
24 extern "C" {
25 #include "dylp.h"
26 }
27 
28 
29 
41 class OsiDylpWarmStartBasis : public CoinWarmStartBasis
42 
43 { public:
44 
53 
56  int numberActiveConstraints() const ;
57 
58 
61  inline Status getConStatus (int i) const
62 
63  { const int st = (constraintStatus_[i>>2] >> ((i&3)<<1)) & 3 ;
64  return (static_cast<CoinWarmStartBasis::Status>(st)) ; }
65 
66 
69  inline void setConStatus (int i, Status st)
70 
71  { char &st_byte = constraintStatus_[i>>2] ;
72  st_byte = static_cast<char>(st_byte & ~(3 << ((i&3)<<1))) ;
73  st_byte = static_cast<char>(st_byte | (st << ((i&3)<<1))) ; }
74 
75 
78  inline char *getConstraintStatus () { return (constraintStatus_) ; }
79 
86  inline const char *getConstraintStatus () const
87 
88  { return (constraintStatus_) ; }
89 
90 
93  inline void setPhase (dyphase_enum phase) { phase_ = phase ; }
94 
97  inline dyphase_enum getPhase () const { return (phase_) ; }
98 
100 
103 
106  CoinWarmStartDiff *generateDiff (const CoinWarmStart *const oldCWS) const ;
107 
110  void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
111 
113 
116 
119  void setSize (int ns, int na) ;
120 
123  void resize (int numRows, int numCols) ;
124 
137  void compressRows (int tgtCnt, const int *tgts) ;
138 
146  void deleteRows (int number, const int *which) ;
147 
161  virtual void mergeBasis(const CoinWarmStartBasis *src,
162  const XferVec *xferRows,
163  const XferVec *xferCols) ;
164 
166 
169 
173 
176  OsiDylpWarmStartBasis (int ns, int na, const char *sStat,
177  const char *aStat, const char *cStat = 0) ;
178 
181  OsiDylpWarmStartBasis (const CoinWarmStartBasis &cwsb) ;
182 
186 
189  CoinWarmStart *clone () const ;
190 
194 
198 
201  void assignBasisStatus
202  (int ns, int na, char *&sStat, char *&aStat, char *&cStat) ;
203 
206  void assignBasisStatus
207  (int ns, int na, char *&sStat, char *&aStat) ;
208 
209 
211 
214 
217  void print () const ;
218 
221  void checkBasis (CoinMessageHandler* msghandler = NULL) const ;
222 
224 
225  private:
226 
229 
230  dyphase_enum phase_ ;
231 
233 
235 
236 } ;
237 
238 
239 
263 class OsiDylpWarmStartBasisDiff : public CoinWarmStartBasisDiff
264 { public:
265 
267  virtual CoinWarmStartDiff *clone() const
269  return (dynamic_cast<CoinWarmStartDiff *>(odwsbd)) ; }
270 
272  virtual
274 
277  { delete[] condiffNdxs_ ;
278  delete[] condiffVals_ ; }
279 
280  private:
281 
282  friend CoinWarmStartDiff *OsiDylpWarmStartBasis::generateDiff
283  (const CoinWarmStart *const oldCWS) const ;
285  (const CoinWarmStartDiff *const diff) ;
286 
288  OsiDylpWarmStartBasisDiff (int sze, const unsigned int *const diffNdxs,
289  const unsigned int *const diffVals,
290  const CoinWarmStartBasisDiff *const cwsbd) ;
291 
294  : CoinWarmStartBasisDiff(),
295  consze_(0),
296  condiffNdxs_(0),
297  condiffVals_(0)
298  { /* intentionally left blank */ }
299 
307 
308  /* Data members */
309 
311  int consze_ ;
312 
315  unsigned int *condiffNdxs_ ;
316 
319  unsigned int *condiffVals_ ;
320 
321 } ;
322 
323 
324 
325 #endif // OsiDylpWarmStartBasis_H