61 std::vector<std::string> *error_list =
nullptr);
68 std::vector<std::string> *error_list =
nullptr);
75 std::vector<std::string> *error_list =
nullptr);
85 bool hasParam(std::string name);
91 std::size_t getAllParamNames(std::vector<std::string> &name);
98 std::size_t getAllObjectKeys(std::vector<std::string> &name);
103 void addParam(std::string name, std::string value);
121 bool getParam(std::string name, T &value)
const;
131 std::size_t getAllParams(std::string name, std::vector<T> &value)
const;
146 bool getObjectByKey(std::string key, std::shared_ptr<T> &ptr)
const;
159 bool getObjectByDef(std::string def, std::shared_ptr<T> &ptr)
const;
172 bool getObject(std::shared_ptr<T> &ptr)
const;
178 void addObject(std::shared_ptr<T> ptr, std::string key, std::string def);
190 std::size_t getAllObjects(std::vector<std::shared_ptr<T>> &value)
const;
203 std::size_t getAllObjectsByKey(std::string key, std::vector<std::shared_ptr<T>> &ptr)
const;
207 typedef std::map<std::string, std::shared_ptr<Object>> def_list;
209 void load(tinyxml2::XMLNode *node,
210 std::vector<std::string> *error_list =
nullptr);
213 parameter_t(std::string value =
"")
214 : value(value), checked(false) {}
219 typedef std::vector<std::pair<std::string, parameter_t>> parameter_list;
220 typedef std::map<std::string, std::shared_ptr<parameter_t>> overrides_list;
222 std::shared_ptr<Object> object;
226 typedef std::vector<child_t> child_object_list;
228 child_object_list child_objects;
229 parameter_list parameters;
231 std::shared_ptr<def_list> def_objects;
232 overrides_list parameter_overrides;
233 bool warn_unused_overrides;
235 bool parse_if(tinyxml2::XMLElement *element,
236 std::vector<std::string> *error_list);
237 void parse_param(tinyxml2::XMLElement *element,
238 std::vector<std::string> *error_list);
240 overrides_list propagateOverrides(
const overrides_list &,
241 std::vector<std::string>);
247 Configuration(tinyxml2::XMLNode *node,
248 std::shared_ptr<def_list> defs,
249 overrides_list overrides,
250 std::vector<std::string> *error_list =
nullptr);
270std::size_t Configuration::getAllObjectsByKey(
271 std::string key, std::vector<std::shared_ptr<T>> &value)
const {
275 auto original_size = value.size();
277 for (
auto &child : _this->child_objects) {
279 if (child.key != key)
continue;
281 std::shared_ptr<T> node = std::dynamic_pointer_cast<T>(child.object);
282 if (node) value.push_back(node);
285 return value.size() - original_size;
457inline std::size_t Configuration::getAllParams(std::string name, std::vector<T> &value)
const {
458 std::vector<std::string> values;
459 getAllParams(name, values);
461 std::size_t original_size = value.size();
462 for (
auto string_value : values)
465 std::stringstream string_value_stream(string_value);
468 string_value_stream >> _value;
470 if (!string_value_stream) {
471 GM_WRN(
"Configuration",
"While getting '" << name <<
"', could not parse '" << string_value <<
"' as " <<
typeid(T).name() <<
"!");
475 value.push_back(_value);
477 catch (std::exception){
478 GM_WRN(
"Configuration",
"While getting '" << name <<
"', could not parse '" << string_value <<
"' as " <<
typeid(T).name() <<
"!");
480 return value.size() - original_size;