00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef __NUMVARARRAY_H
00033 #define __NUMVARARRAY_H
00034
00035 #include "Config.h"
00036 #include "Constant.h"
00037 #include "MuteVar.h"
00038
00039 #include <vector>
00040 #include <string>
00041 #include <stdexcept>
00042
00043 namespace Modelib {
00044
00045
00046 class Model;
00047 class NumVar;
00048
00050
00055 class NumVarArray
00056 {
00057 protected:
00058 Model * modele;
00059 std::vector<NumVar *> varArray;
00060 MuteVar::VarType type;
00061
00062 public:
00064 NumVarArray():modele(0),type(MuteVar::FLOAT) {}
00065
00066 NumVarArray( Model & _modele,
00067 unsigned size = 0,
00068 float _lb= 0,
00069 float _ub= Infinity,
00070 MuteVar::VarType _type = MuteVar::FLOAT,
00071 const std::string & nom = "unknow",
00072 const std::string & fin = "");
00073
00074 NumVarArray( const NumVarArray & nva );
00075
00076 NumVarArray( const std::vector<NumVar> & nva );
00077
00078 NumVarArray & operator= ( const NumVarArray & nva );
00079
00083 unsigned Size() const { return varArray.size();}
00088 NumVar& operator[] (unsigned n) const
00089 {
00090 if( n < varArray.size() )
00091 return *(varArray[n]);
00092 else
00093 throw std::out_of_range("NumVarray::operator[] : index out of range");
00094 }
00100 #ifndef COMPILE_FOR_PYTHON
00101 NumVar * Get(unsigned n) const
00102 {
00103 if( n < varArray.size() )
00104 return varArray[n];
00105 else
00106 throw std::out_of_range("NumVarray::Get : index out of range");
00107 }
00108 #else
00109 NumVar& Get(unsigned n) const
00110 {
00111 if( n < varArray.size() )
00112 return *(varArray[n]);
00113 else
00114 throw std::out_of_range("NumVarray::Get : index out of range");
00115 }
00116 #endif
00117
00120 MuteVar::VarType GetType() const { return type;}
00121
00122 ~NumVarArray();
00123
00124 #ifdef COMPILE_FOR_PYTHON
00125 NumVar& GetItem(unsigned n) const {return *(varArray[n]);}
00126 void SetItem(NumVar* _n, unsigned n) {varArray[n] = _n; }
00127 #endif
00128
00129
00130 };
00131
00132
00134
00135 class IntVarArray: public NumVarArray
00136 {
00137 public:
00138 #ifndef COMPILE_FOR_PYTHON
00139 IntVarArray( Model &_modele,
00140 unsigned size=0,
00141 int _lb= 0,
00142 int _ub= Infinity,
00143 const std::string & nom = "unknow",
00144 const std::string & fin = "")
00145 :NumVarArray( _modele,size,static_cast<float>(_lb),static_cast<float>(_ub),MuteVar::INT,nom,fin) {}
00146 #else
00147 IntVarArray( Model &_modele,
00148 unsigned size=0,
00149 float _lb= 0,
00150 float _ub= Infinity,
00151 const std::string & nom = "unknow",
00152 const std::string & fin = "")
00153 :NumVarArray( _modele,size,_lb,_ub,MuteVar::INT,nom,fin) {}
00154 #endif
00155 };
00156
00158 class FloatVarArray: public NumVarArray
00159 {
00160 public:
00161 FloatVarArray( Model &_modele,
00162 unsigned size=0,
00163 float _lb= 0.0f,
00164 float _ub= Infinity,
00165 const std::string & nom = "unknow",
00166 const std::string & fin = "")
00167 :NumVarArray( _modele,size,_lb,_ub,MuteVar::FLOAT,nom,fin) {}
00168 };
00169
00171 class BoolVarArray: public NumVarArray
00172 {
00173 public:
00174 BoolVarArray( Model &_modele,
00175 unsigned size=0,
00176 const std::string & nom = "unknow",
00177 const std::string & fin = "")
00178 :NumVarArray( _modele,size,0.0f,1.0f,MuteVar::BOOL,nom,fin) {}
00179 };
00180
00181 #ifdef COMPILE_FOR_PYTHON
00182 void export_NumVarArray();
00183 #endif
00184
00185 }
00186
00187 #endif