NodeRenderingTraversal.h [plain text]
#ifndef NodeRenderingTraversal_h
#define NodeRenderingTraversal_h
#include "ContainerNode.h"
namespace WebCore {
namespace NodeRenderingTraversal {
ContainerNode* parent(const Node*);
Node* firstChild(const Node*);
Node* nextSibling(const Node*);
Node* previousSibling(const Node*);
Node* nextInScope(const Node*);
Node* previousInScope(const Node*);
Node* parentInScope(const Node*);
Node* lastChildInScope(const Node*);
ContainerNode* parentSlow(const Node*);
Node* firstChildSlow(const Node*);
Node* nextSiblingSlow(const Node*);
Node* previousSiblingSlow(const Node*);
inline ContainerNode* parent(const Node* node)
{
ASSERT(!node->isPseudoElement());
if (node->needsNodeRenderingTraversalSlowPath())
return parentSlow(node);
ASSERT(node->parentNode() == parentSlow(node));
return node->parentNodeGuaranteedHostFree();
}
inline Node* firstChild(const Node* node)
{
ASSERT(!node->isPseudoElement());
if (node->needsNodeRenderingTraversalSlowPath())
return firstChildSlow(node);
ASSERT(nextSiblingSlow(node) == node->nextSibling());
return node->firstChild();
}
inline Node* nextSibling(const Node* node)
{
ASSERT(!node->isPseudoElement());
if (node->needsNodeRenderingTraversalSlowPath())
return nextSiblingSlow(node);
ASSERT(nextSiblingSlow(node) == node->nextSibling());
return node->nextSibling();
}
inline Node* previousSibling(const Node* node)
{
ASSERT(!node->isPseudoElement());
if (node->needsNodeRenderingTraversalSlowPath())
return previousSiblingSlow(node);
ASSERT(previousSiblingSlow(node) == node->previousSibling());
return node->previousSibling();
}
}
}
#endif