23 : mObjectSet(pObjectSet)
45 std::queue<boost::shared_ptr<TreeNode> > nodesToVisit;
46 nodesToVisit.push(
f());
48 while(nodesToVisit.size() > 0)
53 if (!(node->mIsReference))
57 if(node->mObjectSet->objects[0]->type.compare(pType) == 0)
65 nodesToVisit.push(child);
69 nodesToVisit.push(node->mParent);
76 newRoot->mParent->reassignNewParentNode(newRoot);
80 std::vector<boost::shared_ptr<TreeNode>> reversedReferences = newRoot->updateReferences(newRoot);
102 pChild->mParent =
f();
108 unsigned int result = 1;
111 result += child->getNumberOfNodes();
118 return shared_from_this();
124 for(
unsigned int i = 0; i < pSpace; i++)
129 unsigned int referencing =
mID;
131 std::cout <<
mObjectSet->objects[0]->type <<
"(" <<
mChildren.size() <<
"/" <<
mObjectSet->objects.size() <<
")" <<
" ID " <<
mID <<
" -> " << referencing << std::endl;
136 node->printTreeToConsole(pSpace + 1);
142 mParent->reassignNewParentNode(
f());
146 pParent->mChildren.push_back(
f());
149 for(
unsigned int i = 0; i <
mChildren.size(); i++)
159 std::vector<boost::shared_ptr<TreeNode>> reversedReferences =
updateReferences(
f());
184 std::vector<boost::shared_ptr<TreeNode>> reversedReferences;
185 std::vector<boost::shared_ptr<TreeNode>> toDelete;
186 if (
mIsReference)
return std::vector<boost::shared_ptr<TreeNode>>();
189 if (child->mIsReference)
191 if (child->mReferenceTo == pRoot)
195 reversedReference->mIsReference =
true;
197 reversedReference->mChildren = std::vector<boost::shared_ptr<TreeNode>>();
198 reversedReferences.push_back(reversedReference);
199 toDelete.push_back(child);
204 std::vector<boost::shared_ptr<TreeNode>> childReversedReferences = child->updateReferences(pRoot);
205 for (
boost::shared_ptr<TreeNode> childReversedReference: childReversedReferences) reversedReferences.push_back(childReversedReference);
210 for(
unsigned int i = 0; i < mChildren.size(); i++)
212 if(mChildren[i] == childToDelete)
214 mChildren.erase(mChildren.begin() + i);
219 return reversedReferences;
boost::shared_ptr< TreeNode > setNewRootNodeByType(std::string pType)
boost::shared_ptr< ISM::ObjectSet > getObjectSet()
std::vector< boost::shared_ptr< TreeNode > > getChildren()
boost::shared_ptr< TreeNode > f()
TreeNode(boost::shared_ptr< ISM::ObjectSet > pObjectSet)
boost::shared_ptr< ISM::ObjectSet > mObjectSet
void printTreeToConsole(unsigned int space)
unsigned int getNumberOfNodes()
std::vector< boost::shared_ptr< TreeNode > > updateReferences(boost::shared_ptr< TreeNode > pRoot)
void updateIDs(unsigned int &pID, bool pUpdateReferencIDs)
boost::shared_ptr< TreeNode > mReferenceTo
void addChild(boost::shared_ptr< TreeNode > pChild)
std::vector< boost::shared_ptr< TreeNode > > mChildren
void reassignNewParentNode(boost::shared_ptr< TreeNode > pParent)
boost::shared_ptr< TreeNode > mParent