Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(441)

Unified Diff: Source/wtf/TreeNode.h

Issue 133993004: Fix mac bot specific performance regression by reverting set of patches (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/HTMLImport.cpp ('k') | Source/wtf/TreeNodeTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/wtf/TreeNode.h
diff --git a/Source/wtf/TreeNode.h b/Source/wtf/TreeNode.h
index dd03e3d2d2126cb7c3a609b6c978d1e806353554..15c7679bef360329f2e02a4ff30805165a140783 100644
--- a/Source/wtf/TreeNode.h
+++ b/Source/wtf/TreeNode.h
@@ -50,29 +50,29 @@ public:
typedef T NodeType;
TreeNode()
- : m_nextSibling(0)
- , m_previousSibling(0)
+ : m_next(0)
+ , m_previous(0)
, m_parent(0)
, m_firstChild(0)
, m_lastChild(0)
{
}
- NodeType* nextSibling() const { return m_nextSibling; }
- NodeType* previousSibling() const { return m_previousSibling; }
+ NodeType* next() const { return m_next; }
+ NodeType* previous() const { return m_previous; }
NodeType* parent() const { return m_parent; }
NodeType* firstChild() const { return m_firstChild; }
NodeType* lastChild() const { return m_lastChild; }
NodeType* here() const { return static_cast<NodeType*>(const_cast<TreeNode*>(this)); }
- bool orphan() const { return !m_parent && !m_nextSibling && !m_previousSibling && !m_firstChild && !m_lastChild; }
+ bool orphan() const { return !m_parent && !m_next && !m_previous && !m_firstChild && !m_lastChild; }
bool hasChildren() const { return m_firstChild; }
void insertBefore(NodeType* newChild, NodeType* refChild)
{
ASSERT(!newChild->parent());
- ASSERT(!newChild->nextSibling());
- ASSERT(!newChild->previousSibling());
+ ASSERT(!newChild->next());
+ ASSERT(!newChild->previous());
ASSERT(!refChild || this == refChild->parent());
@@ -81,13 +81,13 @@ public:
return;
}
- NodeType* newPrevious = refChild->previousSibling();
+ NodeType* newPrevious = refChild->previous();
newChild->m_parent = here();
- newChild->m_nextSibling = refChild;
- newChild->m_previousSibling = newPrevious;
- refChild->m_previousSibling = newChild;
+ newChild->m_next = refChild;
+ newChild->m_previous = newPrevious;
+ refChild->m_previous = newChild;
if (newPrevious)
- newPrevious->m_nextSibling = newChild;
+ newPrevious->m_next = newChild;
else
m_firstChild = newChild;
}
@@ -95,8 +95,8 @@ public:
void appendChild(NodeType* child)
{
ASSERT(!child->parent());
- ASSERT(!child->nextSibling());
- ASSERT(!child->previousSibling());
+ ASSERT(!child->next());
+ ASSERT(!child->previous());
child->m_parent = here();
@@ -106,12 +106,12 @@ public:
return;
}
- ASSERT(!m_lastChild->m_nextSibling);
+ ASSERT(!m_lastChild->m_next);
NodeType* oldLast = m_lastChild;
m_lastChild = child;
- child->m_previousSibling = oldLast;
- oldLast->m_nextSibling = child;
+ child->m_previous = oldLast;
+ oldLast->m_next = child;
}
NodeType* removeChild(NodeType* child)
@@ -119,137 +119,76 @@ public:
ASSERT(child->parent() == this);
if (m_firstChild == child)
- m_firstChild = child->nextSibling();
+ m_firstChild = child->next();
if (m_lastChild == child)
- m_lastChild = child->previousSibling();
+ m_lastChild = child->previous();
- NodeType* oldNext = child->nextSibling();
- NodeType* oldPrevious = child->previousSibling();
- child->m_parent = child->m_nextSibling = child->m_previousSibling = 0;
+ NodeType* oldNext = child->next();
+ NodeType* oldPrevious = child->previous();
+ child->m_parent = child->m_next = child->m_previous = 0;
if (oldNext)
- oldNext->m_previousSibling = oldPrevious;
+ oldNext->m_previous = oldPrevious;
if (oldPrevious)
- oldPrevious->m_nextSibling = oldNext;
+ oldPrevious->m_next = oldNext;
return child;
}
private:
- NodeType* m_nextSibling;
- NodeType* m_previousSibling;
+ NodeType* m_next;
+ NodeType* m_previous;
NodeType* m_parent;
NodeType* m_firstChild;
NodeType* m_lastChild;
};
-/* non-recursive pre-order traversal */
-template<class NodeType, class ContainerType>
-inline NodeType* traverseNext(const ContainerType& current)
+template<class T>
+inline typename TreeNode<T>::NodeType* traverseNext(const TreeNode<T>* current, const TreeNode<T>* stayWithin = 0)
{
- if (NodeType* firstChild = current.firstChild())
- return firstChild;
- if (NodeType* nextSibling = current.nextSibling())
- return nextSibling;
- for (NodeType* parent = current.parent(); parent; parent = parent->parent()) {
- if (NodeType* nextSibling = parent->nextSibling())
- return nextSibling;
- }
-
- return 0;
-}
-
-template<class NodeType, class ContainerType>
-inline NodeType* traverseNext(const ContainerType& current, const NodeType* stayWithin)
-{
- if (NodeType* firstChild = current.firstChild())
- return firstChild;
- if (&current == stayWithin)
+ if (typename TreeNode<T>::NodeType* next = current->firstChild())
+ return next;
+ if (current == stayWithin)
return 0;
- if (NodeType* nextSibling = current.nextSibling())
- return nextSibling;
- for (NodeType* parent = current.parent(); parent; parent = parent->parent()) {
+ if (typename TreeNode<T>::NodeType* next = current->next())
+ return next;
+ for (typename TreeNode<T>::NodeType* parent = current->parent(); parent; parent = parent->parent()) {
if (parent == stayWithin)
return 0;
- if (NodeType* nextSibling = parent->nextSibling())
- return nextSibling;
+ if (typename TreeNode<T>::NodeType* next = parent->next())
+ return next;
}
return 0;
}
-/* non-recursive post-order traversal */
-template<class NodeType, class ContainerType>
-inline NodeType* traverseFirstPostOrder(const ContainerType& current)
+template<class T>
+inline typename TreeNode<T>::NodeType* traverseFirstPostOrder(const TreeNode<T>* current)
{
- NodeType* first = current.here();
+ typename TreeNode<T>::NodeType* first = current->here();
while (first->firstChild())
first = first->firstChild();
return first;
}
-template<class NodeType, class ContainerType>
-inline NodeType* traverseNextPostOrder(const ContainerType& current)
-{
- NodeType* nextSibling = current.nextSibling();
- if (!nextSibling)
- return current.parent();
- while (nextSibling->firstChild())
- nextSibling = nextSibling->firstChild();
- return nextSibling;
-}
-
-template<class NodeType, class ContainerType>
-inline NodeType* traverseNextPostOrder(const ContainerType& current, const NodeType* stayWithin)
-{
- if (&current == stayWithin)
- return 0;
-
- NodeType* nextSibling = current.nextSibling();
- if (!nextSibling)
- return current.parent();
- while (nextSibling->firstChild())
- nextSibling = nextSibling->firstChild();
- return nextSibling;
-}
-
-/* non-recursive traversal skipping children */
-template <class NodeType, class ContainerType>
-inline NodeType* traverseNextSkippingChildren(const ContainerType& current)
-{
- if (current.nextSibling())
- return current.nextSibling();
- for (NodeType* parent = current.parent(); parent; parent = parent->parent()) {
- if (NodeType* nextSibling = parent->nextSibling())
- return nextSibling;
- }
-
- return 0;
-}
-
-template <class NodeType, class ContainerType>
-inline NodeType* traverseNextSkippingChildren(const ContainerType& current, const NodeType* stayWithin)
+template<class T>
+inline typename TreeNode<T>::NodeType* traverseNextPostOrder(const TreeNode<T>* current, const TreeNode<T>* stayWithin = 0)
{
if (current == stayWithin)
return 0;
- if (current.nextSibling())
- return current.nextSibling();
- for (NodeType* parent = current.parent(); parent; parent = parent->parent()) {
- if (parent == stayWithin)
- return 0;
- if (NodeType* nextSibling = parent->nextSibling())
- return nextSibling;
- }
- return 0;
+ typename TreeNode<T>::NodeType* next = current->next();
+ if (!next)
+ return current->parent();
+ while (next->firstChild())
+ next = next->firstChild();
+ return next;
}
-} // namespace WTF
+}
using WTF::TreeNode;
using WTF::traverseNext;
-using WTF::traverseFirstPostOrder;
using WTF::traverseNextPostOrder;
-using WTF::traverseNextSkippingChildren;
-#endif // TreeNode_h
+#endif
« no previous file with comments | « Source/core/html/HTMLImport.cpp ('k') | Source/wtf/TreeNodeTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698