diff --git a/Utilities/rXml.cpp b/Utilities/rXml.cpp index aab1a84aa0..650cdf50fa 100644 --- a/Utilities/rXml.cpp +++ b/Utilities/rXml.cpp @@ -1,52 +1,24 @@ #include "stdafx.h" #include "Utilities/rXml.h" -rXmlNode::rXmlNode() +rXmlNode::rXmlNode() : handle() { - ownPtr = true; - handle = new pugi::xml_node; } -rXmlNode::rXmlNode(pugi::xml_node *ptr) +rXmlNode::rXmlNode(const pugi::xml_node &node) { - ownPtr = false; - handle = ptr; -} - -rXmlNode::~rXmlNode() -{ - if (ownPtr) - { - delete handle; - } -} - -rXmlNode::rXmlNode(const rXmlNode& other) -{ - ownPtr = true; - handle = new pugi::xml_node(*other.handle); -} - -rXmlNode &rXmlNode::operator=(const rXmlNode& other) -{ - if (ownPtr) - { - delete handle; - } - handle = new pugi::xml_node(*other.handle); - ownPtr = true; - return *this; + handle = node; } std::shared_ptr rXmlNode::GetChildren() { // it.begin() returns node_iterator*, *it.begin() return node*. - pugi::xml_object_range it = handle->children(); + pugi::xml_object_range it = handle.children(); pugi::xml_node begin = *it.begin(); if (begin) { - return std::make_shared(&begin); + return std::make_shared(begin); } else { @@ -56,10 +28,10 @@ std::shared_ptr rXmlNode::GetChildren() std::shared_ptr rXmlNode::GetNext() { - pugi::xml_node result = handle->next_sibling(); + pugi::xml_node result = handle.next_sibling(); if (result) { - return std::make_shared(&result); + return std::make_shared(result); } else { @@ -69,48 +41,32 @@ std::shared_ptr rXmlNode::GetNext() std::string rXmlNode::GetName() { - return handle->name(); + return handle.name(); } std::string rXmlNode::GetAttribute(const std::string &name) { auto pred = [&name](pugi::xml_attribute attr) { return (name == attr.name()); }; - return handle->find_attribute(pred).value(); + return handle.find_attribute(pred).value(); } std::string rXmlNode::GetNodeContent() { - return handle->text().get(); + return handle.text().get(); } -void *rXmlNode::AsVoidPtr() +rXmlDocument::rXmlDocument() : handle() { - return static_cast(handle); -} - -rXmlDocument::rXmlDocument() -{ - handle = new pugi::xml_document; -} - -rXmlDocument::~rXmlDocument() -{ - delete handle; } void rXmlDocument::Load(const std::string & path) { // TODO: Unsure of use of c_str. - handle->load_string(path.c_str()); + handle.load_file(path.c_str()); } std::shared_ptr rXmlDocument::GetRoot() { - pugi::xml_node root = handle->root(); - return std::make_shared(&root); + return std::make_shared(handle.root()); } -void *rXmlDocument::AsVoidPtr() -{ - return static_cast(handle); -} diff --git a/Utilities/rXml.h b/Utilities/rXml.h index 3c369a09cd..c2abcfef0e 100644 --- a/Utilities/rXml.h +++ b/Utilities/rXml.h @@ -9,19 +9,14 @@ struct rXmlNode { rXmlNode(); - rXmlNode(pugi::xml_node *); - rXmlNode(const rXmlNode& other); - rXmlNode &operator=(const rXmlNode& other); - ~rXmlNode(); + rXmlNode(const pugi::xml_node &); std::shared_ptr GetChildren(); std::shared_ptr GetNext(); std::string GetName(); std::string GetAttribute( const std::string &name); std::string GetNodeContent(); - void *AsVoidPtr(); - pugi::xml_node *handle; - bool ownPtr; + pugi::xml_node handle; }; struct rXmlDocument @@ -29,10 +24,8 @@ struct rXmlDocument rXmlDocument(); rXmlDocument(const rXmlDocument& other) = delete; rXmlDocument &operator=(const rXmlDocument& other) = delete; - ~rXmlDocument(); void Load(const std::string & path); std::shared_ptr GetRoot(); - void *AsVoidPtr(); - pugi::xml_document *handle; -}; \ No newline at end of file + pugi::xml_document handle; +};