CoinWarmStartPrimalDual.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006 #ifndef CoinWarmStartPrimalDual_H
00007 #define CoinWarmStartPrimalDual_H
00008
00009 #include "CoinHelperFunctions.hpp"
00010 #include "CoinWarmStart.hpp"
00011 #include "CoinWarmStartVector.hpp"
00012
00013
00014
00015
00018 class CoinWarmStartPrimalDual : public virtual CoinWarmStart {
00019 public:
00021 inline int dualSize() const { return dual_.size(); }
00023 inline const double * dual() const { return dual_.values(); }
00024
00026 inline int primalSize() const { return primal_.size(); }
00028 inline const double * primal() const { return primal_.values(); }
00029
00039 void assign(int primalSize, int dualSize, double*& primal, double *& dual) {
00040 primal_.assignVector(primalSize, primal);
00041 dual_.assignVector(dualSize, dual);
00042 }
00043
00044 CoinWarmStartPrimalDual() : primal_(), dual_() {}
00045
00046 CoinWarmStartPrimalDual(int primalSize, int dualSize,
00047 const double* primal, const double * dual) :
00048 primal_(primalSize, primal), dual_(dualSize, dual) {}
00049
00050 CoinWarmStartPrimalDual(const CoinWarmStartPrimalDual& rhs) :
00051 primal_(rhs.primal_), dual_(rhs.dual_) {}
00052
00053 CoinWarmStartPrimalDual& operator=(const CoinWarmStartPrimalDual& rhs) {
00054 if (this != &rhs) {
00055 primal_ = rhs.primal_;
00056 dual_ = rhs.dual_;
00057 }
00058 return *this;
00059 }
00060
00066 inline void clear() {
00067 primal_.clear();
00068 dual_.clear();
00069 }
00070
00071 inline void swap(CoinWarmStartPrimalDual& rhs) {
00072 if (this != &rhs) {
00073 primal_.swap(rhs.primal_);
00074 dual_.swap(rhs.dual_);
00075 }
00076 }
00077
00079 virtual CoinWarmStart *clone() const {
00080 return new CoinWarmStartPrimalDual(*this);
00081 }
00082
00083 virtual ~CoinWarmStartPrimalDual() {}
00084
00087
00095 virtual CoinWarmStartDiff*
00096 generateDiff (const CoinWarmStart *const oldCWS) const ;
00097
00104 virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
00105
00107
00108 #if 0
00109 protected:
00110 inline const CoinWarmStartVector<double>& primalWarmStartVector() const
00111 { return primal_; }
00112 inline const CoinWarmStartVector<double>& dualWarmStartVector() const
00113 { return dual_; }
00114 #endif
00115
00116 private:
00118
00119 CoinWarmStartVector<double> primal_;
00120 CoinWarmStartVector<double> dual_;
00122 };
00123
00124
00125
00142 class CoinWarmStartPrimalDualDiff : public virtual CoinWarmStartDiff
00143 {
00144 friend CoinWarmStartDiff*
00145 CoinWarmStartPrimalDual::generateDiff(const CoinWarmStart *const oldCWS) const;
00146 friend void
00147 CoinWarmStartPrimalDual::applyDiff(const CoinWarmStartDiff *const diff) ;
00148
00149 public:
00150
00153 virtual CoinWarmStartDiff *clone() const
00154 {
00155 return new CoinWarmStartPrimalDualDiff(*this);
00156 }
00157
00159 virtual ~CoinWarmStartPrimalDualDiff() {}
00160
00161 protected:
00162
00169 CoinWarmStartPrimalDualDiff () : primalDiff_(), dualDiff_() {}
00170
00181 CoinWarmStartPrimalDualDiff (const CoinWarmStartPrimalDualDiff &rhs) :
00182 primalDiff_(rhs.primalDiff_), dualDiff_(rhs.dualDiff_) {}
00183
00189 inline void clear() {
00190 primalDiff_.clear();
00191 dualDiff_.clear();
00192 }
00193
00194 inline void swap(CoinWarmStartPrimalDualDiff& rhs) {
00195 if (this != &rhs) {
00196 primalDiff_.swap(rhs.primalDiff_);
00197 dualDiff_.swap(rhs.dualDiff_);
00198 }
00199 }
00200
00201 private:
00202
00207 CoinWarmStartVectorDiff<double> primalDiff_;
00208 CoinWarmStartVectorDiff<double> dualDiff_;
00209 } ;
00210
00211 #endif