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

Side by Side Diff: Source/core/svg/properties/SVGListProperty.h

Issue 170603003: Use nullptr_t for RefPtr, PassRefPtr and RawPtr. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Final rebase Created 6 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 2 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 // See SVGPropertyTearOff::detachWrapper() for an explanation about what 's happening here. 57 // See SVGPropertyTearOff::detachWrapper() for an explanation about what 's happening here.
58 ASSERT(wrappers); 58 ASSERT(wrappers);
59 unsigned size = wrappers->size(); 59 unsigned size = wrappers->size();
60 for (unsigned i = 0; i < size; ++i) { 60 for (unsigned i = 0; i < size; ++i) {
61 if (ListItemTearOff* item = wrappers->at(i).get()) 61 if (ListItemTearOff* item = wrappers->at(i).get())
62 item->detachWrapper(); 62 item->detachWrapper();
63 } 63 }
64 64
65 // Reinitialize the wrapper cache to be equal to the new values size, af ter the XML DOM changed the list. 65 // Reinitialize the wrapper cache to be equal to the new values size, af ter the XML DOM changed the list.
66 if (newListSize) 66 if (newListSize)
67 wrappers->fill(0, newListSize); 67 wrappers->fill(nullptr, newListSize);
68 else 68 else
69 wrappers->clear(); 69 wrappers->clear();
70 } 70 }
71 71
72 void detachListWrappers(unsigned newListSize) 72 void detachListWrappers(unsigned newListSize)
73 { 73 {
74 detachListWrappersAndResize(m_wrappers, newListSize); 74 detachListWrappersAndResize(m_wrappers, newListSize);
75 } 75 }
76 76
77 void setValuesAndWrappers(PropertyType* values, ListWrapperCache* wrappers, bool shouldOwnValues) 77 void setValuesAndWrappers(PropertyType* values, ListWrapperCache* wrappers, bool shouldOwnValues)
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 m_values->append(newItem); 129 m_values->append(newItem);
130 130
131 commitChange(); 131 commitChange();
132 return newItem; 132 return newItem;
133 } 133 }
134 134
135 PassListItemTearOff initializeValuesAndWrappers(PassListItemTearOff passNewI tem, ExceptionState& exceptionState) 135 PassListItemTearOff initializeValuesAndWrappers(PassListItemTearOff passNewI tem, ExceptionState& exceptionState)
136 { 136 {
137 ASSERT(m_wrappers); 137 ASSERT(m_wrappers);
138 if (!canAlterList(exceptionState)) 138 if (!canAlterList(exceptionState))
139 return 0; 139 return nullptr;
140 140
141 // Not specified, but FF/Opera do it this way, and it's just sane. 141 // Not specified, but FF/Opera do it this way, and it's just sane.
142 if (!passNewItem) { 142 if (!passNewItem) {
143 exceptionState.throwTypeError("The PassListItemType provided is inva lid."); 143 exceptionState.throwTypeError("The PassListItemType provided is inva lid.");
144 return 0; 144 return nullptr;
145 } 145 }
146 146
147 RefPtr<ListItemTearOff> newItem = passNewItem; 147 RefPtr<ListItemTearOff> newItem = passNewItem;
148 ASSERT(m_values->size() == m_wrappers->size()); 148 ASSERT(m_values->size() == m_wrappers->size());
149 149
150 // Spec: If the inserted item is already in a list, it is removed from i ts previous list before it is inserted into this list. 150 // Spec: If the inserted item is already in a list, it is removed from i ts previous list before it is inserted into this list.
151 processIncomingListItemWrapper(newItem, 0); 151 processIncomingListItemWrapper(newItem, 0);
152 152
153 // Spec: Clears all existing current items from the list and re-initiali zes the list to hold the single item specified by the parameter. 153 // Spec: Clears all existing current items from the list and re-initiali zes the list to hold the single item specified by the parameter.
154 detachListWrappers(0); 154 detachListWrappers(0);
(...skipping 23 matching lines...) Expand all
178 return ListItemType(); 178 return ListItemType();
179 179
180 // Spec: Returns the specified item from the list. The returned item is the item itself and not a copy. 180 // Spec: Returns the specified item from the list. The returned item is the item itself and not a copy.
181 return m_values->at(index); 181 return m_values->at(index);
182 } 182 }
183 183
184 PassListItemTearOff getItemValuesAndWrappers(AnimatedListPropertyTearOff* an imatedList, unsigned index, ExceptionState& exceptionState) 184 PassListItemTearOff getItemValuesAndWrappers(AnimatedListPropertyTearOff* an imatedList, unsigned index, ExceptionState& exceptionState)
185 { 185 {
186 ASSERT(m_wrappers); 186 ASSERT(m_wrappers);
187 if (!canGetItem(index, exceptionState)) 187 if (!canGetItem(index, exceptionState))
188 return 0; 188 return nullptr;
189 189
190 // Spec: Returns the specified item from the list. The returned item is the item itself and not a copy. 190 // Spec: Returns the specified item from the list. The returned item is the item itself and not a copy.
191 // Any changes made to the item are immediately reflected in the list. 191 // Any changes made to the item are immediately reflected in the list.
192 ASSERT(m_values->size() == m_wrappers->size()); 192 ASSERT(m_values->size() == m_wrappers->size());
193 RefPtr<ListItemTearOff> wrapper = m_wrappers->at(index); 193 RefPtr<ListItemTearOff> wrapper = m_wrappers->at(index);
194 if (!wrapper) { 194 if (!wrapper) {
195 // Create new wrapper, which is allowed to directly modify the item in the list, w/o copying and cache the wrapper in our map. 195 // Create new wrapper, which is allowed to directly modify the item in the list, w/o copying and cache the wrapper in our map.
196 // It is also associated with our animated property, so it can notif y the SVG Element which holds the SVGAnimated*List 196 // It is also associated with our animated property, so it can notif y the SVG Element which holds the SVGAnimated*List
197 // that it has been modified (and thus can call svgAttributeChanged( associatedAttributeName)). 197 // that it has been modified (and thus can call svgAttributeChanged( associatedAttributeName)).
198 wrapper = ListItemTearOff::create(animatedList, UndefinedRole, m_val ues->at(index)); 198 wrapper = ListItemTearOff::create(animatedList, UndefinedRole, m_val ues->at(index));
(...skipping 24 matching lines...) Expand all
223 m_values->insert(index, newItem); 223 m_values->insert(index, newItem);
224 224
225 commitChange(); 225 commitChange();
226 return newItem; 226 return newItem;
227 } 227 }
228 228
229 PassListItemTearOff insertItemBeforeValuesAndWrappers(PassListItemTearOff pa ssNewItem, unsigned index, ExceptionState& exceptionState) 229 PassListItemTearOff insertItemBeforeValuesAndWrappers(PassListItemTearOff pa ssNewItem, unsigned index, ExceptionState& exceptionState)
230 { 230 {
231 ASSERT(m_wrappers); 231 ASSERT(m_wrappers);
232 if (!canAlterList(exceptionState)) 232 if (!canAlterList(exceptionState))
233 return 0; 233 return nullptr;
234 234
235 // Not specified, but FF/Opera do it this way, and it's just sane. 235 // Not specified, but FF/Opera do it this way, and it's just sane.
236 if (!passNewItem) { 236 if (!passNewItem) {
237 exceptionState.throwTypeError("The PassListItemType provided is inva lid."); 237 exceptionState.throwTypeError("The PassListItemType provided is inva lid.");
238 return 0; 238 return nullptr;
239 } 239 }
240 240
241 // Spec: If the index is greater than or equal to numberOfItems, then th e new item is appended to the end of the list. 241 // Spec: If the index is greater than or equal to numberOfItems, then th e new item is appended to the end of the list.
242 if (index > m_values->size()) 242 if (index > m_values->size())
243 index = m_values->size(); 243 index = m_values->size();
244 244
245 RefPtr<ListItemTearOff> newItem = passNewItem; 245 RefPtr<ListItemTearOff> newItem = passNewItem;
246 ASSERT(m_values->size() == m_wrappers->size()); 246 ASSERT(m_values->size() == m_wrappers->size());
247 247
248 // Spec: If newItem is already in a list, it is removed from its previou s list before it is inserted into this list. 248 // Spec: If newItem is already in a list, it is removed from its previou s list before it is inserted into this list.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 m_values->at(index) = newItem; 296 m_values->at(index) = newItem;
297 297
298 commitChange(); 298 commitChange();
299 return newItem; 299 return newItem;
300 } 300 }
301 301
302 PassListItemTearOff replaceItemValuesAndWrappers(PassListItemTearOff passNew Item, unsigned index, ExceptionState& exceptionState) 302 PassListItemTearOff replaceItemValuesAndWrappers(PassListItemTearOff passNew Item, unsigned index, ExceptionState& exceptionState)
303 { 303 {
304 ASSERT(m_wrappers); 304 ASSERT(m_wrappers);
305 if (!canReplaceItem(index, exceptionState)) 305 if (!canReplaceItem(index, exceptionState))
306 return 0; 306 return nullptr;
307 307
308 // Not specified, but FF/Opera do it this way, and it's just sane. 308 // Not specified, but FF/Opera do it this way, and it's just sane.
309 if (!passNewItem) { 309 if (!passNewItem) {
310 exceptionState.throwTypeError("The PassListItemType provided is inva lid."); 310 exceptionState.throwTypeError("The PassListItemType provided is inva lid.");
311 return 0; 311 return nullptr;
312 } 312 }
313 313
314 ASSERT(m_values->size() == m_wrappers->size()); 314 ASSERT(m_values->size() == m_wrappers->size());
315 RefPtr<ListItemTearOff> newItem = passNewItem; 315 RefPtr<ListItemTearOff> newItem = passNewItem;
316 316
317 // Spec: If newItem is already in a list, it is removed from its previou s list before it is inserted into this list. 317 // Spec: If newItem is already in a list, it is removed from its previou s list before it is inserted into this list.
318 // Spec: If the item is already in this list, note that the index of the item to replace is before the removal of the item. 318 // Spec: If the item is already in this list, note that the index of the item to replace is before the removal of the item.
319 if (!processIncomingListItemWrapper(newItem, &index)) 319 if (!processIncomingListItemWrapper(newItem, &index))
320 return newItem.release(); 320 return newItem.release();
321 321
322 if (m_values->isEmpty()) { 322 if (m_values->isEmpty()) {
323 ASSERT(m_wrappers->isEmpty()); 323 ASSERT(m_wrappers->isEmpty());
324 // 'passNewItem' already lived in our list, we removed it, and now w e're empty, which means there's nothing to replace. 324 // 'passNewItem' already lived in our list, we removed it, and now w e're empty, which means there's nothing to replace.
325 exceptionState.throwDOMException(IndexSizeError, "The new item lived in this list, and has been removed."); 325 exceptionState.throwDOMException(IndexSizeError, "The new item lived in this list, and has been removed.");
326 return 0; 326 return nullptr;
327 } 327 }
328 328
329 // Detach the existing wrapper. 329 // Detach the existing wrapper.
330 RefPtr<ListItemTearOff> oldItem = m_wrappers->at(index); 330 RefPtr<ListItemTearOff> oldItem = m_wrappers->at(index);
331 if (oldItem) 331 if (oldItem)
332 oldItem->detachWrapper(); 332 oldItem->detachWrapper();
333 333
334 // Update the value and the wrapper at the desired position 'index'. 334 // Update the value and the wrapper at the desired position 'index'.
335 m_values->at(index) = newItem->propertyReference(); 335 m_values->at(index) = newItem->propertyReference();
336 m_wrappers->at(index) = newItem; 336 m_wrappers->at(index) = newItem;
(...skipping 25 matching lines...) Expand all
362 m_values->remove(index); 362 m_values->remove(index);
363 363
364 commitChange(); 364 commitChange();
365 return oldItem; 365 return oldItem;
366 } 366 }
367 367
368 PassListItemTearOff removeItemValuesAndWrappers(AnimatedListPropertyTearOff* animatedList, unsigned index, ExceptionState& exceptionState) 368 PassListItemTearOff removeItemValuesAndWrappers(AnimatedListPropertyTearOff* animatedList, unsigned index, ExceptionState& exceptionState)
369 { 369 {
370 ASSERT(m_wrappers); 370 ASSERT(m_wrappers);
371 if (!canRemoveItem(index, exceptionState)) 371 if (!canRemoveItem(index, exceptionState))
372 return 0; 372 return nullptr;
373 373
374 ASSERT(m_values->size() == m_wrappers->size()); 374 ASSERT(m_values->size() == m_wrappers->size());
375 375
376 // Detach the existing wrapper. 376 // Detach the existing wrapper.
377 RefPtr<ListItemTearOff> oldItem = m_wrappers->at(index); 377 RefPtr<ListItemTearOff> oldItem = m_wrappers->at(index);
378 if (!oldItem) 378 if (!oldItem)
379 oldItem = ListItemTearOff::create(animatedList, UndefinedRole, m_val ues->at(index)); 379 oldItem = ListItemTearOff::create(animatedList, UndefinedRole, m_val ues->at(index));
380 380
381 oldItem->detachWrapper(); 381 oldItem->detachWrapper();
382 m_wrappers->remove(index); 382 m_wrappers->remove(index);
(...skipping 16 matching lines...) Expand all
399 m_values->append(newItem); 399 m_values->append(newItem);
400 400
401 commitChange(ListModificationAppend); 401 commitChange(ListModificationAppend);
402 return newItem; 402 return newItem;
403 } 403 }
404 404
405 PassListItemTearOff appendItemValuesAndWrappers(PassListItemTearOff passNewI tem, ExceptionState& exceptionState) 405 PassListItemTearOff appendItemValuesAndWrappers(PassListItemTearOff passNewI tem, ExceptionState& exceptionState)
406 { 406 {
407 ASSERT(m_wrappers); 407 ASSERT(m_wrappers);
408 if (!canAlterList(exceptionState)) 408 if (!canAlterList(exceptionState))
409 return 0; 409 return nullptr;
410 410
411 // Not specified, but FF/Opera do it this way, and it's just sane. 411 // Not specified, but FF/Opera do it this way, and it's just sane.
412 if (!passNewItem) { 412 if (!passNewItem) {
413 exceptionState.throwTypeError("The PassListItemType provided is inva lid."); 413 exceptionState.throwTypeError("The PassListItemType provided is inva lid.");
414 return 0; 414 return nullptr;
415 } 415 }
416 416
417 RefPtr<ListItemTearOff> newItem = passNewItem; 417 RefPtr<ListItemTearOff> newItem = passNewItem;
418 ASSERT(m_values->size() == m_wrappers->size()); 418 ASSERT(m_values->size() == m_wrappers->size());
419 419
420 // Spec: If newItem is already in a list, it is removed from its previou s list before it is inserted into this list. 420 // Spec: If newItem is already in a list, it is removed from its previou s list before it is inserted into this list.
421 processIncomingListItemWrapper(newItem, 0); 421 processIncomingListItemWrapper(newItem, 0);
422 422
423 // Append the value and wrapper at the end of the list. 423 // Append the value and wrapper at the end of the list.
424 m_values->append(newItem->propertyReference()); 424 m_values->append(newItem->propertyReference());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 466
467 SVGPropertyRole m_role; 467 SVGPropertyRole m_role;
468 bool m_ownsValues; 468 bool m_ownsValues;
469 PropertyType* m_values; 469 PropertyType* m_values;
470 ListWrapperCache* m_wrappers; 470 ListWrapperCache* m_wrappers;
471 }; 471 };
472 472
473 } 473 }
474 474
475 #endif // SVGListProperty_h 475 #endif // SVGListProperty_h
OLDNEW
« no previous file with comments | « Source/core/svg/properties/SVGAnimatedListPropertyTearOff.h ('k') | Source/core/testing/Internals.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698