| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/quads/list_container.h" | 5 #include "cc/quads/list_container.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "cc/base/scoped_ptr_vector.h" | 10 #include "cc/base/scoped_ptr_vector.h" |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 template <typename BaseElementType> | 265 template <typename BaseElementType> |
| 266 ListContainer<BaseElementType>::~ListContainer() { | 266 ListContainer<BaseElementType>::~ListContainer() { |
| 267 for (Iterator i = begin(); i != end(); ++i) { | 267 for (Iterator i = begin(); i != end(); ++i) { |
| 268 i->~BaseElementType(); | 268 i->~BaseElementType(); |
| 269 } | 269 } |
| 270 } | 270 } |
| 271 | 271 |
| 272 template <typename BaseElementType> | 272 template <typename BaseElementType> |
| 273 void ListContainer<BaseElementType>::EraseAndInvalidateAllPointers( | 273 void ListContainer<BaseElementType>::EraseAndInvalidateAllPointers( |
| 274 typename ListContainer<BaseElementType>::Iterator position) { | 274 typename ListContainer<BaseElementType>::Iterator position) { |
| 275 BaseElementType* item = &*position; | 275 BaseElementType* item = *position; |
| 276 item->~BaseElementType(); | 276 item->~BaseElementType(); |
| 277 data_->Erase(position); | 277 data_->Erase(position); |
| 278 } | 278 } |
| 279 | 279 |
| 280 template <typename BaseElementType> | 280 template <typename BaseElementType> |
| 281 typename ListContainer<BaseElementType>::ConstReverseIterator | 281 typename ListContainer<BaseElementType>::ConstReverseIterator |
| 282 ListContainer<BaseElementType>::crbegin() const { | 282 ListContainer<BaseElementType>::crbegin() const { |
| 283 if (data_->IsEmpty()) | 283 if (data_->IsEmpty()) |
| 284 return ConstReverseIterator(data_.get(), 0, NULL, 0); | 284 return ConstReverseIterator(data_.get(), 0, NULL, 0); |
| 285 | 285 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 if (data_->IsEmpty()) | 369 if (data_->IsEmpty()) |
| 370 return Iterator(data_.get(), 0, NULL, size()); | 370 return Iterator(data_.get(), 0, NULL, size()); |
| 371 | 371 |
| 372 size_t last_id = data_->list_count() - 1; | 372 size_t last_id = data_->list_count() - 1; |
| 373 return Iterator(data_.get(), last_id, NULL, size()); | 373 return Iterator(data_.get(), last_id, NULL, size()); |
| 374 } | 374 } |
| 375 | 375 |
| 376 template <typename BaseElementType> | 376 template <typename BaseElementType> |
| 377 BaseElementType* ListContainer<BaseElementType>::front() { | 377 BaseElementType* ListContainer<BaseElementType>::front() { |
| 378 Iterator iter = begin(); | 378 Iterator iter = begin(); |
| 379 return &*iter; | 379 return *iter; |
| 380 } | 380 } |
| 381 | 381 |
| 382 template <typename BaseElementType> | 382 template <typename BaseElementType> |
| 383 BaseElementType* ListContainer<BaseElementType>::back() { | 383 BaseElementType* ListContainer<BaseElementType>::back() { |
| 384 ReverseIterator iter = rbegin(); | 384 ReverseIterator iter = rbegin(); |
| 385 return &*iter; | 385 return *iter; |
| 386 } | 386 } |
| 387 | 387 |
| 388 template <typename BaseElementType> | 388 template <typename BaseElementType> |
| 389 const BaseElementType* ListContainer<BaseElementType>::front() const { | 389 const BaseElementType* ListContainer<BaseElementType>::front() const { |
| 390 ConstIterator iter = begin(); | 390 ConstIterator iter = begin(); |
| 391 return &*iter; | 391 return *iter; |
| 392 } | 392 } |
| 393 | 393 |
| 394 template <typename BaseElementType> | 394 template <typename BaseElementType> |
| 395 const BaseElementType* ListContainer<BaseElementType>::back() const { | 395 const BaseElementType* ListContainer<BaseElementType>::back() const { |
| 396 ConstReverseIterator iter = rbegin(); | 396 ConstReverseIterator iter = rbegin(); |
| 397 return &*iter; | 397 return *iter; |
| 398 } | 398 } |
| 399 | 399 |
| 400 template <typename BaseElementType> | 400 template <typename BaseElementType> |
| 401 const BaseElementType* ListContainer<BaseElementType>::ElementAt( | 401 const BaseElementType* ListContainer<BaseElementType>::ElementAt( |
| 402 size_t index) const { | 402 size_t index) const { |
| 403 DCHECK_LT(index, size()); | 403 DCHECK_LT(index, size()); |
| 404 size_t original_index = index; | 404 size_t original_index = index; |
| 405 size_t list_index; | 405 size_t list_index; |
| 406 for (list_index = 0; list_index < data_->list_count(); ++list_index) { | 406 for (list_index = 0; list_index < data_->list_count(); ++list_index) { |
| 407 size_t current_size = data_->InnerListById(list_index)->size; | 407 size_t current_size = data_->InnerListById(list_index)->size; |
| 408 if (index < current_size) | 408 if (index < current_size) |
| 409 break; | 409 break; |
| 410 index -= current_size; | 410 index -= current_size; |
| 411 } | 411 } |
| 412 return &*ConstIterator(data_.get(), | 412 return *ConstIterator(data_.get(), |
| 413 list_index, | 413 list_index, |
| 414 data_->InnerListById(list_index)->ElementAt(index), | 414 data_->InnerListById(list_index)->ElementAt(index), |
| 415 original_index); | 415 original_index); |
| 416 } | 416 } |
| 417 | 417 |
| 418 template <typename BaseElementType> | 418 template <typename BaseElementType> |
| 419 BaseElementType* ListContainer<BaseElementType>::ElementAt(size_t index) { | 419 BaseElementType* ListContainer<BaseElementType>::ElementAt(size_t index) { |
| 420 DCHECK_LT(index, size()); | 420 DCHECK_LT(index, size()); |
| 421 size_t original_index = index; | 421 size_t original_index = index; |
| 422 size_t list_index; | 422 size_t list_index; |
| 423 for (list_index = 0; list_index < data_->list_count(); ++list_index) { | 423 for (list_index = 0; list_index < data_->list_count(); ++list_index) { |
| 424 size_t current_size = data_->InnerListById(list_index)->size; | 424 size_t current_size = data_->InnerListById(list_index)->size; |
| 425 if (index < current_size) | 425 if (index < current_size) |
| 426 break; | 426 break; |
| 427 index -= current_size; | 427 index -= current_size; |
| 428 } | 428 } |
| 429 return &*Iterator(data_.get(), | 429 return *Iterator(data_.get(), |
| 430 list_index, | 430 list_index, |
| 431 data_->InnerListById(list_index)->ElementAt(index), | 431 data_->InnerListById(list_index)->ElementAt(index), |
| 432 original_index); | 432 original_index); |
| 433 } | 433 } |
| 434 | 434 |
| 435 template <typename BaseElementType> | 435 template <typename BaseElementType> |
| 436 BaseElementType* ListContainer<BaseElementType>::Allocate( | 436 BaseElementType* ListContainer<BaseElementType>::Allocate( |
| 437 size_t size_of_actual_element_in_bytes) { | 437 size_t size_of_actual_element_in_bytes) { |
| 438 DCHECK_LE(size_of_actual_element_in_bytes, data_->element_size()); | 438 DCHECK_LE(size_of_actual_element_in_bytes, data_->element_size()); |
| 439 void* result = data_->Allocate(); | 439 void* result = data_->Allocate(); |
| 440 return static_cast<BaseElementType*>(result); | 440 return static_cast<BaseElementType*>(result); |
| 441 } | 441 } |
| 442 | 442 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 479 template <typename BaseElementType> | 479 template <typename BaseElementType> |
| 480 ListContainer<BaseElementType>::Iterator::~Iterator() { | 480 ListContainer<BaseElementType>::Iterator::~Iterator() { |
| 481 } | 481 } |
| 482 | 482 |
| 483 template <typename BaseElementType> | 483 template <typename BaseElementType> |
| 484 BaseElementType* ListContainer<BaseElementType>::Iterator::operator->() const { | 484 BaseElementType* ListContainer<BaseElementType>::Iterator::operator->() const { |
| 485 return reinterpret_cast<BaseElementType*>(this->item_iterator); | 485 return reinterpret_cast<BaseElementType*>(this->item_iterator); |
| 486 } | 486 } |
| 487 | 487 |
| 488 template <typename BaseElementType> | 488 template <typename BaseElementType> |
| 489 BaseElementType& ListContainer<BaseElementType>::Iterator::operator*() const { | 489 BaseElementType* ListContainer<BaseElementType>::Iterator::operator*() const { |
| 490 return *(reinterpret_cast<BaseElementType*>(this->item_iterator)); | 490 return reinterpret_cast<BaseElementType*>(this->item_iterator); |
| 491 } | 491 } |
| 492 | 492 |
| 493 template <typename BaseElementType> | 493 template <typename BaseElementType> |
| 494 typename ListContainer<BaseElementType>::Iterator | 494 typename ListContainer<BaseElementType>::Iterator |
| 495 ListContainer<BaseElementType>::Iterator:: | 495 ListContainer<BaseElementType>::Iterator:: |
| 496 operator++(int unused_post_increment) { | 496 operator++(int unused_post_increment) { |
| 497 Iterator tmp = *this; | 497 Iterator tmp = *this; |
| 498 operator++(); | 498 operator++(); |
| 499 return tmp; | 499 return tmp; |
| 500 } | 500 } |
| 501 | 501 |
| 502 template <typename BaseElementType> | 502 template <typename BaseElementType> |
| 503 typename ListContainer<BaseElementType>::Iterator | 503 typename ListContainer<BaseElementType>::Iterator& |
| 504 ListContainer<BaseElementType>::Iterator:: | 504 ListContainer<BaseElementType>::Iterator:: |
| 505 operator++() { | 505 operator++() { |
| 506 this->Increment(); | 506 this->Increment(); |
| 507 ++index_; | 507 ++index_; |
| 508 return *this; | 508 return *this; |
| 509 } | 509 } |
| 510 | 510 |
| 511 template <typename BaseElementType> | 511 template <typename BaseElementType> |
| 512 size_t ListContainer<BaseElementType>::Iterator::index() const { | 512 size_t ListContainer<BaseElementType>::Iterator::index() const { |
| 513 return index_; | 513 return index_; |
| 514 } | 514 } |
| 515 | 515 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 535 ListContainer<BaseElementType>::ConstIterator::~ConstIterator() { | 535 ListContainer<BaseElementType>::ConstIterator::~ConstIterator() { |
| 536 } | 536 } |
| 537 | 537 |
| 538 template <typename BaseElementType> | 538 template <typename BaseElementType> |
| 539 const BaseElementType* ListContainer<BaseElementType>::ConstIterator:: | 539 const BaseElementType* ListContainer<BaseElementType>::ConstIterator:: |
| 540 operator->() const { | 540 operator->() const { |
| 541 return reinterpret_cast<const BaseElementType*>(this->item_iterator); | 541 return reinterpret_cast<const BaseElementType*>(this->item_iterator); |
| 542 } | 542 } |
| 543 | 543 |
| 544 template <typename BaseElementType> | 544 template <typename BaseElementType> |
| 545 const BaseElementType& ListContainer<BaseElementType>::ConstIterator:: | 545 const BaseElementType* ListContainer<BaseElementType>::ConstIterator:: |
| 546 operator*() const { | 546 operator*() const { |
| 547 return *(reinterpret_cast<const BaseElementType*>(this->item_iterator)); | 547 return reinterpret_cast<const BaseElementType*>(this->item_iterator); |
| 548 } | 548 } |
| 549 | 549 |
| 550 template <typename BaseElementType> | 550 template <typename BaseElementType> |
| 551 typename ListContainer<BaseElementType>::ConstIterator | 551 typename ListContainer<BaseElementType>::ConstIterator |
| 552 ListContainer<BaseElementType>::ConstIterator:: | 552 ListContainer<BaseElementType>::ConstIterator:: |
| 553 operator++(int unused_post_increment) { | 553 operator++(int unused_post_increment) { |
| 554 ConstIterator tmp = *this; | 554 ConstIterator tmp = *this; |
| 555 operator++(); | 555 operator++(); |
| 556 return tmp; | 556 return tmp; |
| 557 } | 557 } |
| 558 | 558 |
| 559 template <typename BaseElementType> | 559 template <typename BaseElementType> |
| 560 typename ListContainer<BaseElementType>::ConstIterator | 560 typename ListContainer<BaseElementType>::ConstIterator& |
| 561 ListContainer<BaseElementType>::ConstIterator:: | 561 ListContainer<BaseElementType>::ConstIterator:: |
| 562 operator++() { | 562 operator++() { |
| 563 this->Increment(); | 563 this->Increment(); |
| 564 ++index_; | 564 ++index_; |
| 565 return *this; | 565 return *this; |
| 566 } | 566 } |
| 567 | 567 |
| 568 template <typename BaseElementType> | 568 template <typename BaseElementType> |
| 569 size_t ListContainer<BaseElementType>::ConstIterator::index() const { | 569 size_t ListContainer<BaseElementType>::ConstIterator::index() const { |
| 570 return index_; | 570 return index_; |
| 571 } | 571 } |
| 572 | 572 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 586 ListContainer<BaseElementType>::ReverseIterator::~ReverseIterator() { | 586 ListContainer<BaseElementType>::ReverseIterator::~ReverseIterator() { |
| 587 } | 587 } |
| 588 | 588 |
| 589 template <typename BaseElementType> | 589 template <typename BaseElementType> |
| 590 BaseElementType* ListContainer<BaseElementType>::ReverseIterator::operator->() | 590 BaseElementType* ListContainer<BaseElementType>::ReverseIterator::operator->() |
| 591 const { | 591 const { |
| 592 return reinterpret_cast<BaseElementType*>(this->item_iterator); | 592 return reinterpret_cast<BaseElementType*>(this->item_iterator); |
| 593 } | 593 } |
| 594 | 594 |
| 595 template <typename BaseElementType> | 595 template <typename BaseElementType> |
| 596 BaseElementType& ListContainer<BaseElementType>::ReverseIterator::operator*() | 596 BaseElementType* ListContainer<BaseElementType>::ReverseIterator::operator*() |
| 597 const { | 597 const { |
| 598 return *(reinterpret_cast<BaseElementType*>(this->item_iterator)); | 598 return reinterpret_cast<BaseElementType*>(this->item_iterator); |
| 599 } | 599 } |
| 600 | 600 |
| 601 template <typename BaseElementType> | 601 template <typename BaseElementType> |
| 602 typename ListContainer<BaseElementType>::ReverseIterator | 602 typename ListContainer<BaseElementType>::ReverseIterator |
| 603 ListContainer<BaseElementType>::ReverseIterator:: | 603 ListContainer<BaseElementType>::ReverseIterator:: |
| 604 operator++(int unused_post_increment) { | 604 operator++(int unused_post_increment) { |
| 605 ReverseIterator tmp = *this; | 605 ReverseIterator tmp = *this; |
| 606 operator++(); | 606 operator++(); |
| 607 return tmp; | 607 return tmp; |
| 608 } | 608 } |
| 609 | 609 |
| 610 template <typename BaseElementType> | 610 template <typename BaseElementType> |
| 611 typename ListContainer<BaseElementType>::ReverseIterator | 611 typename ListContainer<BaseElementType>::ReverseIterator& |
| 612 ListContainer<BaseElementType>::ReverseIterator:: | 612 ListContainer<BaseElementType>::ReverseIterator:: |
| 613 operator++() { | 613 operator++() { |
| 614 this->ReverseIncrement(); | 614 this->ReverseIncrement(); |
| 615 ++index_; | 615 ++index_; |
| 616 return *this; | 616 return *this; |
| 617 } | 617 } |
| 618 | 618 |
| 619 template <typename BaseElementType> | 619 template <typename BaseElementType> |
| 620 size_t ListContainer<BaseElementType>::ReverseIterator::index() const { | 620 size_t ListContainer<BaseElementType>::ReverseIterator::index() const { |
| 621 return index_; | 621 return index_; |
| 622 } | 622 } |
| 623 | 623 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 643 ListContainer<BaseElementType>::ConstReverseIterator::~ConstReverseIterator() { | 643 ListContainer<BaseElementType>::ConstReverseIterator::~ConstReverseIterator() { |
| 644 } | 644 } |
| 645 | 645 |
| 646 template <typename BaseElementType> | 646 template <typename BaseElementType> |
| 647 const BaseElementType* ListContainer<BaseElementType>::ConstReverseIterator:: | 647 const BaseElementType* ListContainer<BaseElementType>::ConstReverseIterator:: |
| 648 operator->() const { | 648 operator->() const { |
| 649 return reinterpret_cast<const BaseElementType*>(this->item_iterator); | 649 return reinterpret_cast<const BaseElementType*>(this->item_iterator); |
| 650 } | 650 } |
| 651 | 651 |
| 652 template <typename BaseElementType> | 652 template <typename BaseElementType> |
| 653 const BaseElementType& ListContainer<BaseElementType>::ConstReverseIterator:: | 653 const BaseElementType* ListContainer<BaseElementType>::ConstReverseIterator:: |
| 654 operator*() const { | 654 operator*() const { |
| 655 return *(reinterpret_cast<const BaseElementType*>(this->item_iterator)); | 655 return reinterpret_cast<const BaseElementType*>(this->item_iterator); |
| 656 } | 656 } |
| 657 | 657 |
| 658 template <typename BaseElementType> | 658 template <typename BaseElementType> |
| 659 typename ListContainer<BaseElementType>::ConstReverseIterator | 659 typename ListContainer<BaseElementType>::ConstReverseIterator |
| 660 ListContainer<BaseElementType>::ConstReverseIterator:: | 660 ListContainer<BaseElementType>::ConstReverseIterator:: |
| 661 operator++(int unused_post_increment) { | 661 operator++(int unused_post_increment) { |
| 662 ConstReverseIterator tmp = *this; | 662 ConstReverseIterator tmp = *this; |
| 663 operator++(); | 663 operator++(); |
| 664 return tmp; | 664 return tmp; |
| 665 } | 665 } |
| 666 | 666 |
| 667 template <typename BaseElementType> | 667 template <typename BaseElementType> |
| 668 typename ListContainer<BaseElementType>::ConstReverseIterator | 668 typename ListContainer<BaseElementType>::ConstReverseIterator& |
| 669 ListContainer<BaseElementType>::ConstReverseIterator:: | 669 ListContainer<BaseElementType>::ConstReverseIterator:: |
| 670 operator++() { | 670 operator++() { |
| 671 this->ReverseIncrement(); | 671 this->ReverseIncrement(); |
| 672 ++index_; | 672 ++index_; |
| 673 return *this; | 673 return *this; |
| 674 } | 674 } |
| 675 | 675 |
| 676 template <typename BaseElementType> | 676 template <typename BaseElementType> |
| 677 size_t ListContainer<BaseElementType>::ConstReverseIterator::index() const { | 677 size_t ListContainer<BaseElementType>::ConstReverseIterator::index() const { |
| 678 return index_; | 678 return index_; |
| 679 } | 679 } |
| 680 | 680 |
| 681 template class ListContainer<SharedQuadState>; | 681 template class ListContainer<SharedQuadState>; |
| 682 template class ListContainer<DrawQuad>; | 682 template class ListContainer<DrawQuad>; |
| 683 | 683 |
| 684 } // namespace cc | 684 } // namespace cc |
| OLD | NEW |