Bladeren bron

Fixed XMLElement copy constructor and added assignment operator to handle the xpath_node assignment correctly.

Wei Tjong Yao 12 jaren geleden
bovenliggende
commit
e7c46428d5
2 gewijzigde bestanden met toevoegingen van 16 en 4 verwijderingen
  1. 14 4
      Engine/Resource/XMLElement.cpp
  2. 2 0
      Engine/Resource/XMLElement.h

+ 14 - 4
Engine/Resource/XMLElement.cpp

@@ -62,10 +62,10 @@ XMLElement::XMLElement(const XPathResultSet* resultSet, const pugi::xpath_node*
 
 XMLElement::XMLElement(const XMLElement& rhs) :
     file_(rhs.file_),
-    node_(rhs.file_ ? rhs.node_ : 0),
-    xpathResultSet_(rhs.file_ ? 0 : rhs.xpathResultSet_),
-    xpathNode_(rhs.file_ ? 0 : rhs.xpathResultSet_ ? rhs.xpathNode_ : new pugi::xpath_node(rhs.xpathNode_->attribute(), rhs.xpathNode_->node())),
-    xpathResultIndex_(rhs.file_ ? 0 : rhs.xpathResultIndex_)
+    node_(rhs.node_),
+    xpathResultSet_(rhs.xpathResultSet_),
+    xpathNode_(rhs.xpathResultSet_ ? rhs.xpathNode_ : (rhs.xpathNode_ ? new pugi::xpath_node(rhs.xpathNode_->attribute(), rhs.xpathNode_->node()) : 0)),
+    xpathResultIndex_(rhs.xpathResultIndex_)
 {
 }
 
@@ -79,6 +79,16 @@ XMLElement::~XMLElement()
     }
 }
 
+XMLElement& XMLElement::operator = (const XMLElement& rhs)
+{
+    file_ = rhs.file_;
+    node_ = rhs.node_;
+    xpathResultSet_ = rhs.xpathResultSet_;
+    xpathNode_ = rhs.xpathResultSet_ ? rhs.xpathNode_ : (rhs.xpathNode_ ? new pugi::xpath_node(rhs.xpathNode_->attribute(), rhs.xpathNode_->node()) : 0);
+    xpathResultIndex_ = rhs.xpathResultIndex_;
+    return *this;
+}
+
 XMLElement XMLElement::CreateChild(const String& name)
 {
     return CreateChild(name.CString());

+ 2 - 0
Engine/Resource/XMLElement.h

@@ -56,6 +56,8 @@ public:
     XMLElement(const XMLElement& rhs);
     /// Destruct.
     ~XMLElement();
+    /// Assignment operator.
+    XMLElement& operator = (const XMLElement& rhs);
 
     /// Create a child element.
     XMLElement CreateChild(const String& name);