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
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #ifndef __VARIABLES_HPP__
00050 #define __VARIABLES_HPP__
00051
00052
00053 #include <openfluid/core/TypeDefs.hpp>
00054 #include <openfluid/core/ValuesBuffer.hpp>
00055 #include <openfluid/dllexport.hpp>
00056
00057 namespace openfluid { namespace core {
00058
00059
00060 template <class T>
00061 class DLLEXPORT Variables
00062 {
00063 private :
00064
00065 typedef std::map<VariableName_t,ValuesBuffer<T> > VariablesMap_t;
00066 VariablesMap_t m_Data;
00067
00068
00069 public :
00070
00071 Variables();
00072
00073 ~Variables();
00074
00075 bool createVariable(const VariableName_t aName);
00076
00077 bool modifyValue(const VariableName_t aName, const TimeStep_t aStep, const T aValue);
00078
00079 bool appendValue(const VariableName_t aName, const T aValue);
00080
00081 bool getValue(const VariableName_t aName, const TimeStep_t aStep, T *aValue) const;
00082
00083 bool getCurrentValue(const VariableName_t aName, T *aValue) const;
00084
00085 bool isVariableExist(const VariableName_t aName) const;
00086
00087 bool isVariableExist(const VariableName_t aName, const TimeStep_t aStep) const;
00088
00089 std::vector<VariableName_t> getVariablesNames() const;
00090
00091 unsigned int getVariableValuesCount(const VariableName_t aName) const;
00092
00093 bool isAllVariablesCount(unsigned int Count) const;
00094
00095 };
00096
00097
00098
00099
00100
00101
00102 template <class T>
00103 Variables<T>::Variables()
00104 {
00105
00106 }
00107
00108
00109
00110
00111
00112
00113 template <class T>
00114 Variables<T>::~Variables()
00115 {
00116
00117 }
00118
00119
00120
00121
00122
00123 template <class T>
00124 bool Variables<T>::createVariable(const VariableName_t aName)
00125 {
00126 if (!isVariableExist(aName))
00127 {
00128 m_Data[aName];
00129 return true;
00130 }
00131 return false;
00132 }
00133
00134
00135
00136
00137 template <class T>
00138 bool Variables<T>::modifyValue(const VariableName_t aName, const TimeStep_t aStep, const T aValue)
00139 {
00140 if (isVariableExist(aName,aStep))
00141 {
00142 return m_Data[aName].modifyValue(aStep,aValue);
00143 }
00144 return false;
00145 }
00146
00147
00148
00149
00150
00151
00152 template <class T>
00153 bool Variables<T>::appendValue(const VariableName_t aName, const T aValue)
00154 {
00155 if (isVariableExist(aName))
00156 {
00157 return m_Data[aName].appendValue(aValue);
00158 }
00159 return false;
00160 }
00161
00162
00163
00164
00165
00166 template <class T>
00167 bool Variables<T>::getValue(const VariableName_t aName, const TimeStep_t aStep, T* aValue) const
00168 {
00169
00170 typename VariablesMap_t::const_iterator it = m_Data.find(aName);
00171
00172 if (it != m_Data.end())
00173 {
00174 return it->second.getValue(aStep,aValue);
00175 }
00176
00177 return false;
00178 }
00179
00180
00181
00182
00183
00184
00185 template <class T>
00186 bool Variables<T>::getCurrentValue(const VariableName_t aName, T* aValue) const
00187 {
00188
00189 typename VariablesMap_t::const_iterator it = m_Data.find(aName);
00190
00191 if (it != m_Data.end())
00192 {
00193 return it->second.getCurrentValue(aValue);
00194 }
00195
00196 return false;
00197 }
00198
00199
00200
00201
00202
00203 template <class T>
00204 bool Variables<T>::isVariableExist(const VariableName_t aName) const
00205 {
00206
00207 return m_Data.find(aName) != m_Data.end();
00208 }
00209
00210
00211
00212
00213 template <class T>
00214 bool Variables<T>::isVariableExist(const VariableName_t aName, const TimeStep_t aStep) const
00215 {
00216 typename VariablesMap_t::const_iterator it;
00217
00218 it = m_Data.find(aName);
00219
00220 if (it != m_Data.end())
00221 {
00222
00223 return (aStep < it->second.getNextStep());
00224 }
00225 return false;
00226
00227 }
00228
00229
00230
00231
00232 template <class T>
00233 std::vector<VariableName_t> Variables<T>::getVariablesNames() const
00234 {
00235 std::vector<VariableName_t> TheNames;
00236
00237 typename VariablesMap_t::const_iterator it;
00238
00239 for (it = m_Data.begin() ; it != m_Data.end() ; ++it)
00240 {
00241 TheNames.push_back(it->first);
00242 }
00243
00244 return TheNames;
00245
00246 }
00247
00248
00249
00250
00251
00252
00253 template <class T>
00254 unsigned int Variables<T>::getVariableValuesCount(const VariableName_t aName) const
00255 {
00256
00257 typename VariablesMap_t::const_iterator it;
00258
00259 it = m_Data.find(aName);
00260
00261 if (it == m_Data.end()) return (-1);
00262
00263 else return it->second.getNextStep();
00264 }
00265
00266
00267
00268
00269 template <class T>
00270 bool Variables<T>::isAllVariablesCount(unsigned int Count) const
00271 {
00272 typename VariablesMap_t::const_iterator it;
00273
00274 for (it = m_Data.begin();it != m_Data.end();++it)
00275 {
00276 if (it->second.getNextStep() != Count) return false;
00277 }
00278 return true;
00279 }
00280
00281
00282 } }
00283
00284
00285
00286
00287 #endif