本文整理汇总了C++中RectangleTree::InsertNode方法的典型用法代码示例。如果您正苦于以下问题:C++ RectangleTree::InsertNode方法的具体用法?C++ RectangleTree::InsertNode怎么用?C++ RectangleTree::InsertNode使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类RectangleTree
的用法示例。
在下文中一共展示了RectangleTree::InsertNode方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
//.........这里部分代码省略.........
if (parent != NULL)
{
// The normal case. We need to be careful with the root.
for (size_t j = 0; j < parent->NumChildren(); j++)
{
if (parent->children[j] == this)
{
// Decrement numChildren.
if (!auxiliaryInfo.HandleNodeRemoval(parent,j))
{
parent->children[j] = parent->children[--parent->NumChildren()];
}
size_t level = TreeDepth();
// We find the root and shrink bounds at the same time.
bool stillShrinking = true;
RectangleTree* root = parent;
while (root->Parent() != NULL)
{
if (stillShrinking)
stillShrinking = root->ShrinkBoundForBound(bound);
root = root->Parent();
}
if (stillShrinking)
stillShrinking = root->ShrinkBoundForBound(bound);
root = parent;
while (root != NULL)
{
root->numDescendants -= numDescendants;
root = root->Parent();
}
stillShrinking = true;
root = parent;
while (root->Parent() != NULL)
{
if (stillShrinking)
stillShrinking = root->AuxiliaryInfo().UpdateAuxiliaryInfo(root);
root = root->Parent();
}
if (stillShrinking)
stillShrinking = root->AuxiliaryInfo().UpdateAuxiliaryInfo(root);
// Reinsert the nodes at the root node.
for (size_t i = 0; i < numChildren; i++)
root->InsertNode(children[i], level, relevels);
// This will check the minFill of the point.
parent->CondenseTree(point, relevels, usePoint);
// Now it should be safe to delete this node.
SoftDelete();
return;
}
}
}
else if (numChildren == 1)
{
// If there are multiple children, we can't do anything to the root.
RectangleTree* child = children[0];
// Required for the X tree.
if (child->NumChildren() > maxNumChildren)
{
maxNumChildren = child->MaxNumChildren();
children.resize(maxNumChildren+1);
}
for (size_t i = 0; i < child->NumChildren(); i++) {
children[i] = child->children[i];
children[i]->Parent() = this;
}
numChildren = child->NumChildren();
for (size_t i = 0; i < child->Count(); i++)
{
// In case the tree has a height of two.
points[i] = child->Point(i);
}
auxiliaryInfo = child->AuxiliaryInfo();
count = child->Count();
child->SoftDelete();
return;
}
}
// If we didn't delete it, shrink the bound if we need to.
if (usePoint &&
(ShrinkBoundForPoint(point) || auxiliaryInfo.UpdateAuxiliaryInfo(this)) &&
parent != NULL)
parent->CondenseTree(point, relevels, usePoint);
else if (!usePoint &&
(ShrinkBoundForBound(bound) || auxiliaryInfo.UpdateAuxiliaryInfo(this)) &&
parent != NULL)
parent->CondenseTree(point, relevels, usePoint);
}