OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 2 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
3 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. | 3 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 17 matching lines...) Expand all Loading... |
28 #include <stdio.h> | 28 #include <stdio.h> |
29 #endif | 29 #endif |
30 | 30 |
31 namespace blink { | 31 namespace blink { |
32 | 32 |
33 CounterNode::CounterNode(LayoutObject& o, bool hasResetType, int value) | 33 CounterNode::CounterNode(LayoutObject& o, bool hasResetType, int value) |
34 : m_hasResetType(hasResetType) | 34 : m_hasResetType(hasResetType) |
35 , m_value(value) | 35 , m_value(value) |
36 , m_countInParent(0) | 36 , m_countInParent(0) |
37 , m_owner(o) | 37 , m_owner(o) |
38 , m_rootLayoutObject(0) | 38 , m_rootLayoutObject(nullptr) |
39 , m_parent(0) | 39 , m_parent(nullptr) |
40 , m_previousSibling(0) | 40 , m_previousSibling(nullptr) |
41 , m_nextSibling(0) | 41 , m_nextSibling(nullptr) |
42 , m_firstChild(0) | 42 , m_firstChild(nullptr) |
43 , m_lastChild(0) | 43 , m_lastChild(nullptr) |
44 { | 44 { |
45 } | 45 } |
46 | 46 |
47 CounterNode::~CounterNode() | 47 CounterNode::~CounterNode() |
48 { | 48 { |
49 // Ideally this would be an assert and this would never be reached. In reali
ty this happens a lot | 49 // Ideally this would be an assert and this would never be reached. In reali
ty this happens a lot |
50 // so we need to handle these cases. The node is still connected to the tree
so we need to detach it. | 50 // so we need to handle these cases. The node is still connected to the tree
so we need to detach it. |
51 if (m_parent || m_previousSibling || m_nextSibling || m_firstChild || m_last
Child) { | 51 if (m_parent || m_previousSibling || m_nextSibling || m_firstChild || m_last
Child) { |
52 CounterNode* oldParent = 0; | 52 CounterNode* oldParent = nullptr; |
53 CounterNode* oldPreviousSibling = 0; | 53 CounterNode* oldPreviousSibling = nullptr; |
54 // Instead of calling removeChild() we do this safely as the tree is lik
ely broken if we get here. | 54 // Instead of calling removeChild() we do this safely as the tree is lik
ely broken if we get here. |
55 if (m_parent) { | 55 if (m_parent) { |
56 if (m_parent->m_firstChild == this) | 56 if (m_parent->m_firstChild == this) |
57 m_parent->m_firstChild = m_nextSibling; | 57 m_parent->m_firstChild = m_nextSibling; |
58 if (m_parent->m_lastChild == this) | 58 if (m_parent->m_lastChild == this) |
59 m_parent->m_lastChild = m_previousSibling; | 59 m_parent->m_lastChild = m_previousSibling; |
60 oldParent = m_parent; | 60 oldParent = m_parent; |
61 m_parent = 0; | 61 m_parent = nullptr; |
62 } | 62 } |
63 if (m_previousSibling) { | 63 if (m_previousSibling) { |
64 if (m_previousSibling->m_nextSibling == this) | 64 if (m_previousSibling->m_nextSibling == this) |
65 m_previousSibling->m_nextSibling = m_nextSibling; | 65 m_previousSibling->m_nextSibling = m_nextSibling; |
66 oldPreviousSibling = m_previousSibling; | 66 oldPreviousSibling = m_previousSibling; |
67 m_previousSibling = 0; | 67 m_previousSibling = nullptr; |
68 } | 68 } |
69 if (m_nextSibling) { | 69 if (m_nextSibling) { |
70 if (m_nextSibling->m_previousSibling == this) | 70 if (m_nextSibling->m_previousSibling == this) |
71 m_nextSibling->m_previousSibling = oldPreviousSibling; | 71 m_nextSibling->m_previousSibling = oldPreviousSibling; |
72 m_nextSibling = 0; | 72 m_nextSibling = nullptr; |
73 } | 73 } |
74 if (m_firstChild) { | 74 if (m_firstChild) { |
75 // The node's children are reparented to the old parent. | 75 // The node's children are reparented to the old parent. |
76 for (CounterNode* child = m_firstChild; child; ) { | 76 for (CounterNode* child = m_firstChild; child; ) { |
77 CounterNode* nextChild = child->m_nextSibling; | 77 CounterNode* nextChild = child->m_nextSibling; |
78 CounterNode* nextSibling = 0; | 78 CounterNode* nextSibling = nullptr; |
79 child->m_parent = oldParent; | 79 child->m_parent = oldParent; |
80 if (oldPreviousSibling) { | 80 if (oldPreviousSibling) { |
81 nextSibling = oldPreviousSibling->m_nextSibling; | 81 nextSibling = oldPreviousSibling->m_nextSibling; |
82 child->m_previousSibling = oldPreviousSibling; | 82 child->m_previousSibling = oldPreviousSibling; |
83 oldPreviousSibling->m_nextSibling = child; | 83 oldPreviousSibling->m_nextSibling = child; |
84 child->m_nextSibling = nextSibling; | 84 child->m_nextSibling = nextSibling; |
85 nextSibling->m_previousSibling = child; | 85 nextSibling->m_previousSibling = child; |
86 oldPreviousSibling = child; | 86 oldPreviousSibling = child; |
87 } | 87 } |
88 child = nextChild; | 88 child = nextChild; |
89 } | 89 } |
90 } | 90 } |
91 } | 91 } |
92 resetLayoutObjects(); | 92 resetLayoutObjects(); |
93 } | 93 } |
94 | 94 |
95 PassRefPtr<CounterNode> CounterNode::create(LayoutObject& owner, bool hasResetTy
pe, int value) | 95 PassRefPtr<CounterNode> CounterNode::create(LayoutObject& owner, bool hasResetTy
pe, int value) |
96 { | 96 { |
97 return adoptRef(new CounterNode(owner, hasResetType, value)); | 97 return adoptRef(new CounterNode(owner, hasResetType, value)); |
98 } | 98 } |
99 | 99 |
100 CounterNode* CounterNode::nextInPreOrderAfterChildren(const CounterNode* stayWit
hin) const | 100 CounterNode* CounterNode::nextInPreOrderAfterChildren(const CounterNode* stayWit
hin) const |
101 { | 101 { |
102 if (this == stayWithin) | 102 if (this == stayWithin) |
103 return 0; | 103 return nullptr; |
104 | 104 |
105 const CounterNode* current = this; | 105 const CounterNode* current = this; |
106 CounterNode* next = current->m_nextSibling; | 106 CounterNode* next = current->m_nextSibling; |
107 for (; !next; next = current->m_nextSibling) { | 107 for (; !next; next = current->m_nextSibling) { |
108 current = current->m_parent; | 108 current = current->m_parent; |
109 if (!current || current == stayWithin) | 109 if (!current || current == stayWithin) |
110 return 0; | 110 return nullptr; |
111 } | 111 } |
112 return next; | 112 return next; |
113 } | 113 } |
114 | 114 |
115 CounterNode* CounterNode::nextInPreOrder(const CounterNode* stayWithin) const | 115 CounterNode* CounterNode::nextInPreOrder(const CounterNode* stayWithin) const |
116 { | 116 { |
117 if (CounterNode* next = m_firstChild) | 117 if (CounterNode* next = m_firstChild) |
118 return next; | 118 return next; |
119 | 119 |
120 return nextInPreOrderAfterChildren(stayWithin); | 120 return nextInPreOrderAfterChildren(stayWithin); |
121 } | 121 } |
122 | 122 |
123 CounterNode* CounterNode::lastDescendant() const | 123 CounterNode* CounterNode::lastDescendant() const |
124 { | 124 { |
125 CounterNode* last = m_lastChild; | 125 CounterNode* last = m_lastChild; |
126 if (!last) | 126 if (!last) |
127 return 0; | 127 return nullptr; |
128 | 128 |
129 while (CounterNode* lastChild = last->m_lastChild) | 129 while (CounterNode* lastChild = last->m_lastChild) |
130 last = lastChild; | 130 last = lastChild; |
131 | 131 |
132 return last; | 132 return last; |
133 } | 133 } |
134 | 134 |
135 CounterNode* CounterNode::previousInPreOrder() const | 135 CounterNode* CounterNode::previousInPreOrder() const |
136 { | 136 { |
137 CounterNode* previous = m_previousSibling; | 137 CounterNode* previous = m_previousSibling; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 void CounterNode::removeLayoutObject(LayoutCounter* value) | 184 void CounterNode::removeLayoutObject(LayoutCounter* value) |
185 { | 185 { |
186 if (!value) { | 186 if (!value) { |
187 ASSERT_NOT_REACHED(); | 187 ASSERT_NOT_REACHED(); |
188 return; | 188 return; |
189 } | 189 } |
190 if (value->m_counterNode && value->m_counterNode != this) { | 190 if (value->m_counterNode && value->m_counterNode != this) { |
191 ASSERT_NOT_REACHED(); | 191 ASSERT_NOT_REACHED(); |
192 value->m_counterNode->removeLayoutObject(value); | 192 value->m_counterNode->removeLayoutObject(value); |
193 } | 193 } |
194 LayoutCounter* previous = 0; | 194 LayoutCounter* previous = nullptr; |
195 for (LayoutCounter* iterator = m_rootLayoutObject; iterator; iterator = iter
ator->m_nextForSameCounter) { | 195 for (LayoutCounter* iterator = m_rootLayoutObject; iterator; iterator = iter
ator->m_nextForSameCounter) { |
196 if (iterator == value) { | 196 if (iterator == value) { |
197 if (previous) | 197 if (previous) |
198 previous->m_nextForSameCounter = value->m_nextForSameCounter; | 198 previous->m_nextForSameCounter = value->m_nextForSameCounter; |
199 else | 199 else |
200 m_rootLayoutObject = value->m_nextForSameCounter; | 200 m_rootLayoutObject = value->m_nextForSameCounter; |
201 value->m_nextForSameCounter = 0; | 201 value->m_nextForSameCounter = nullptr; |
202 value->m_counterNode = 0; | 202 value->m_counterNode = nullptr; |
203 return; | 203 return; |
204 } | 204 } |
205 previous = iterator; | 205 previous = iterator; |
206 } | 206 } |
207 ASSERT_NOT_REACHED(); | 207 ASSERT_NOT_REACHED(); |
208 } | 208 } |
209 | 209 |
210 void CounterNode::resetLayoutObjects() | 210 void CounterNode::resetLayoutObjects() |
211 { | 211 { |
212 while (m_rootLayoutObject) | 212 while (m_rootLayoutObject) |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 next->m_previousSibling = last; | 308 next->m_previousSibling = last; |
309 } else { | 309 } else { |
310 m_lastChild = last; | 310 m_lastChild = last; |
311 } | 311 } |
312 for (next = first; ; next = next->m_nextSibling) { | 312 for (next = first; ; next = next->m_nextSibling) { |
313 next->m_parent = this; | 313 next->m_parent = this; |
314 if (last == next) | 314 if (last == next) |
315 break; | 315 break; |
316 } | 316 } |
317 } | 317 } |
318 newChild->m_firstChild = 0; | 318 newChild->m_firstChild = nullptr; |
319 newChild->m_lastChild = 0; | 319 newChild->m_lastChild = nullptr; |
320 newChild->m_countInParent = newChild->computeCountInParent(); | 320 newChild->m_countInParent = newChild->computeCountInParent(); |
321 newChild->resetLayoutObjects(); | 321 newChild->resetLayoutObjects(); |
322 first->recount(); | 322 first->recount(); |
323 } | 323 } |
324 | 324 |
325 void CounterNode::removeChild(CounterNode* oldChild) | 325 void CounterNode::removeChild(CounterNode* oldChild) |
326 { | 326 { |
327 ASSERT(oldChild); | 327 ASSERT(oldChild); |
328 ASSERT(!oldChild->m_firstChild); | 328 ASSERT(!oldChild->m_firstChild); |
329 ASSERT(!oldChild->m_lastChild); | 329 ASSERT(!oldChild->m_lastChild); |
330 | 330 |
331 CounterNode* next = oldChild->m_nextSibling; | 331 CounterNode* next = oldChild->m_nextSibling; |
332 CounterNode* previous = oldChild->m_previousSibling; | 332 CounterNode* previous = oldChild->m_previousSibling; |
333 | 333 |
334 oldChild->m_nextSibling = 0; | 334 oldChild->m_nextSibling = nullptr; |
335 oldChild->m_previousSibling = 0; | 335 oldChild->m_previousSibling = nullptr; |
336 oldChild->m_parent = 0; | 336 oldChild->m_parent = nullptr; |
337 | 337 |
338 if (previous) { | 338 if (previous) { |
339 previous->m_nextSibling = next; | 339 previous->m_nextSibling = next; |
340 } else { | 340 } else { |
341 ASSERT(m_firstChild == oldChild); | 341 ASSERT(m_firstChild == oldChild); |
342 m_firstChild = next; | 342 m_firstChild = next; |
343 } | 343 } |
344 | 344 |
345 if (next) { | 345 if (next) { |
346 next->m_previousSibling = previous; | 346 next->m_previousSibling = previous; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 | 381 |
382 void showCounterTree(const blink::CounterNode* counter) | 382 void showCounterTree(const blink::CounterNode* counter) |
383 { | 383 { |
384 if (counter) | 384 if (counter) |
385 showTreeAndMark(counter); | 385 showTreeAndMark(counter); |
386 else | 386 else |
387 fprintf(stderr, "Cannot showCounterTree for (nil).\n"); | 387 fprintf(stderr, "Cannot showCounterTree for (nil).\n"); |
388 } | 388 } |
389 | 389 |
390 #endif | 390 #endif |
OLD | NEW |