本文整理汇总了C++中NodeImpl::isAncestor方法的典型用法代码示例。如果您正苦于以下问题:C++ NodeImpl::isAncestor方法的具体用法?C++ NodeImpl::isAncestor怎么用?C++ NodeImpl::isAncestor使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NodeImpl
的用法示例。
在下文中一共展示了NodeImpl::isAncestor方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: notifyBeforeNodeRemoval
void NodeIteratorImpl::notifyBeforeNodeRemoval(NodeImpl *willRemove)
{
// Iterator is not affected if the removed node is the reference node and is the root.
// or if removed node is not the reference node, or the ancestor of the reference node.
if (!willRemove || willRemove == root())
return;
bool willRemoveReferenceNode = willRemove == referenceNode();
bool willRemoveReferenceNodeAncestor = referenceNode() && referenceNode()->isAncestor(willRemove);
if (!willRemoveReferenceNode && !willRemoveReferenceNodeAncestor)
return;
if (pointerBeforeReferenceNode()) {
NodeImpl *node = findNextNode(willRemove);
if (node) {
// Move out from under the node being removed if the reference node is
// a descendant of the node being removed.
if (willRemoveReferenceNodeAncestor) {
while (node && node->isAncestor(willRemove))
node = findNextNode(node);
}
if (node)
setReferenceNode(node);
}
else {
node = findPreviousNode(willRemove);
if (node) {
// Move out from under the node being removed if the reference node is
// a descendant of the node being removed.
if (willRemoveReferenceNodeAncestor) {
while (node && node->isAncestor(willRemove))
node = findPreviousNode(node);
}
if (node) {
// Removing last node.
// Need to move the pointer after the node preceding the
// new reference node.
setReferenceNode(node);
setPointerBeforeReferenceNode(false);
}
}
}
}
else {
NodeImpl *node = findPreviousNode(willRemove);
if (node) {
// Move out from under the node being removed if the reference node is
// a descendant of the node being removed.
if (willRemoveReferenceNodeAncestor) {
while (node && node->isAncestor(willRemove))
node = findPreviousNode(node);
}
if (node)
setReferenceNode(node);
}
else {
node = findNextNode(willRemove);
// Move out from under the node being removed if the reference node is
// a descendant of the node being removed.
if (willRemoveReferenceNodeAncestor) {
while (node && node->isAncestor(willRemove))
node = findPreviousNode(node);
}
if (node)
setReferenceNode(node);
}
}
}