Added treeTraversal::CloneForest
parent
fb3dc0778d
commit
b814e146ef
|
@ -120,6 +120,18 @@ namespace gtsam {
|
||||||
DepthFirstForest<FOREST, DATA, VISITOR_PRE, void(&)(const typename FOREST::Node&, const DATA&)>(
|
DepthFirstForest<FOREST, DATA, VISITOR_PRE, void(&)(const typename FOREST::Node&, const DATA&)>(
|
||||||
forest, rootData, visitorPre, no_op<typename FOREST::Node, DATA>);
|
forest, rootData, visitorPre, no_op<typename FOREST::Node, DATA>);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Traversal function for CloneForest */
|
||||||
|
namespace {
|
||||||
|
template<typename NODE>
|
||||||
|
boost::shared_ptr<NODE> CloneForestVisitorPre(const NODE& node, const boost::shared_ptr<NODE>& parentPointer)
|
||||||
|
{
|
||||||
|
// Clone the current node and add it to its cloned parent
|
||||||
|
boost::shared_ptr<NODE> clone = boost::make_shared<NODE>(node);
|
||||||
|
parentPointer->children.push_back(clone);
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Clone a tree, copy-constructing new nodes (calling boost::make_shared) and setting up child
|
/** Clone a tree, copy-constructing new nodes (calling boost::make_shared) and setting up child
|
||||||
* pointers for a clone of the original tree.
|
* pointers for a clone of the original tree.
|
||||||
|
@ -129,7 +141,10 @@ namespace gtsam {
|
||||||
template<class FOREST>
|
template<class FOREST>
|
||||||
std::vector<boost::shared_ptr<typename FOREST::Node> > CloneForest(const FOREST& forest)
|
std::vector<boost::shared_ptr<typename FOREST::Node> > CloneForest(const FOREST& forest)
|
||||||
{
|
{
|
||||||
|
typedef typename FOREST::Node Node;
|
||||||
|
boost::shared_ptr<Node> rootContainer = boost::make_shared<Node>();
|
||||||
|
DepthFirstForest(forest, rootContainer, CloneForestVisitorPre<Node>);
|
||||||
|
return std::vector<boost::shared_ptr<Node> >(rootContainer->children.begin(), rootContainer->children.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue