00001
00029 #ifndef ABA_LPSOLUTION_INC
00030 #define ABA_LPSOLUTION_INC
00031
00032 #include "abacus/master.h"
00033 #include "abacus/lpsolution.h"
00034 #include "abacus/active.h"
00035 #include "abacus/sub.h"
00036
00037 template <class BaseType, class CoType>
00038 ABA_LPSOLUTION<BaseType, CoType>::ABA_LPSOLUTION(ABA_SUB *sub,
00039 bool primalVariables, ABA_ACTIVE<BaseType, CoType> *active )
00040 :
00041 master_(sub->master_),
00042 nVarCon_(primalVariables?sub->nVar():sub->nCon()),
00043 idSub_(sub->id_),
00044 idLp_(sub->nIter_),
00045 #ifdef PARALLLEL
00046 idProc_(0),
00047 #endif
00048 zVal_(master_,nVarCon_)
00049 {
00050
00051
00052 if(active==0)
00053 active_=0;
00054 else
00055 active_=new ABA_ACTIVE<BaseType, CoType>(*active);
00056
00057 double *p;
00058 if(primalVariables==true)
00059 p=sub->xVal_;
00060 else
00061 p=sub->yVal_;
00062
00063 for(int i=0;i<nVarCon_;i++)
00064 zVal_[i]=p[i];
00065
00066 }
00067
00068 template <class BaseType, class CoType>
00069 ABA_LPSOLUTION<BaseType, CoType>::ABA_LPSOLUTION(ABA_MASTER *master)
00070 :
00071 master_(master),
00072 nVarCon_(0),
00073 idSub_(0),
00074 idLp_(0),
00075 #ifdef PARALLLEL
00076 idProc_(0),
00077 #endif
00078 zVal_(master_,0)
00079 {
00080 active_=0;
00081
00082 }
00083
00084 template <class BaseType, class CoType>
00085 ABA_LPSOLUTION<BaseType, CoType>::ABA_LPSOLUTION(const ABA_LPSOLUTION<BaseType, CoType> &rhs)
00086 :
00087 master_(rhs.master_),
00088 nVarCon_(rhs.nVarCon_),
00089 idSub_(rhs.idSub_),
00090 idLp_(rhs.idLp_),
00091 #ifdef PARALLLEL
00092 idProc_(rhs.idProc_),
00093 #endif
00094 zVal_(rhs.zVal_)
00095 {
00096 if(rhs.active_)
00097 active_=new ABA_ACTIVE<BaseType,CoType>(*rhs.active_);
00098 }
00099
00100 template <class BaseType, class CoType>
00101 ABA_LPSOLUTION<BaseType, CoType>::~ABA_LPSOLUTION()
00102 {
00103 delete active_;
00104 }
00105
00106 template <class BaseType, class CoType>
00107 ostream &operator<<(ostream &os, const ABA_LPSOLUTION<BaseType, CoType> &rhs)
00108 {
00109 double machEps=rhs.master_->machineEps();
00110 os << rhs.idSub_ << " ";
00111 os << rhs.idLp_ << " ";
00112 os << rhs.nVarCon_ << " ";
00113 for(int i=0;i<rhs.nVarCon_;i++)
00114 if(fabs(rhs.zVal_[i])<machEps)
00115 os << "0.0 ";
00116 else
00117 os << rhs.zVal_[i] << " " ;
00118 os << endl;
00119 return os;
00120 }
00121
00122 template <class BaseType, class CoType>
00123 int ABA_LPSOLUTION<BaseType, CoType>::nVarCon() const
00124 {
00125 return nVarCon_;
00126 }
00127
00128 template <class BaseType, class CoType>
00129 double* ABA_LPSOLUTION<BaseType, CoType>::zVal()
00130 {
00131 return &(zVal_[0]);
00132 }
00133
00134 template <class BaseType, class CoType>
00135 ABA_ACTIVE<BaseType, CoType> * ABA_LPSOLUTION<BaseType, CoType>::active()
00136 {
00137 return active_;
00138 }
00139
00140 template <class BaseType, class CoType>
00141 int ABA_LPSOLUTION<BaseType, CoType>::idSub() const
00142 {
00143 return idSub_;
00144 }
00145
00146 template <class BaseType, class CoType>
00147 int ABA_LPSOLUTION<BaseType, CoType>::idLp() const
00148 {
00149 return idLp_;
00150 }
00151
00152 #ifdef PARALLLEL
00153 template <class BaseType, class CoType>
00154 int ABA_LPSOLUTION<BaseType, CoType>::idProc() const
00155 {
00156 return idProc_;
00157 }
00158 #endif
00159
00160
00161 #endif // ABA_LPSOLUTION_INC