Use unique_ptr to store the XmlNode’s children

Also fix some constness things
This commit is contained in:
Florent Le Coz
2015-09-01 14:47:57 +02:00
parent 38564d77c7
commit f3b3d937ae
9 changed files with 69 additions and 71 deletions
+14 -22
View File
@@ -103,17 +103,8 @@ XmlNode::XmlNode(const std::string& name):
{
}
XmlNode::~XmlNode()
{
this->delete_all_children();
}
void XmlNode::delete_all_children()
{
for (auto& child: this->children)
{
delete child;
}
this->children.clear();
}
@@ -152,43 +143,44 @@ std::string XmlNode::get_tail() const
return this->tail;
}
XmlNode* XmlNode::get_child(const std::string& name, const std::string& xmlns) const
const XmlNode* XmlNode::get_child(const std::string& name, const std::string& xmlns) const
{
for (auto& child: this->children)
for (const auto& child: this->children)
{
if (child->name == name && child->get_tag("xmlns") == xmlns)
return child;
return child.get();
}
return nullptr;
}
std::vector<XmlNode*> XmlNode::get_children(const std::string& name, const std::string& xmlns) const
std::vector<const XmlNode*> XmlNode::get_children(const std::string& name, const std::string& xmlns) const
{
std::vector<XmlNode*> res;
for (auto& child: this->children)
std::vector<const XmlNode*> res;
for (const auto& child: this->children)
{
if (child->name == name && child->get_tag("xmlns") == xmlns)
res.push_back(child);
res.push_back(child.get());
}
return res;
}
XmlNode* XmlNode::add_child(XmlNode* child)
XmlNode* XmlNode::add_child(std::unique_ptr<XmlNode> child)
{
child->parent = this;
this->children.push_back(child);
return child;
auto ret = child.get();
this->children.push_back(std::move(child));
return ret;
}
XmlNode* XmlNode::add_child(XmlNode&& child)
{
XmlNode* new_node = new XmlNode(std::move(child));
return this->add_child(new_node);
auto new_node = std::make_unique<XmlNode>(std::move(child));
return this->add_child(std::move(new_node));
}
XmlNode* XmlNode::get_last_child() const
{
return this->children.back();
return this->children.back().get();
}
XmlNode* XmlNode::get_parent() const