CoinWarmStartPrimalDual.hpp
Go to the documentation of this file.
1 /* $Id: CoinWarmStartPrimalDual.hpp 1191 2009-07-25 08:38:12Z forrest $ */
2 // Copyright (C) 2000, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 
5 #ifndef CoinWarmStartPrimalDual_H
6 #define CoinWarmStartPrimalDual_H
7 
9 #include "CoinWarmStart.hpp"
10 #include "CoinWarmStartVector.hpp"
11 
12 
13 //#############################################################################
14 
17 class CoinWarmStartPrimalDual : public virtual CoinWarmStart {
18 public:
20  inline int dualSize() const { return dual_.size(); }
22  inline const double * dual() const { return dual_.values(); }
23 
25  inline int primalSize() const { return primal_.size(); }
27  inline const double * primal() const { return primal_.values(); }
28 
38  void assign(int primalSize, int dualSize, double*& primal, double *& dual) {
39  primal_.assignVector(primalSize, primal);
40  dual_.assignVector(dualSize, dual);
41  }
42 
44 
46  const double* primal, const double * dual) :
47  primal_(primalSize, primal), dual_(dualSize, dual) {}
48 
50  primal_(rhs.primal_), dual_(rhs.dual_) {}
51 
53  if (this != &rhs) {
54  primal_ = rhs.primal_;
55  dual_ = rhs.dual_;
56  }
57  return *this;
58  }
59 
65  inline void clear() {
66  primal_.clear();
67  dual_.clear();
68  }
69 
70  inline void swap(CoinWarmStartPrimalDual& rhs) {
71  if (this != &rhs) {
72  primal_.swap(rhs.primal_);
73  dual_.swap(rhs.dual_);
74  }
75  }
76 
78  virtual CoinWarmStart *clone() const {
79  return new CoinWarmStartPrimalDual(*this);
80  }
81 
83 
86 
94  virtual CoinWarmStartDiff*
95  generateDiff (const CoinWarmStart *const oldCWS) const ;
96 
103  virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
104 
106 
107 #if 0
108 protected:
109  inline const CoinWarmStartVector<double>& primalWarmStartVector() const
110  { return primal_; }
111  inline const CoinWarmStartVector<double>& dualWarmStartVector() const
112  { return dual_; }
113 #endif
114 
115 private:
117 
121 };
122 
123 //#############################################################################
124 
142 {
143  friend CoinWarmStartDiff*
144  CoinWarmStartPrimalDual::generateDiff(const CoinWarmStart *const oldCWS) const;
145  friend void
147 
148 public:
149 
152  virtual CoinWarmStartDiff *clone() const
153  {
154  return new CoinWarmStartPrimalDualDiff(*this);
155  }
156 
159 
160 protected:
161 
169 
182 
188  inline void clear() {
189  primalDiff_.clear();
190  dualDiff_.clear();
191  }
192 
193  inline void swap(CoinWarmStartPrimalDualDiff& rhs) {
194  if (this != &rhs) {
196  dualDiff_.swap(rhs.dualDiff_);
197  }
198  }
199 
200 private:
201 
208 } ;
209 
210 #endif
CoinWarmStartPrimalDual & operator=(const CoinWarmStartPrimalDual &rhs)
void clear()
Clear the data.
int size() const
return the size of the vector
CoinWarmStartPrimalDual(const CoinWarmStartPrimalDual &rhs)
const double * dual() const
return a pointer to the array of duals
WarmStart information that is only a dual vector.
const T * values() const
return a pointer to the array of vectors
Abstract base class for warm start `diff' objects.
virtual CoinWarmStartDiff * clone() const
`Virtual constructor'. To be used when retaining polymorphism is important
void swap(CoinWarmStartPrimalDual &rhs)
virtual ~CoinWarmStartPrimalDualDiff()
Destructor.
void swap(CoinWarmStartVector &rhs)
virtual CoinWarmStart * clone() const
`Virtual constructor'
CoinWarmStartVectorDiff< double > primalDiff_
These two differences describe the differences in the primal and in the dual vector.
int primalSize() const
return the size of the primal vector
Declaration of the generic simplex (basis-oriented) warm start class. Also contains a basis diff clas...
CoinWarmStartVector< double > dual_
void swap(CoinWarmStartVectorDiff &rhs)
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...
void assign(int primalSize, int dualSize, double *&primal, double *&dual)
Assign the primal/dual vectors to be the warmstart information.
void assignVector(int size, T *&vec)
Assign the vector to be the warmstart information.
CoinWarmStartPrimalDualDiff()
Default constructor.
CoinWarmStartVectorDiff< double > dualDiff_
int dualSize() const
return the size of the dual vector
CoinWarmStartPrimalDual(int primalSize, int dualSize, const double *primal, const double *dual)
void swap(CoinWarmStartPrimalDualDiff &rhs)
Abstract base class for warm start information.
CoinWarmStartPrimalDualDiff(const CoinWarmStartPrimalDualDiff &rhs)
Copy constructor.
const double * primal() const
return a pointer to the array of primals
virtual void applyDiff(const CoinWarmStartDiff *const cwsdDiff)
Apply diff to this warm start.
void clear()
Clear the data.
void clear()
Clear the data.
CoinWarmStartVector< double > primal_
A `diff' between two CoinWarmStartPrimalDual objects.