diff --git a/src/Tree/tree.cpp b/src/Tree/tree.cpp
index ffbb9cc..0214647 100644
--- a/src/Tree/tree.cpp
+++ b/src/Tree/tree.cpp
@@ -18,6 +18,7 @@ along with this program. If not, see .
#include
#include
#include
+#include
std::list>::const_iterator Tree::BaseNode::getChildIterator(const std::shared_ptr child) const
{
@@ -100,14 +101,22 @@ void Tree::BaseNode::removeChild(const std::shared_ptr &c)
{
std::list>::iterator it;
it=std::find(children.begin(), children.end(),c);
- children.erase(it);
+ if (it!=children.end())
+ {
+ it=children.erase(it);
+ }
}
void Tree::BaseNode::deleteChild(const std::shared_ptr &c)
{
std::list>::iterator it;
it=std::find(children.begin(), children.end(),c);
- children.erase(it);
+
+ if (it!=children.end())
+ {
+ children.erase(it);
+ }
+ it = children.erase(it);
c->setParent(nullptr);
}
@@ -129,3 +138,14 @@ void Tree::BaseNode::deleteChildren()
}
}
+
+void Tree::BaseNode::replace(std::shared_ptr n)
+{
+
+ n->setParent(getParent());
+ n->addChildren(getChildrenBegin(), getChildrenEnd());
+
+ auto it=getParent()->getChildIterator(shared_from_this());
+ getParent()->insertChild(n, it);
+ getParent()->removeChild(shared_from_this());
+}
\ No newline at end of file