41 #ifndef __OPENFLUID_TOOLS_DISTRIBUTIONBINDINGS_HPP__
42 #define __OPENFLUID_TOOLS_DISTRIBUTIONBINDINGS_HPP__
55 #include <openfluid/config.hpp>
61 inline std::vector<openfluid::tools::ClassIDVar>
64 std::vector<openfluid::tools::ClassIDVar> CSVTriplets;
65 int Begin = RemoveFirst ? 1 : 0;
66 for (std::size_t i=Begin;i<StringArray.size();i++)
68 const std::string& Column = StringArray[i];
70 std::size_t HashPosition = Column.find(openfluid::config::CHAR_SEPARATOR_UNIT);
71 std::size_t ColonPosition = Column.find(openfluid::config::CHAR_SEPARATOR_VAR);
73 if(HashPosition == std::string::npos || ColonPosition == std::string::npos)
80 CurrentCSVTriplet.
UnitsClass = Column.substr(0,HashPosition);
81 CurrentCSVTriplet.
UnitsIDsStr = Column.substr(HashPosition+1, ColonPosition-HashPosition-1);
82 CurrentCSVTriplet.
VariableName = Column.substr(ColonPosition+1);
84 CSVTriplets.push_back(CurrentCSVTriplet);
95 bool RemoveFirst=
false)
104 template<
typename DataType=
double>
124 template<
typename DataType=
double>
159 bool DataFound =
true;
162 if ((RNV.isAvailable && RNV.NextValue.first < DT) ||
163 RNV.isAvailable ==
false)
165 RNV.isAvailable =
false;
167 while (DataFound && !RNV.isAvailable)
169 DataFound = RNV.Reader->getNextValue(CI);
170 if (DataFound && CI.first >= DT)
172 RNV.isAvailable =
true;
188 bool AvailableFound =
false;
193 if (!AvailableFound && RNV.isAvailable)
195 NDT = RNV.NextValue.first;
196 AvailableFound =
true;
207 if (RNV.isAvailable && RNV.NextValue.first < NDT)
209 NDT = RNV.NextValue.first;
225 template<
typename DataType=
double,
typename TV=openflu
id::core::DoubleValue>
230 typedef std::map<openfluid::core::UnitID_t,ReaderNextValue<DataType>*>
UnitIDReader_t;
241 DistributionTables::SourceIDFile_t::const_iterator itb = DistriTables.
SourcesTable.begin();
242 DistributionTables::SourceIDFile_t::const_iterator ite = DistriTables.
SourcesTable.end();
244 for (DistributionTables::SourceIDFile_t::const_iterator it = itb; it != ite; ++it)
248 this->m_ReadersNextValues.push_back(RNV);
250 DistributionTables::UnitIDSourceID_t::const_iterator itub = DistriTables.
UnitsTable.begin();
251 DistributionTables::UnitIDSourceID_t::const_iterator itue = DistriTables.
UnitsTable.end();
253 for (DistributionTables::UnitIDSourceID_t::const_iterator itu = itub; itu != itue; ++itu)
255 if ((*itu).second == (*it).first)
257 m_UnitIDReaders[(*itu).first] = &this->m_ReadersNextValues.back();
269 typename UnitIDReader_t::iterator it = m_UnitIDReaders.find(UnitID);
270 if (it != m_UnitIDReaders.end() && (*it).second->isAvailable && (*it).second->NextValue.first == DT)
278 Value = CurrentValueSV;
283 return CurrentValueSV.
convert(Value);
291 for (
auto& IDReader : m_UnitIDReaders)
293 std::cout << IDReader.first <<
" -> " << IDReader.second->Reader->getFileName() << std::endl;
325 inline static const std::string s_MissingValueString =
"NA";
331 const std::string& DateFormat =
"%Y%m%dT%H%M%S",
332 const std::string& ColSeparators =
";");
348 return m_ColBySelectionTriplets;
Definition: FrameworkException.hpp:51
Class for management of date and time information.
Definition: DateTime.hpp:88
void addSeconds(const RawTime_t &Seconds)
Definition: DoubleValue.hpp:81
Definition: StringValue.hpp:83
bool convert(Value &Val) const override
@ STRING
Definition: Value.hpp:66
#define OPENFLUID_API
Definition: dllexport.hpp:86
unsigned int UnitID_t
Definition: TypeDefs.hpp:70
std::string VariableName_t
Definition: TypeDefs.hpp:131
std::string UnitsClass_t
Definition: TypeDefs.hpp:98
Definition: ApplicationException.hpp:47