17 #ifndef ARILES_API_VERSION 18 # error "ARILES_API_VERSION is not defined, probably unhandled includion order, add explicit definition of ARILES_API_VERSION." 21 #if 1 == ARILES_API_VERSION 36 SIZE_LIMIT_UNDEFINED = 0,
45 template <
int t_size_limit_type>
48 const std::size_t & = 0,
49 const std::size_t & = 0)
const 51 ARILES_THROW(
"Internal logic error.");
54 template <
int t_size_limit_type>
57 static const int value =
58 SIZE_LIMIT_EQUAL == t_size_limit_type || SIZE_LIMIT_RANGE == t_size_limit_type ?
64 virtual std::size_t getMapSize(
const bool expect_empty) = 0;
81 static void openFile(std::ifstream &config_ifs,
const std::string &file_name)
83 config_ifs.open(file_name.c_str());
84 if (!config_ifs.good())
86 std::string file_name_default = file_name;
87 config_ifs.open(file_name_default.c_str());
89 ARILES_PERSISTENT_ASSERT(
90 true == config_ifs.good(),
91 std::string(
"Could not open configuration file: ") + file_name.c_str());
102 virtual bool descend(
const std::string &child_name)
105 ARILES_UNUSED_ARG(child_name)
113 virtual void ascend() = 0;
116 template <
int t_size_limit_type>
117 std::size_t
startMap(
const std::size_t &min = 0,
const std::size_t &max = 0)
119 return (startMapImpl(
133 virtual std::size_t startArray() = 0;
134 virtual void shiftArray() = 0;
135 virtual void endArray() = 0;
141 if (
false == name.empty())
143 return (descend(name));
151 if (
false == name.empty())
158 #define ARILES_BASIC_TYPE(type) virtual void readElement(type &entry) = 0; 162 #undef ARILES_BASIC_TYPE 165 template <
class t_Entry>
174 #if 1 == ARILES_API_VERSION 175 ariles::apply<ariles::defaults::Visitor>(entry);
177 if (this->startRoot(name))
183 catch (
const std::exception &e)
185 ARILES_THROW(std::string(
"Failed to parse entry <") + name +
"> || " + e.what());
192 ARILES_PERSISTENT_ASSERT(
193 true == param.isSet(Parameters::ALLOW_MISSING_ENTRIES),
194 std::string(
"Configuration file does not contain entry '") + name +
"'.");
199 template <
class t_Entry>
207 if (this->descend(name))
209 param.unset(Parameters::DISABLE_ALLOW_MISSING_ENTRIES);
215 catch (
const std::exception &e)
217 ARILES_THROW(std::string(
"Failed to parse entry <") + name +
"> || " + e.what());
225 ARILES_PERSISTENT_ASSERT(
226 false == param.isSet(Parameters::DISABLE_ALLOW_MISSING_ENTRIES)
227 and
true == param.isSet(Parameters::ALLOW_MISSING_ENTRIES),
228 std::string(
"Configuration file does not contain entry '") + name +
"'.");
236 inline std::size_t Visitor::checkSize<Visitor::SIZE_LIMIT_NONE>(
237 const std::size_t &size,
238 const std::size_t & ,
239 const std::size_t & )
const 246 inline std::size_t Visitor::checkSize<Visitor::SIZE_LIMIT_EQUAL>(
247 const std::size_t &size,
248 const std::size_t &expected_size,
249 const std::size_t & )
const 251 ARILES_ASSERT(expected_size == size,
"Actual number of entries is not the same as expected.");
257 inline std::size_t Visitor::checkSize<Visitor::SIZE_LIMIT_RANGE>(
258 const std::size_t &size,
259 const std::size_t &min,
260 const std::size_t &max)
const 262 ARILES_ASSERT(min <= size,
"Actual number of entries is lower than expected.");
263 ARILES_ASSERT(max >= size,
"Actual number of entries is larger than expected.");
269 inline std::size_t Visitor::checkSize<Visitor::SIZE_LIMIT_MIN>(
270 const std::size_t &size,
271 const std::size_t &min,
272 const std::size_t & )
const 274 ARILES_ASSERT(min <= size,
"Actual number of entries is lower than expected.");
284 #ifndef ARILES_METHODS_read 285 # define ARILES_METHODS_read ARILES_METHODS(read, ARILES_EMPTY_MACRO, ARILES_EMPTY_MACRO) virtual void endRoot(const std::string &name)
#define ARILES_TRACE_FUNCTION
std::size_t checkSize(const std::size_t &, const std::size_t &=0, const std::size_t &=0) const
static void openFile(std::ifstream &config_ifs, const std::string &file_name)
open configuration file
std::size_t startMap(const std::size_t &min=0, const std::size_t &max=0)
virtual std::size_t startMapImpl(const std::size_t size)
ARILES_BASIC_TYPES_LIST void start(t_Entry &entry, const std::string &name, const Parameters ¶meters)
virtual bool getMapEntryNames(std::vector< std::string > &)
#define ARILES_BASIC_TYPES_LIST
#define ARILES_TRACE_TYPE(entry)
virtual bool descend(const std::string &child_name)
Descend to the entry with the given name.
#define ARILES_VISIBILITY_ATTRIBUTE
void ARILES_VISIBILITY_ATTRIBUTE apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶meters, ARILES_IS_BASE_ENABLER(ariles::read::Base, t_Entry))
#define ARILES_TRACE_ENTRY(entry_name)
bool operator()(t_Entry &entry, const std::string &name, const Parameters ¶meters)
virtual bool startRoot(const std::string &name)