| Index: cc/quads/list_container.cc
|
| diff --git a/cc/quads/list_container.cc b/cc/quads/list_container.cc
|
| deleted file mode 100644
|
| index 4edcbdfab560a86af305e7946f53852ede0a43ef..0000000000000000000000000000000000000000
|
| --- a/cc/quads/list_container.cc
|
| +++ /dev/null
|
| @@ -1,720 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "cc/quads/list_container.h"
|
| -
|
| -#include <algorithm>
|
| -#include <vector>
|
| -
|
| -#include "cc/base/scoped_ptr_vector.h"
|
| -#include "cc/playback/display_item.h"
|
| -#include "cc/quads/draw_quad.h"
|
| -#include "cc/quads/shared_quad_state.h"
|
| -
|
| -namespace {
|
| -const size_t kDefaultNumElementTypesToReserve = 32;
|
| -} // namespace
|
| -
|
| -namespace cc {
|
| -
|
| -// ListContainerCharAllocator
|
| -////////////////////////////////////////////////////
|
| -// This class deals only with char* and void*. It does allocation and passing
|
| -// out raw pointers, as well as memory deallocation when being destroyed.
|
| -template <typename BaseElementType>
|
| -class ListContainer<BaseElementType>::ListContainerCharAllocator {
|
| - public:
|
| - // ListContainerCharAllocator::InnerList
|
| - /////////////////////////////////////////////
|
| - // This class holds the raw memory chunk, as well as information about its
|
| - // size and availability.
|
| - struct InnerList {
|
| - scoped_ptr<char[]> data;
|
| - // The number of elements in total the memory can hold. The difference
|
| - // between capacity and size is the how many more elements this list can
|
| - // hold.
|
| - size_t capacity;
|
| - // The number of elements have been put into this list.
|
| - size_t size;
|
| - // The size of each element is in bytes. This is used to move from between
|
| - // elements' memory locations.
|
| - size_t step;
|
| -
|
| - InnerList() : capacity(0), size(0), step(0) {}
|
| -
|
| - void Erase(char* position) {
|
| - // Confident that destructor is called by caller of this function. Since
|
| - // ListContainerCharAllocator does not handle construction after
|
| - // allocation, it doesn't handle desctrution before deallocation.
|
| - DCHECK_LE(position, LastElement());
|
| - DCHECK_GE(position, Begin());
|
| - char* start = position + step;
|
| - std::copy(start, End(), position);
|
| -
|
| - --size;
|
| - // Decrease capacity to avoid creating not full not last InnerList.
|
| - --capacity;
|
| - }
|
| -
|
| - bool IsFull() { return capacity == size; }
|
| - size_t NumElementsAvailable() const { return capacity - size; }
|
| -
|
| - void* AddElement() {
|
| - DCHECK_LT(size, capacity);
|
| - ++size;
|
| - return LastElement();
|
| - }
|
| -
|
| - char* Begin() const { return data.get(); }
|
| - char* End() const { return data.get() + size * step; }
|
| - char* LastElement() const { return data.get() + (size - 1) * step; }
|
| - char* ElementAt(size_t index) const { return data.get() + index * step; }
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(InnerList);
|
| - };
|
| -
|
| - explicit ListContainerCharAllocator(size_t element_size)
|
| - : element_size_(element_size),
|
| - size_(0),
|
| - list_count_(0),
|
| - last_list_(NULL) {
|
| - AllocateNewList(kDefaultNumElementTypesToReserve);
|
| - }
|
| -
|
| - ListContainerCharAllocator(size_t element_size, size_t element_count)
|
| - : element_size_(element_size),
|
| - size_(0),
|
| - list_count_(0),
|
| - last_list_(NULL) {
|
| - AllocateNewList(element_count > 0 ? element_count
|
| - : kDefaultNumElementTypesToReserve);
|
| - }
|
| -
|
| - ~ListContainerCharAllocator() {}
|
| -
|
| - void* Allocate() {
|
| - if (last_list_->IsFull())
|
| - AllocateNewList(last_list_->capacity * 2);
|
| -
|
| - ++size_;
|
| - return last_list_->AddElement();
|
| - }
|
| -
|
| - size_t element_size() const { return element_size_; }
|
| - size_t list_count() const { return list_count_; }
|
| - size_t size() const { return size_; }
|
| - bool IsEmpty() const { return size() == 0; }
|
| -
|
| - size_t Capacity() const {
|
| - size_t capacity_sum = 0;
|
| - for (typename ScopedPtrVector<InnerList>::const_iterator iter =
|
| - storage_.begin();
|
| - iter != storage_.end();
|
| - ++iter) {
|
| - capacity_sum += (*iter)->capacity;
|
| - }
|
| - return capacity_sum;
|
| - }
|
| -
|
| - void Clear() {
|
| - size_t initial_allocation_size = storage_.front()->capacity;
|
| - storage_.clear();
|
| - list_count_ = 0;
|
| - last_list_ = NULL;
|
| - size_ = 0;
|
| - AllocateNewList(initial_allocation_size);
|
| - }
|
| -
|
| - void Erase(PositionInListContainerCharAllocator position) {
|
| - DCHECK_EQ(this, position.ptr_to_container);
|
| - storage_[position.vector_index]->Erase(position.item_iterator);
|
| - // TODO(weiliangc): Free the InnerList if it is empty.
|
| - --size_;
|
| - }
|
| -
|
| - InnerList* InnerListById(size_t id) const {
|
| - DCHECK_LT(id, list_count_);
|
| - return storage_[id];
|
| - }
|
| -
|
| - size_t FirstInnerListId() const {
|
| - // |size_| > 0 means that at least one vector in |storage_| will be
|
| - // non-empty.
|
| - DCHECK_GT(size_, 0u);
|
| - size_t id = 0;
|
| - while (storage_[id]->size == 0)
|
| - ++id;
|
| - return id;
|
| - }
|
| -
|
| - size_t LastInnerListId() const {
|
| - // |size_| > 0 means that at least one vector in |storage_| will be
|
| - // non-empty.
|
| - DCHECK_GT(size_, 0u);
|
| - size_t id = list_count_ - 1;
|
| - while (storage_[id]->size == 0)
|
| - --id;
|
| - return id;
|
| - }
|
| -
|
| - void AllocateNewList(size_t list_size) {
|
| - ++list_count_;
|
| - scoped_ptr<InnerList> new_list(new InnerList);
|
| - storage_.push_back(new_list.Pass());
|
| - last_list_ = storage_.back();
|
| - InnerList* list = last_list_;
|
| - list->capacity = list_size;
|
| - list->size = 0;
|
| - list->step = element_size_;
|
| - list->data.reset(new char[list->capacity * list->step]);
|
| - }
|
| -
|
| - size_t NumAvailableElementsInLastList() const {
|
| - return last_list_->NumElementsAvailable();
|
| - }
|
| -
|
| - private:
|
| - ScopedPtrVector<InnerList> storage_;
|
| - const size_t element_size_;
|
| - size_t size_;
|
| - size_t list_count_;
|
| - InnerList* last_list_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ListContainerCharAllocator);
|
| -};
|
| -
|
| -// PositionInListContainerCharAllocator
|
| -//////////////////////////////////////////////////////
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::PositionInListContainerCharAllocator::
|
| - PositionInListContainerCharAllocator(const typename ListContainer<
|
| - BaseElementType>::PositionInListContainerCharAllocator& other)
|
| - : ptr_to_container(other.ptr_to_container),
|
| - vector_index(other.vector_index),
|
| - item_iterator(other.item_iterator) {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::PositionInListContainerCharAllocator::
|
| - PositionInListContainerCharAllocator(
|
| - typename ListContainer<BaseElementType>::ListContainerCharAllocator*
|
| - container,
|
| - size_t vector_ind,
|
| - char* item_iter)
|
| - : ptr_to_container(container),
|
| - vector_index(vector_ind),
|
| - item_iterator(item_iter) {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -bool ListContainer<BaseElementType>::PositionInListContainerCharAllocator::
|
| -operator==(const typename ListContainer<
|
| - BaseElementType>::PositionInListContainerCharAllocator& other) const {
|
| - DCHECK_EQ(ptr_to_container, other.ptr_to_container);
|
| - return vector_index == other.vector_index &&
|
| - item_iterator == other.item_iterator;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -bool ListContainer<BaseElementType>::PositionInListContainerCharAllocator::
|
| -operator!=(const typename ListContainer<
|
| - BaseElementType>::PositionInListContainerCharAllocator& other) const {
|
| - return !(*this == other);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::PositionInListContainerCharAllocator
|
| -ListContainer<
|
| - BaseElementType>::PositionInListContainerCharAllocator::Increment() {
|
| - typename ListContainerCharAllocator::InnerList* list =
|
| - ptr_to_container->InnerListById(vector_index);
|
| - if (item_iterator == list->LastElement()) {
|
| - ++vector_index;
|
| - while (vector_index < ptr_to_container->list_count()) {
|
| - if (ptr_to_container->InnerListById(vector_index)->size != 0)
|
| - break;
|
| - ++vector_index;
|
| - }
|
| - if (vector_index < ptr_to_container->list_count())
|
| - item_iterator = ptr_to_container->InnerListById(vector_index)->Begin();
|
| - else
|
| - item_iterator = NULL;
|
| - } else {
|
| - item_iterator += list->step;
|
| - }
|
| - return *this;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::PositionInListContainerCharAllocator
|
| -ListContainer<
|
| - BaseElementType>::PositionInListContainerCharAllocator::ReverseIncrement() {
|
| - typename ListContainerCharAllocator::InnerList* list =
|
| - ptr_to_container->InnerListById(vector_index);
|
| - if (item_iterator == list->Begin()) {
|
| - --vector_index;
|
| - // Since |vector_index| is unsigned, we compare < list_count() instead of
|
| - // comparing >= 0, as the variable will wrap around when it goes out of
|
| - // range (below 0).
|
| - while (vector_index < ptr_to_container->list_count()) {
|
| - if (ptr_to_container->InnerListById(vector_index)->size != 0)
|
| - break;
|
| - --vector_index;
|
| - }
|
| - if (vector_index < ptr_to_container->list_count()) {
|
| - item_iterator =
|
| - ptr_to_container->InnerListById(vector_index)->LastElement();
|
| - } else {
|
| - item_iterator = NULL;
|
| - }
|
| - } else {
|
| - item_iterator -= list->step;
|
| - }
|
| - return *this;
|
| -}
|
| -
|
| -// ListContainer
|
| -////////////////////////////////////////////
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::ListContainer(size_t max_size_for_derived_class)
|
| - : data_(new ListContainerCharAllocator(max_size_for_derived_class)) {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::ListContainer(
|
| - size_t max_size_for_derived_class,
|
| - size_t num_of_elements_to_reserve_for)
|
| - : data_(new ListContainerCharAllocator(max_size_for_derived_class,
|
| - num_of_elements_to_reserve_for)) {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::ListContainer()
|
| - : data_(new ListContainerCharAllocator(sizeof(BaseElementType))) {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::~ListContainer() {
|
| - for (Iterator i = begin(); i != end(); ++i) {
|
| - i->~BaseElementType();
|
| - }
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -void ListContainer<BaseElementType>::EraseAndInvalidateAllPointers(
|
| - typename ListContainer<BaseElementType>::Iterator position) {
|
| - BaseElementType* item = *position;
|
| - item->~BaseElementType();
|
| - data_->Erase(position);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstReverseIterator
|
| -ListContainer<BaseElementType>::crbegin() const {
|
| - if (data_->IsEmpty())
|
| - return crend();
|
| -
|
| - size_t id = data_->LastInnerListId();
|
| - return ConstReverseIterator(data_.get(), id,
|
| - data_->InnerListById(id)->LastElement(), 0);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstReverseIterator
|
| -ListContainer<BaseElementType>::crend() const {
|
| - return ConstReverseIterator(data_.get(), static_cast<size_t>(-1), NULL,
|
| - size());
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstReverseIterator
|
| -ListContainer<BaseElementType>::rbegin() const {
|
| - return crbegin();
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstReverseIterator
|
| -ListContainer<BaseElementType>::rend() const {
|
| - return crend();
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ReverseIterator
|
| -ListContainer<BaseElementType>::rbegin() {
|
| - if (data_->IsEmpty())
|
| - return rend();
|
| -
|
| - size_t id = data_->LastInnerListId();
|
| - return ReverseIterator(data_.get(), id,
|
| - data_->InnerListById(id)->LastElement(), 0);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ReverseIterator
|
| -ListContainer<BaseElementType>::rend() {
|
| - return ReverseIterator(data_.get(), static_cast<size_t>(-1), NULL, size());
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstIterator
|
| -ListContainer<BaseElementType>::cbegin() const {
|
| - if (data_->IsEmpty())
|
| - return cend();
|
| -
|
| - size_t id = data_->FirstInnerListId();
|
| - return ConstIterator(data_.get(), id, data_->InnerListById(id)->Begin(), 0);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstIterator
|
| -ListContainer<BaseElementType>::cend() const {
|
| - if (data_->IsEmpty())
|
| - return ConstIterator(data_.get(), 0, NULL, size());
|
| -
|
| - size_t id = data_->list_count();
|
| - return ConstIterator(data_.get(), id, NULL, size());
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstIterator
|
| -ListContainer<BaseElementType>::begin() const {
|
| - return cbegin();
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstIterator
|
| -ListContainer<BaseElementType>::end() const {
|
| - return cend();
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::Iterator
|
| -ListContainer<BaseElementType>::begin() {
|
| - if (data_->IsEmpty())
|
| - return end();
|
| -
|
| - size_t id = data_->FirstInnerListId();
|
| - return Iterator(data_.get(), id, data_->InnerListById(id)->Begin(), 0);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::Iterator
|
| -ListContainer<BaseElementType>::end() {
|
| - if (data_->IsEmpty())
|
| - return Iterator(data_.get(), 0, NULL, size());
|
| -
|
| - size_t id = data_->list_count();
|
| - return Iterator(data_.get(), id, NULL, size());
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -BaseElementType* ListContainer<BaseElementType>::front() {
|
| - Iterator iter = begin();
|
| - return *iter;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -BaseElementType* ListContainer<BaseElementType>::back() {
|
| - ReverseIterator iter = rbegin();
|
| - return *iter;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -const BaseElementType* ListContainer<BaseElementType>::front() const {
|
| - ConstIterator iter = begin();
|
| - return *iter;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -const BaseElementType* ListContainer<BaseElementType>::back() const {
|
| - ConstReverseIterator iter = rbegin();
|
| - return *iter;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -const BaseElementType* ListContainer<BaseElementType>::ElementAt(
|
| - size_t index) const {
|
| - DCHECK_LT(index, size());
|
| - size_t original_index = index;
|
| - size_t list_index;
|
| - for (list_index = 0; list_index < data_->list_count(); ++list_index) {
|
| - size_t current_size = data_->InnerListById(list_index)->size;
|
| - if (index < current_size)
|
| - break;
|
| - index -= current_size;
|
| - }
|
| - return *ConstIterator(data_.get(),
|
| - list_index,
|
| - data_->InnerListById(list_index)->ElementAt(index),
|
| - original_index);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -BaseElementType* ListContainer<BaseElementType>::ElementAt(size_t index) {
|
| - DCHECK_LT(index, size());
|
| - size_t original_index = index;
|
| - size_t list_index;
|
| - for (list_index = 0; list_index < data_->list_count(); ++list_index) {
|
| - size_t current_size = data_->InnerListById(list_index)->size;
|
| - if (index < current_size)
|
| - break;
|
| - index -= current_size;
|
| - }
|
| - return *Iterator(data_.get(),
|
| - list_index,
|
| - data_->InnerListById(list_index)->ElementAt(index),
|
| - original_index);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -void* ListContainer<BaseElementType>::Allocate(
|
| - size_t size_of_actual_element_in_bytes) {
|
| - DCHECK_LE(size_of_actual_element_in_bytes, data_->element_size());
|
| - return data_->Allocate();
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -size_t ListContainer<BaseElementType>::size() const {
|
| - return data_->size();
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -bool ListContainer<BaseElementType>::empty() const {
|
| - return data_->IsEmpty();
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -void ListContainer<BaseElementType>::clear() {
|
| - for (Iterator i = begin(); i != end(); ++i) {
|
| - i->~BaseElementType();
|
| - }
|
| - data_->Clear();
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -size_t ListContainer<
|
| - BaseElementType>::AvailableSizeWithoutAnotherAllocationForTesting() const {
|
| - return data_->NumAvailableElementsInLastList();
|
| -}
|
| -
|
| -// ListContainer::Iterator
|
| -/////////////////////////////////////////////////
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::Iterator::Iterator(
|
| - ListContainerCharAllocator* container,
|
| - size_t vector_ind,
|
| - char* item_iter,
|
| - size_t index)
|
| - : PositionInListContainerCharAllocator(container, vector_ind, item_iter),
|
| - index_(index) {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::Iterator::~Iterator() {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -BaseElementType* ListContainer<BaseElementType>::Iterator::operator->() const {
|
| - return reinterpret_cast<BaseElementType*>(this->item_iterator);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -BaseElementType* ListContainer<BaseElementType>::Iterator::operator*() const {
|
| - return reinterpret_cast<BaseElementType*>(this->item_iterator);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::Iterator
|
| -ListContainer<BaseElementType>::Iterator::
|
| -operator++(int unused_post_increment) {
|
| - Iterator tmp = *this;
|
| - operator++();
|
| - return tmp;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::Iterator&
|
| - ListContainer<BaseElementType>::Iterator::
|
| - operator++() {
|
| - this->Increment();
|
| - ++index_;
|
| - return *this;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -size_t ListContainer<BaseElementType>::Iterator::index() const {
|
| - return index_;
|
| -}
|
| -
|
| -// ListContainer::ConstIterator
|
| -/////////////////////////////////////////////////
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::ConstIterator::ConstIterator(
|
| - const typename ListContainer<BaseElementType>::Iterator& other)
|
| - : PositionInListContainerCharAllocator(other), index_(other.index()) {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::ConstIterator::ConstIterator(
|
| - ListContainerCharAllocator* container,
|
| - size_t vector_ind,
|
| - char* item_iter,
|
| - size_t index)
|
| - : PositionInListContainerCharAllocator(container, vector_ind, item_iter),
|
| - index_(index) {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::ConstIterator::~ConstIterator() {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -const BaseElementType* ListContainer<BaseElementType>::ConstIterator::
|
| -operator->() const {
|
| - return reinterpret_cast<const BaseElementType*>(this->item_iterator);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -const BaseElementType* ListContainer<BaseElementType>::ConstIterator::
|
| -operator*() const {
|
| - return reinterpret_cast<const BaseElementType*>(this->item_iterator);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstIterator
|
| -ListContainer<BaseElementType>::ConstIterator::
|
| -operator++(int unused_post_increment) {
|
| - ConstIterator tmp = *this;
|
| - operator++();
|
| - return tmp;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstIterator&
|
| - ListContainer<BaseElementType>::ConstIterator::
|
| - operator++() {
|
| - this->Increment();
|
| - ++index_;
|
| - return *this;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -size_t ListContainer<BaseElementType>::ConstIterator::index() const {
|
| - return index_;
|
| -}
|
| -
|
| -// ListContainer::ReverseIterator
|
| -/////////////////////////////////////////////////
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::ReverseIterator::ReverseIterator(
|
| - ListContainerCharAllocator* container,
|
| - size_t vector_ind,
|
| - char* item_iter,
|
| - size_t index)
|
| - : PositionInListContainerCharAllocator(container, vector_ind, item_iter),
|
| - index_(index) {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::ReverseIterator::~ReverseIterator() {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -BaseElementType* ListContainer<BaseElementType>::ReverseIterator::operator->()
|
| - const {
|
| - return reinterpret_cast<BaseElementType*>(this->item_iterator);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -BaseElementType* ListContainer<BaseElementType>::ReverseIterator::operator*()
|
| - const {
|
| - return reinterpret_cast<BaseElementType*>(this->item_iterator);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ReverseIterator
|
| -ListContainer<BaseElementType>::ReverseIterator::
|
| -operator++(int unused_post_increment) {
|
| - ReverseIterator tmp = *this;
|
| - operator++();
|
| - return tmp;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ReverseIterator&
|
| - ListContainer<BaseElementType>::ReverseIterator::
|
| - operator++() {
|
| - this->ReverseIncrement();
|
| - ++index_;
|
| - return *this;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -size_t ListContainer<BaseElementType>::ReverseIterator::index() const {
|
| - return index_;
|
| -}
|
| -
|
| -// ListContainer::ConstReverseIterator
|
| -/////////////////////////////////////////////////
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::ConstReverseIterator::ConstReverseIterator(
|
| - const typename ListContainer<BaseElementType>::ReverseIterator& other)
|
| - : PositionInListContainerCharAllocator(other), index_(other.index()) {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::ConstReverseIterator::ConstReverseIterator(
|
| - ListContainerCharAllocator* container,
|
| - size_t vector_ind,
|
| - char* item_iter,
|
| - size_t index)
|
| - : PositionInListContainerCharAllocator(container, vector_ind, item_iter),
|
| - index_(index) {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -ListContainer<BaseElementType>::ConstReverseIterator::~ConstReverseIterator() {
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -const BaseElementType* ListContainer<BaseElementType>::ConstReverseIterator::
|
| -operator->() const {
|
| - return reinterpret_cast<const BaseElementType*>(this->item_iterator);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -const BaseElementType* ListContainer<BaseElementType>::ConstReverseIterator::
|
| -operator*() const {
|
| - return reinterpret_cast<const BaseElementType*>(this->item_iterator);
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstReverseIterator
|
| -ListContainer<BaseElementType>::ConstReverseIterator::
|
| -operator++(int unused_post_increment) {
|
| - ConstReverseIterator tmp = *this;
|
| - operator++();
|
| - return tmp;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -typename ListContainer<BaseElementType>::ConstReverseIterator&
|
| - ListContainer<BaseElementType>::ConstReverseIterator::
|
| - operator++() {
|
| - this->ReverseIncrement();
|
| - ++index_;
|
| - return *this;
|
| -}
|
| -
|
| -template <typename BaseElementType>
|
| -size_t ListContainer<BaseElementType>::ConstReverseIterator::index() const {
|
| - return index_;
|
| -}
|
| -
|
| -template class ListContainer<SharedQuadState>;
|
| -template class ListContainer<DrawQuad>;
|
| -template class ListContainer<DisplayItem>;
|
| -
|
| -} // namespace cc
|
|
|