| Index: Source/core/html/CollectionIndexCache.h
|
| diff --git a/Source/core/html/CollectionIndexCache.h b/Source/core/html/CollectionIndexCache.h
|
| index 4efcebb37d843f1c505432f7fb0a91a89bb56226..475e3285bb24063c311ad07e27b077a2c96877cf 100644
|
| --- a/Source/core/html/CollectionIndexCache.h
|
| +++ b/Source/core/html/CollectionIndexCache.h
|
| @@ -64,8 +64,8 @@ public:
|
| void invalidate();
|
|
|
| private:
|
| - NodeType* nodeBeforeCachedNode(const Collection&, unsigned index, const ContainerNode& root);
|
| - NodeType* nodeAfterCachedNode(const Collection&, unsigned index, const ContainerNode& root);
|
| + NodeType* nodeBeforeCachedNode(const Collection&, unsigned index);
|
| + NodeType* nodeAfterCachedNode(const Collection&, unsigned index);
|
|
|
| ALWAYS_INLINE NodeType* cachedNode() const { return m_currentNode; }
|
| ALWAYS_INLINE unsigned cachedNodeIndex() const { ASSERT(cachedNode()); return m_cachedNodeIndex; }
|
| @@ -124,29 +124,28 @@ inline NodeType* CollectionIndexCache<Collection, NodeType>::nodeAt(const Collec
|
| if (isCachedNodeCountValid() && index >= cachedNodeCount())
|
| return 0;
|
|
|
| - ContainerNode& root = collection.rootNode();
|
| if (cachedNode()) {
|
| if (index > cachedNodeIndex())
|
| - return nodeAfterCachedNode(collection, index, root);
|
| + return nodeAfterCachedNode(collection, index);
|
| if (index < cachedNodeIndex())
|
| - return nodeBeforeCachedNode(collection, index, root);
|
| + return nodeBeforeCachedNode(collection, index);
|
| return cachedNode();
|
| }
|
|
|
| // No valid cache yet, let's find the first matching element.
|
| ASSERT(!isCachedNodeCountValid());
|
| - NodeType* firstNode = collection.traverseToFirstElement(root);
|
| + NodeType* firstNode = collection.traverseToFirstElement();
|
| if (!firstNode) {
|
| // The collection is empty.
|
| setCachedNodeCount(0);
|
| return 0;
|
| }
|
| setCachedNode(firstNode, 0);
|
| - return index ? nodeAfterCachedNode(collection, index, root) : firstNode;
|
| + return index ? nodeAfterCachedNode(collection, index) : firstNode;
|
| }
|
|
|
| template <typename Collection, typename NodeType>
|
| -inline NodeType* CollectionIndexCache<Collection, NodeType>::nodeBeforeCachedNode(const Collection& collection, unsigned index, const ContainerNode& root)
|
| +inline NodeType* CollectionIndexCache<Collection, NodeType>::nodeBeforeCachedNode(const Collection& collection, unsigned index)
|
| {
|
| ASSERT(cachedNode()); // Cache should be valid.
|
| unsigned currentIndex = cachedNodeIndex();
|
| @@ -155,10 +154,10 @@ inline NodeType* CollectionIndexCache<Collection, NodeType>::nodeBeforeCachedNod
|
| // Determine if we should traverse from the beginning of the collection instead of the cached node.
|
| bool firstIsCloser = index < currentIndex - index;
|
| if (firstIsCloser || !collection.canTraverseBackward()) {
|
| - NodeType* firstNode = collection.traverseToFirstElement(root);
|
| + NodeType* firstNode = collection.traverseToFirstElement();
|
| ASSERT(firstNode);
|
| setCachedNode(firstNode, 0);
|
| - return index ? nodeAfterCachedNode(collection, index, root) : firstNode;
|
| + return index ? nodeAfterCachedNode(collection, index) : firstNode;
|
| }
|
|
|
| // Backward traversal from the cached node to the requested index.
|
| @@ -177,7 +176,7 @@ inline NodeType* CollectionIndexCache<Collection, NodeType>::nodeBeforeCachedNod
|
| }
|
|
|
| template <typename Collection, typename NodeType>
|
| -inline NodeType* CollectionIndexCache<Collection, NodeType>::nodeAfterCachedNode(const Collection& collection, unsigned index, const ContainerNode& root)
|
| +inline NodeType* CollectionIndexCache<Collection, NodeType>::nodeAfterCachedNode(const Collection& collection, unsigned index)
|
| {
|
| ASSERT(cachedNode()); // Cache should be valid.
|
| unsigned currentIndex = cachedNodeIndex();
|
| @@ -190,12 +189,12 @@ inline NodeType* CollectionIndexCache<Collection, NodeType>::nodeAfterCachedNode
|
| ASSERT(lastItem);
|
| setCachedNode(lastItem, cachedNodeCount() - 1);
|
| if (index < cachedNodeCount() - 1)
|
| - return nodeBeforeCachedNode(collection, index, root);
|
| + return nodeBeforeCachedNode(collection, index);
|
| return lastItem;
|
| }
|
|
|
| // Forward traversal from the cached node to the requested index.
|
| - NodeType* currentNode = collection.traverseForwardToOffset(index, *cachedNode(), currentIndex, root);
|
| + NodeType* currentNode = collection.traverseForwardToOffset(index, *cachedNode(), currentIndex);
|
| if (!currentNode) {
|
| // Did not find the node. On plus side, we now know the length.
|
| setCachedNodeCount(currentIndex + 1);
|
|
|