本文整理汇总了C++中NodeSet::reverse方法的典型用法代码示例。如果您正苦于以下问题:C++ NodeSet::reverse方法的具体用法?C++ NodeSet::reverse怎么用?C++ NodeSet::reverse使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NodeSet
的用法示例。
在下文中一共展示了NodeSet::reverse方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: nodesInAxis
void Step::nodesInAxis(Node* context, NodeSet& nodes) const
{
ASSERT(nodes.isEmpty());
switch (m_axis) {
case ChildAxis:
if (context->isAttributeNode()) // In XPath model, attribute nodes do not have children.
return;
for (Node* n = context->firstChild(); n; n = n->nextSibling())
if (nodeMatches(n))
nodes.append(n);
return;
case DescendantAxis:
if (context->isAttributeNode()) // In XPath model, attribute nodes do not have children.
return;
for (Node* n = context->firstChild(); n; n = n->traverseNextNode(context))
if (nodeMatches(n))
nodes.append(n);
return;
case ParentAxis:
if (context->isAttributeNode()) {
Node* n = static_cast<Attr*>(context)->ownerElement();
if (nodeMatches(n))
nodes.append(n);
} else {
Node* n = context->parentNode();
if (n && nodeMatches(n))
nodes.append(n);
}
return;
case AncestorAxis: {
Node* n = context;
if (context->isAttributeNode()) {
n = static_cast<Attr*>(context)->ownerElement();
if (nodeMatches(n))
nodes.append(n);
}
for (n = n->parentNode(); n; n = n->parentNode())
if (nodeMatches(n))
nodes.append(n);
nodes.reverse();
return;
}
case FollowingSiblingAxis:
if (context->nodeType() == Node::ATTRIBUTE_NODE ||
context->nodeType() == Node::XPATH_NAMESPACE_NODE)
return;
for (Node* n = context->nextSibling(); n; n = n->nextSibling())
if (nodeMatches(n))
nodes.append(n);
return;
case PrecedingSiblingAxis:
if (context->nodeType() == Node::ATTRIBUTE_NODE ||
context->nodeType() == Node::XPATH_NAMESPACE_NODE)
return;
for (Node* n = context->previousSibling(); n; n = n->previousSibling())
if (nodeMatches(n))
nodes.append(n);
nodes.reverse();
return;
case FollowingAxis:
if (context->isAttributeNode()) {
Node* p = static_cast<Attr*>(context)->ownerElement();
while ((p = p->traverseNextNode()))
if (nodeMatches(p))
nodes.append(p);
} else {
for (Node* p = context; !isRootDomNode(p); p = p->parentNode()) {
for (Node* n = p->nextSibling(); n; n = n->nextSibling()) {
if (nodeMatches(n))
nodes.append(n);
for (Node* c = n->firstChild(); c; c = c->traverseNextNode(n))
if (nodeMatches(c))
nodes.append(c);
}
}
}
return;
case PrecedingAxis:
if (context->isAttributeNode())
context = static_cast<Attr*>(context)->ownerElement();
for (Node* p = context; !isRootDomNode(p); p = p->parentNode()) {
for (Node* n = p->previousSibling(); n ; n = n->previousSibling()) {
if (nodeMatches(n))
nodes.append(n);
for (Node* c = n->firstChild(); c; c = c->traverseNextNode(n))
if (nodeMatches(c))
nodes.append(c);
}
}
nodes.markSorted(false);
return;
case AttributeAxis: {
if (context->nodeType() != Node::ELEMENT_NODE)
return;
//.........这里部分代码省略.........