7 #include <unordered_set>
40 XMLNode(
const std::string& _filename,
const std::string& _desiredNode);
48 XMLNode(
const std::string& _filename, std::shared_ptr<tinyxml2::XMLDocument> doc,
const std::string& _desiredNode);
56 XMLNode(tinyxml2::XMLNode* _node,
const std::string& _filename,
57 std::shared_ptr<tinyxml2::XMLDocument> _doc);
61 void FindNode(
const std::string& _desiredNode);
68 typedef std::vector<XMLNode>::iterator
iterator;
81 const std::string&
Name()
const;
114 template <
typename T>
115 T
Read(
const std::string& _name,
const bool _req,
const T& _default,
116 const T& _min,
const T& _max,
const std::string& _desc);
128 bool Read(
const std::string& _name,
const bool _req,
const bool _default,
129 const std::string& _desc);
136 std::string
Read(
const std::string& _name,
const bool _req,
137 const char* _default,
const std::string& _desc);
149 std::string
Read(
const std::string& _name,
151 const std::string& _default,
152 const std::string& _desc);
169 void WarnAll(
const bool _warningsAsErrors =
false);
176 std::string
Where()
const;
194 std::string
Where(
const std::string& _f,
const int _l,
const int _c,
195 const bool _name =
true)
const;
201 void BuildChildVector();
207 std::string AttrWrongType(
const std::string& _name,
const std::string& _desc)
214 std::string AttrMissing(
const std::string& _name,
const std::string& _desc)
225 template <
typename T>
226 std::string AttrInvalidBounds(
const std::string& _name,
227 const std::string& _desc,
const T& _min,
const T& _max,
const T& _val)
231 void ComputeAccessed();
237 void WarnAllRec(
bool& _anyWarnings);
240 void WarnUnknownNode();
243 bool WarnUnrequestedAttributes();
249 tinyxml2::XMLNode* m_node{
nullptr};
250 bool m_childBuilt{
false};
251 bool m_accessed{
false};
252 std::vector<XMLNode> m_children;
253 std::unordered_set<std::string> m_reqAttributes;
254 std::string m_filename;
257 std::shared_ptr<tinyxml2::XMLDocument> m_doc;
266 Read(
const std::string& _name,
const bool _req,
const size_t& _default,
267 const size_t& _min,
const size_t& _max,
const std::string& _desc);
271 template <
typename T>
274 Read(
const std::string& _name,
const bool _req,
const T& _default,
const T& _min,
275 const T& _max,
const std::string& _desc) {
277 m_reqAttributes.insert(_name);
280 tinyxml2::XMLError qr = m_node->ToElement()->QueryAttribute(_name.c_str(), &toReturn);
282 case tinyxml2::XML_WRONG_ATTRIBUTE_TYPE:
285 case tinyxml2::XML_NO_ATTRIBUTE:
293 case tinyxml2::XML_SUCCESS:
295 if(toReturn < _min || toReturn > _max)
297 AttrInvalidBounds(_name, _desc, _min, _max, toReturn));
308 template <
typename T>
311 AttrInvalidBounds(
const std::string& _name,
const std::string& _desc,
312 const T& _min,
const T& _max,
const T& _val)
const {
313 std::ostringstream oss;
314 oss <<
"Invalid value for attribute '" << _name <<
"'."
315 <<
"\n\tAttribute description: " << _desc <<
"."
316 <<
"\n\tValid range: [" << _min <<
", " << _max <<
"]"
317 <<
"\n\tValue specified: " << _val;
#define WHERE
Macro for retrieving info about file, function, and line number.
Definition: RuntimeUtils.h:32
void Ignore()
Ignore unrequested node/attribute errors for this node.
Definition: XMLNode.cpp:218
std::vector< XMLNode >::iterator iterator
Definition: XMLNode.h:68
std::string GetPath() const
Get the directory path containing the XML file.
Definition: XMLNode.cpp:106
const std::string & Filename() const
Get the XML filename.
Definition: XMLNode.cpp:99
const std::string & Name() const
Get the XMLNode name.
Definition: XMLNode.cpp:90
XMLNode(const std::string &_filename, const std::string &_desiredNode)
Definition: XMLNode.cpp:10
void WarnAll(const bool _warningsAsErrors=false)
Definition: XMLNode.cpp:232
iterator end()
Get an iterator to this node's last child.
Definition: XMLNode.cpp:83
std::string Where() const
Definition: XMLNode.cpp:243
iterator begin()
Get an iterator to this node's first child.
Definition: XMLNode.cpp:75
std::string GetText() const
Get the text between opening and closing tags.
Definition: XMLNode.cpp:116
T Read(const std::string &_name, const bool _req, const T &_default, const T &_min, const T &_max, const std::string &_desc)
Definition: XMLNode.h:274
Definition: PMPLExceptions.h:38
Definition: PMPLExceptions.h:62