本文整理汇总了C++中ANode::link方法的典型用法代码示例。如果您正苦于以下问题:C++ ANode::link方法的具体用法?C++ ANode::link怎么用?C++ ANode::link使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ANode
的用法示例。
在下文中一共展示了ANode::link方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
bool
ANode::merge(ANode* node_dst, ANode* node_src)
{
// Do we really want this?
//if (!IsMergable(node_dst, node_src)) {
// return false;
//}
// Perform the merge
// 1. Move all children of 'node_src' into 'node_dst'
for (ANodeChildIterator it(node_src); it.Current(); /* */) {
ANode* x = it.current();
it++; // advance iterator so we can unlink 'x'
x->unlink();
x->link(node_dst);
}
// 2. If merging ACodeNodes, update line ranges
ACodeNode* dst0 = dynamic_cast<ACodeNode*>(node_dst);
ACodeNode* src0 = dynamic_cast<ACodeNode*>(node_src);
DIAG_Assert(Logic::equiv(dst0, src0), "Invariant broken!");
if (dst0 && src0) {
SrcFile::ln begLn = std::min(dst0->begLine(), src0->begLine());
SrcFile::ln endLn = std::max(dst0->endLine(), src0->endLine());
dst0->setLineRange(begLn, endLn);
dst0->vmaSet().merge(src0->vmaSet()); // merge VMAs
}
// 3. Unlink 'node_src' from the tree and delete it
node_src->unlink();
delete node_src;
return true;
}