From d178ccb9a36fd6021a6129fff1a2b3cb5d1629a5 Mon Sep 17 00:00:00 2001 From: Dominik Meyer Date: Wed, 8 Nov 2023 15:30:20 +0100 Subject: [PATCH] FIX: some fixes --- src/Tree/tree.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) 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