49 const std::size_t size = 0,
50 const std::size_t min = 0,
51 const std::size_t max = 0)
const
58 CPPUT_ASSERT(size == min,
"Actual number of entries is not the same as expected.");
61 CPPUT_ASSERT(min <= size,
"Actual number of entries is lower than expected.");
62 CPPUT_ASSERT(max >= size,
"Actual number of entries is larger than expected.");
65 CPPUT_ASSERT(min <= size,
"Actual number of entries is lower than expected.");
85 virtual void endRoot(
const std::string &name)
95 virtual bool startRoot(
const std::vector<std::string> &subtree)
100 if (0 == subtree.size())
107 for (std::size_t i = 1; i < subtree.size() and result; ++i)
117 virtual void endRoot(
const std::vector<std::string> &subtree)
120 for (std::size_t i = 1; i < subtree.size(); ++i)
125 if (0 == subtree.size())
144 for (std::size_t i = 0; i < subtree.size(); ++i)
150 result += subtree[i];
157 template <
class t_Entry>
162 ariles2::apply<ariles2::Count>(entry));
167 const std::size_t = 0,
168 const std::size_t = 0)
198 const std::size_t = 0,
199 const std::size_t = 0)
205 CPPUT_THROW(
"startIteratedMapElement() is not supported.");
231 param.allow_missing_entries_,
"Pointer entry does not include 'is_null' subentry.");
276 if (param.flat_matrices_)
278 if (dynamic or param.explicit_matrix_size_)
294 CPPUT_ASSERT(cols * rows == vec_len,
"Inconsistent matrix size.");
313 if (not param.flat_matrices_ and 0 != row_index)
318 CPPUT_ASSERT(cols == vec_len,
"Inconsistent matrix row length.");
331 if (not param.flat_matrices_)
339 if (param.flat_matrices_)
356 template <
class t_Scalar>
373 readElement<float>(entry);
377 readElement<double>(entry);
381 #define ARILES2_BASIC_TYPE(type) virtual void readElement(type &entry) = 0;
385 #undef ARILES2_BASIC_TYPE
388 template <
class t_Entry,
class t_Subtree>
401 catch (
const std::exception &e)
411 param.allow_missing_entries_,
412 "Configuration file does not contain entry '",
419 template <
class t_Entry>
422 const std::string &name,
424 const bool override_missing_entries_locally =
false)
436 catch (
const std::exception &e)
438 CPPUT_THROW(
"Failed to parse entry <", name,
"> || ", e.what());
447 not override_missing_entries_locally and param.allow_missing_entries_,
448 "Configuration file does not contain entry '",
455 template <
typename t_Element>
466 template <
typename t_Element>
477 template <
typename t_Element>
521 std::string file_name_default = file_name;
532 #define ARILES2_NAMED_ENTRY_read(v, entry, name) visitor.visitMapEntry(entry, #name, parameters);
533 #define ARILES2_PARENT_read(v, entry)
534 #define ARILES2_VISIT_read \
535 template <class t_Visitor> \
537 t_Visitor &visitor, \
538 const typename t_Visitor::Parameters ¶meters, \
539 ARILES2_IS_BASE_ENABLER(ariles2::read::Visitor, t_Visitor)) \
541 CPPUT_TRACE_FUNCTION; \
542 CPPUT_UNUSED_ARG(visitor); \
543 CPPUT_UNUSED_ARG(parameters); \
544 arilesVisitParents(visitor, parameters); \
545 ARILES2_ENTRIES(read) \
548 #define ARILES2_METHODS_read ARILES2_METHODS(read, ARILES2_EMPTY_MACRO, ARILES2_EMPTY_MACRO)
549 #define ARILES2_BASE_METHODS_read ARILES2_BASE_METHODS(read)
std::ifstream config_ifs_
std::istream * input_stream_
FileVisitorImplementation(const std::string &file_name)
void openFile(const std::string &file_name)
open configuration file
FileVisitorImplementation()=default
FileVisitorImplementation(std::istream &input_stream)
virtual void startMatrixRow(const std::size_t row_index, const std::size_t cols, const Parameters ¶m)
virtual bool startRoot(const std::vector< std::string > &subtree)
void visitVectorElement(t_Element &element, const Parameters &)
virtual void endIteratedMapElement()
void checkSize(const SizeLimitEnforcementType limit_type, const std::size_t size=0, const std::size_t min=0, const std::size_t max=0) const
const std::string & convertSubtreeToString(const std::string &subtree) const
virtual void endMatrix(const bool dynamic, const Parameters ¶m)
virtual void endRoot(const std::string &name)
std::string convertSubtreeToString(const std::vector< std::string > &subtree) const
virtual bool startRoot(const std::string &name)
virtual void startVectorElement()
ARILES2_BASIC_TYPES_LIST void visit(t_Entry &entry, const t_Subtree &subtree, const Parameters ¶m)
bool startPointer(const Parameters ¶m)
virtual void endArrayElement()=0
virtual void startArrayElement()
void visitMatrixElement(t_Element &element, const Parameters &)
virtual void endArray()=0
virtual void endMatrixRow(const Parameters ¶m)
virtual void endIteratedMap()
void visitArrayElement(t_Element &element, const Parameters ¶m)
bool visitMapEntry(t_Entry &entry, const std::string &name, const Parameters ¶m, const bool override_missing_entries_locally=false)
virtual void readElement(std::complex< float > &entry)
virtual void endMatrixElement()
virtual void endMapEntry()=0
endMapEntry from the current entry to its parent.
void readElement(std::complex< t_Scalar > &entry)
virtual void endRoot(const std::vector< std::string > &subtree)
virtual std::size_t startVector()
virtual bool startIteratedMap(const SizeLimitEnforcementType=SIZE_LIMIT_NONE, const std::size_t=0, const std::size_t=0)
virtual bool startMapEntry(const std::string &child_name)
startMapEntry to the entry with the given name
virtual void endVectorElement()
virtual std::size_t startArray()=0
void startMap(t_Entry &entry, const Parameters ¶meters)
void endPointer(const bool is_null)
virtual void startMatrixElement()
virtual bool startIteratedMapElement(std::string &)
virtual void startMap(const SizeLimitEnforcementType=SIZE_LIMIT_NONE, const std::size_t=0, const std::size_t=0)
virtual void startMatrix(std::size_t &cols, std::size_t &rows, const bool dynamic, const Parameters ¶m)
virtual void readElement(std::complex< double > &entry)
#define CPPUT_PERSISTENT_ASSERT(condition,...)
#define CPPUT_ASSERT(condition,...)
#define ARILES2_BASIC_TYPES_LIST
#define CPPUT_UNUSED_ARG(parameter)
void apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶meters, ARILES2_IS_BASE_ENABLER(ariles2::read::Base, t_Entry))
serialization::Parameters Parameters
#define CPPUT_TRACE_FUNCTION
#define CPPUT_TRACE_TYPE(type)
#define CPPUT_TRACE_VALUE(value)