Index: cc/quads/list_container.cc |
diff --git a/cc/quads/list_container.cc b/cc/quads/list_container.cc |
index b1501c0de862d50c4164849daa18a1709fcf32b7..fd4e2f4887aa43ef4a04808a2a5040e5a82a565b 100644 |
--- a/cc/quads/list_container.cc |
+++ b/cc/quads/list_container.cc |
@@ -87,8 +87,8 @@ class ListContainer<BaseElementType>::ListContainerCharAllocator { |
size_(0), |
list_count_(0), |
last_list_(NULL) { |
- DCHECK_NE(0u, element_count); |
- AllocateNewList(element_count); |
+ AllocateNewList(element_count > 0 ? element_count |
+ : kDefaultNumElementTypesToReserve); |
} |
~ListContainerCharAllocator() {} |
@@ -281,72 +281,72 @@ template <typename BaseElementType> |
typename ListContainer<BaseElementType>::ConstReverseIterator |
ListContainer<BaseElementType>::rbegin() const { |
if (data_->IsEmpty()) |
- return ConstReverseIterator(data_.get(), 0, NULL); |
+ return ConstReverseIterator(data_.get(), 0, NULL, 0); |
size_t last_id = data_->list_count() - 1; |
return ConstReverseIterator( |
- data_.get(), last_id, data_->InnerListById(last_id)->LastElement()); |
+ data_.get(), last_id, data_->InnerListById(last_id)->LastElement(), 0); |
} |
template <typename BaseElementType> |
typename ListContainer<BaseElementType>::ConstReverseIterator |
ListContainer<BaseElementType>::rend() const { |
- return ConstReverseIterator(data_.get(), 0, NULL); |
+ return ConstReverseIterator(data_.get(), 0, NULL, size()); |
} |
template <typename BaseElementType> |
typename ListContainer<BaseElementType>::ReverseIterator |
ListContainer<BaseElementType>::rbegin() { |
if (data_->IsEmpty()) |
- return ReverseIterator(data_.get(), 0, NULL); |
+ return ReverseIterator(data_.get(), 0, NULL, 0); |
size_t last_id = data_->list_count() - 1; |
return ReverseIterator( |
- data_.get(), last_id, data_->InnerListById(last_id)->LastElement()); |
+ data_.get(), last_id, data_->InnerListById(last_id)->LastElement(), 0); |
} |
template <typename BaseElementType> |
typename ListContainer<BaseElementType>::ReverseIterator |
ListContainer<BaseElementType>::rend() { |
- return ReverseIterator(data_.get(), 0, NULL); |
+ return ReverseIterator(data_.get(), 0, NULL, size()); |
} |
template <typename BaseElementType> |
typename ListContainer<BaseElementType>::ConstIterator |
ListContainer<BaseElementType>::begin() const { |
if (data_->IsEmpty()) |
- return ConstIterator(data_.get(), 0, NULL); |
+ return ConstIterator(data_.get(), 0, NULL, 0); |
- return ConstIterator(data_.get(), 0, data_->InnerListById(0)->Begin()); |
+ return ConstIterator(data_.get(), 0, data_->InnerListById(0)->Begin(), 0); |
} |
template <typename BaseElementType> |
typename ListContainer<BaseElementType>::ConstIterator |
ListContainer<BaseElementType>::end() const { |
if (data_->IsEmpty()) |
- return ConstIterator(data_.get(), 0, NULL); |
+ return ConstIterator(data_.get(), 0, NULL, size()); |
size_t last_id = data_->list_count() - 1; |
- return ConstIterator(data_.get(), last_id, NULL); |
+ return ConstIterator(data_.get(), last_id, NULL, size()); |
} |
template <typename BaseElementType> |
typename ListContainer<BaseElementType>::Iterator |
ListContainer<BaseElementType>::begin() { |
if (data_->IsEmpty()) |
- return Iterator(data_.get(), 0, NULL); |
+ return Iterator(data_.get(), 0, NULL, 0); |
- return Iterator(data_.get(), 0, data_->InnerListById(0)->Begin()); |
+ return Iterator(data_.get(), 0, data_->InnerListById(0)->Begin(), 0); |
} |
template <typename BaseElementType> |
typename ListContainer<BaseElementType>::Iterator |
ListContainer<BaseElementType>::end() { |
if (data_->IsEmpty()) |
- return Iterator(data_.get(), 0, NULL); |
+ return Iterator(data_.get(), 0, NULL, size()); |
size_t last_id = data_->list_count() - 1; |
- return Iterator(data_.get(), last_id, NULL); |
+ return Iterator(data_.get(), last_id, NULL, size()); |
} |
template <typename BaseElementType> |
@@ -377,6 +377,7 @@ 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; |
@@ -386,12 +387,14 @@ const BaseElementType* ListContainer<BaseElementType>::ElementAt( |
} |
return &*ConstIterator(data_.get(), |
list_index, |
- data_->InnerListById(list_index)->ElementAt(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; |
@@ -401,7 +404,8 @@ BaseElementType* ListContainer<BaseElementType>::ElementAt(size_t index) { |
} |
return &*Iterator(data_.get(), |
list_index, |
- data_->InnerListById(list_index)->ElementAt(index)); |
+ data_->InnerListById(list_index)->ElementAt(index), |
+ original_index); |
} |
template <typename BaseElementType> |
@@ -442,8 +446,10 @@ template <typename BaseElementType> |
ListContainer<BaseElementType>::Iterator::Iterator( |
ListContainerCharAllocator* container, |
size_t vector_ind, |
- char* item_iter) |
- : PositionInListContainerCharAllocator(container, vector_ind, item_iter) { |
+ char* item_iter, |
+ size_t index) |
+ : PositionInListContainerCharAllocator(container, vector_ind, item_iter), |
+ index_(index) { |
} |
template <typename BaseElementType> |
@@ -474,23 +480,31 @@ 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) { |
+ : PositionInListContainerCharAllocator(other), index_(other.index()) { |
} |
template <typename BaseElementType> |
ListContainer<BaseElementType>::ConstIterator::ConstIterator( |
ListContainerCharAllocator* container, |
size_t vector_ind, |
- char* item_iter) |
- : PositionInListContainerCharAllocator(container, vector_ind, item_iter) { |
+ char* item_iter, |
+ size_t index) |
+ : PositionInListContainerCharAllocator(container, vector_ind, item_iter), |
+ index_(index) { |
} |
template <typename BaseElementType> |
@@ -523,17 +537,25 @@ 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) |
- : PositionInListContainerCharAllocator(container, vector_ind, item_iter) { |
+ char* item_iter, |
+ size_t index) |
+ : PositionInListContainerCharAllocator(container, vector_ind, item_iter), |
+ index_(index) { |
} |
template <typename BaseElementType> |
@@ -566,23 +588,31 @@ 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) { |
+ : PositionInListContainerCharAllocator(other), index_(other.index()) { |
} |
template <typename BaseElementType> |
ListContainer<BaseElementType>::ConstReverseIterator::ConstReverseIterator( |
ListContainerCharAllocator* container, |
size_t vector_ind, |
- char* item_iter) |
- : PositionInListContainerCharAllocator(container, vector_ind, item_iter) { |
+ char* item_iter, |
+ size_t index) |
+ : PositionInListContainerCharAllocator(container, vector_ind, item_iter), |
+ index_(index) { |
} |
template <typename BaseElementType> |
@@ -615,9 +645,15 @@ 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>; |