CoinWarmStartDual.hpp
Go to the documentation of this file.
1 /* $Id: CoinWarmStartDual.hpp 1215 2009-11-05 11:03:04Z forrest $ */
2 // Copyright (C) 2000, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 
5 #ifndef CoinWarmStartDual_H
6 #define CoinWarmStartDual_H
7 
9 #include "CoinWarmStart.hpp"
10 #include "CoinWarmStartVector.hpp"
11 
12 
13 //#############################################################################
14 
17 class CoinWarmStartDual : public virtual CoinWarmStart {
18 public:
20  inline int size() const { return dual_.size(); }
22  inline const double * dual() const { return dual_.values(); }
23 
27  inline void assignDual(int size, double *& dual)
28  { dual_.assignVector(size, dual); }
29 
31 
32  CoinWarmStartDual(int size, const double * dual) : dual_(size, dual) {}
33 
35 
37  if (this != &rhs) {
38  dual_ = rhs.dual_;
39  }
40  return *this;
41  }
42 
44  virtual CoinWarmStart *clone() const {
45  return new CoinWarmStartDual(*this);
46  }
47 
48  virtual ~CoinWarmStartDual() {}
49 
52 
60  virtual CoinWarmStartDiff*
61  generateDiff (const CoinWarmStart *const oldCWS) const ;
62 
69  virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
70 
71 #if 0
72 protected:
73  inline const CoinWarmStartVector<double>& warmStartVector() const { return dual_; }
74 #endif
75 
77 
78 private:
81 };
82 
83 //#############################################################################
84 
101 { public:
102 
104  virtual CoinWarmStartDiff *clone() const
105  {
106  return new CoinWarmStartDualDiff(*this) ;
107  }
108 
111  {
112  if (this != &rhs) {
113  diff_ = rhs.diff_;
114  }
115  return *this;
116  }
117 
120 
121  protected:
122 
130 
142  diff_(rhs.diff_) {}
143 
144  private:
145 
146  friend CoinWarmStartDiff*
147  CoinWarmStartDual::generateDiff(const CoinWarmStart *const oldCWS) const ;
148  friend void
150 
152  CoinWarmStartDualDiff (int sze, const unsigned int *const diffNdxs,
153  const double *const diffVals) :
154  diff_(sze, diffNdxs, diffVals) {}
155 
161 };
162 
163 
164 #endif
165 
CoinWarmStartDualDiff(const CoinWarmStartDualDiff &rhs)
Copy constructor.
int size() const
return the size of the vector
virtual CoinWarmStartDiff * generateDiff(const CoinWarmStart *const oldCWS) const
Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified b...
virtual CoinWarmStart * clone() const
`Virtual constructor'
const T * values() const
return a pointer to the array of vectors
CoinWarmStartDualDiff(int sze, const unsigned int *const diffNdxs, const double *const diffVals)
Standard constructor.
Abstract base class for warm start `diff' objects.
CoinWarmStartDual(const CoinWarmStartDual &rhs)
virtual void applyDiff(const CoinWarmStartDiff *const cwsdDiff)
Apply diff to this warm start.
A `diff' between two CoinWarmStartDual objects.
virtual ~CoinWarmStartDualDiff()
Destructor.
CoinWarmStartDual & operator=(const CoinWarmStartDual &rhs)
virtual CoinWarmStartDualDiff & operator=(const CoinWarmStartDualDiff &rhs)
Assignment.
int size() const
return the size of the dual vector
Declaration of the generic simplex (basis-oriented) warm start class. Also contains a basis diff clas...
void assignVector(int size, T *&vec)
Assign the vector to be the warmstart information.
WarmStart information that is only a dual vector.
void assignDual(int size, double *&dual)
Assign the dual vector to be the warmstart information.
CoinWarmStartVector< double > dual_
CoinWarmStartDual(int size, const double *dual)
Abstract base class for warm start information.
const double * dual() const
return a pointer to the array of duals
CoinWarmStartVectorDiff< double > diff_
The difference in the dual vector is simply the difference in a vector.
CoinWarmStartDualDiff()
Default constructor.
virtual CoinWarmStartDiff * clone() const
`Virtual constructor'