ADD: added possibility to clone a tree node
This commit is contained in:
parent
64219f581d
commit
ee840c6134
@ -46,8 +46,21 @@ namespace Tree
|
|||||||
/// all child nodes of a node
|
/// all child nodes of a node
|
||||||
std::list<std::shared_ptr<Tree::BaseNode>> children;
|
std::list<std::shared_ptr<Tree::BaseNode>> children;
|
||||||
|
|
||||||
|
|
||||||
|
virtual std::shared_ptr<Tree::BaseNode> clone_() const = 0;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief clear the node of parent and children, but do not delete the children, required for cloning
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void clear() {
|
||||||
|
children.clear();
|
||||||
|
parent=nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief get the root of the tree
|
* @brief get the root of the tree
|
||||||
*
|
*
|
||||||
@ -63,6 +76,25 @@ namespace Tree
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief method to deep clone this node
|
||||||
|
*
|
||||||
|
* @return pointer to the cloned object
|
||||||
|
*/
|
||||||
|
std::shared_ptr<Tree::BaseNode> clone() const
|
||||||
|
{
|
||||||
|
std::shared_ptr<Tree::BaseNode> node = clone_();
|
||||||
|
node->clear();
|
||||||
|
|
||||||
|
std::list<std::shared_ptr<Tree::BaseNode>>::const_iterator it;
|
||||||
|
for(it = children.begin(); it != children.end(); ++it)
|
||||||
|
{
|
||||||
|
node->addChild((*it)->clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief print the tree starting with the current node to stdout
|
* @brief print the tree starting with the current node to stdout
|
||||||
*
|
*
|
||||||
@ -353,6 +385,9 @@ namespace Tree
|
|||||||
*/
|
*/
|
||||||
class TreeRoot : public Tree::BaseNode
|
class TreeRoot : public Tree::BaseNode
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
virtual std::shared_ptr<Tree::BaseNode> clone_() const {return std::make_shared<Tree::TreeRoot>();};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief returns the type of this node as a string
|
* @brief returns the type of this node as a string
|
||||||
@ -390,6 +425,8 @@ namespace Tree
|
|||||||
*/
|
*/
|
||||||
class TempNode : public Tree::BaseNode
|
class TempNode : public Tree::BaseNode
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
virtual std::shared_ptr<Tree::BaseNode> clone_() const {return std::make_shared<Tree::TempNode>();};
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief returns the type of this node as a string
|
* @brief returns the type of this node as a string
|
||||||
|
Loading…
Reference in New Issue
Block a user