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

Side by Side Diff: Source/core/dom/NodeIterator.cpp

Issue 69003004: Have NodeTraversal::previous*() take a reference (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « Source/core/dom/ElementTraversal.h ('k') | Source/core/dom/NodeTraversal.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2000 Frederik Holljen (frederik.holljen@hig.no) 3 * Copyright (C) 2000 Frederik Holljen (frederik.holljen@hig.no)
4 * Copyright (C) 2001 Peter Kelly (pmk@post.com) 4 * Copyright (C) 2001 Peter Kelly (pmk@post.com)
5 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) 5 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
6 * Copyright (C) 2004, 2008 Apple Inc. All rights reserved. 6 * Copyright (C) 2004, 2008 Apple Inc. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 } 63 }
64 64
65 bool NodeIterator::NodePointer::moveToPrevious(Node* root) 65 bool NodeIterator::NodePointer::moveToPrevious(Node* root)
66 { 66 {
67 if (!node) 67 if (!node)
68 return false; 68 return false;
69 if (!isPointerBeforeNode) { 69 if (!isPointerBeforeNode) {
70 isPointerBeforeNode = true; 70 isPointerBeforeNode = true;
71 return true; 71 return true;
72 } 72 }
73 node = NodeTraversal::previous(node.get(), root); 73 node = NodeTraversal::previous(*node, root);
74 return node; 74 return node;
75 } 75 }
76 76
77 NodeIterator::NodeIterator(PassRefPtr<Node> rootNode, unsigned whatToShow, PassR efPtr<NodeFilter> filter) 77 NodeIterator::NodeIterator(PassRefPtr<Node> rootNode, unsigned whatToShow, PassR efPtr<NodeFilter> filter)
78 : Traversal(rootNode, whatToShow, filter) 78 : Traversal(rootNode, whatToShow, filter)
79 , m_referenceNode(root(), true) 79 , m_referenceNode(root(), true)
80 , m_detached(false) 80 , m_detached(false)
81 { 81 {
82 ScriptWrappable::init(this); 82 ScriptWrappable::init(this);
83 root()->document().attachNodeIterator(this); 83 root()->document().attachNodeIterator(this);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 if (referenceNode.isPointerBeforeNode) { 176 if (referenceNode.isPointerBeforeNode) {
177 Node* node = NodeTraversal::next(removedNode, root()); 177 Node* node = NodeTraversal::next(removedNode, root());
178 if (node) { 178 if (node) {
179 // Move out from under the node being removed if the new reference 179 // Move out from under the node being removed if the new reference
180 // node is a descendant of the node being removed. 180 // node is a descendant of the node being removed.
181 while (node && node->isDescendantOf(&removedNode)) 181 while (node && node->isDescendantOf(&removedNode))
182 node = NodeTraversal::next(*node, root()); 182 node = NodeTraversal::next(*node, root());
183 if (node) 183 if (node)
184 referenceNode.node = node; 184 referenceNode.node = node;
185 } else { 185 } else {
186 node = NodeTraversal::previous(&removedNode, root()); 186 node = NodeTraversal::previous(removedNode, root());
187 if (node) { 187 if (node) {
188 // Move out from under the node being removed if the reference n ode is 188 // Move out from under the node being removed if the reference n ode is
189 // a descendant of the node being removed. 189 // a descendant of the node being removed.
190 if (willRemoveReferenceNodeAncestor) { 190 if (willRemoveReferenceNodeAncestor) {
191 while (node && node->isDescendantOf(&removedNode)) 191 while (node && node->isDescendantOf(&removedNode))
192 node = NodeTraversal::previous(node, root()); 192 node = NodeTraversal::previous(*node, root());
193 } 193 }
194 if (node) { 194 if (node) {
195 // Removing last node. 195 // Removing last node.
196 // Need to move the pointer after the node preceding the 196 // Need to move the pointer after the node preceding the
197 // new reference node. 197 // new reference node.
198 referenceNode.node = node; 198 referenceNode.node = node;
199 referenceNode.isPointerBeforeNode = false; 199 referenceNode.isPointerBeforeNode = false;
200 } 200 }
201 } 201 }
202 } 202 }
203 } else { 203 } else {
204 Node* node = NodeTraversal::previous(&removedNode, root()); 204 Node* node = NodeTraversal::previous(removedNode, root());
205 if (node) { 205 if (node) {
206 // Move out from under the node being removed if the reference node is 206 // Move out from under the node being removed if the reference node is
207 // a descendant of the node being removed. 207 // a descendant of the node being removed.
208 if (willRemoveReferenceNodeAncestor) { 208 if (willRemoveReferenceNodeAncestor) {
209 while (node && node->isDescendantOf(&removedNode)) 209 while (node && node->isDescendantOf(&removedNode))
210 node = NodeTraversal::previous(node, root()); 210 node = NodeTraversal::previous(*node, root());
211 } 211 }
212 if (node) 212 if (node)
213 referenceNode.node = node; 213 referenceNode.node = node;
214 } else { 214 } else {
215 // FIXME: This branch doesn't appear to have any LayoutTests. 215 // FIXME: This branch doesn't appear to have any LayoutTests.
216 node = NodeTraversal::next(removedNode, root()); 216 node = NodeTraversal::next(removedNode, root());
217 // Move out from under the node being removed if the reference node is 217 // Move out from under the node being removed if the reference node is
218 // a descendant of the node being removed. 218 // a descendant of the node being removed.
219 if (willRemoveReferenceNodeAncestor) { 219 if (willRemoveReferenceNodeAncestor) {
220 while (node && node->isDescendantOf(&removedNode)) 220 while (node && node->isDescendantOf(&removedNode))
221 node = NodeTraversal::previous(node, root()); 221 node = NodeTraversal::previous(*node, root());
222 } 222 }
223 if (node) 223 if (node)
224 referenceNode.node = node; 224 referenceNode.node = node;
225 } 225 }
226 } 226 }
227 } 227 }
228 228
229 229
230 } // namespace WebCore 230 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/dom/ElementTraversal.h ('k') | Source/core/dom/NodeTraversal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698