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