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