Chromium Code Reviews| Index: Source/platform/graphics/ListContainer.h |
| diff --git a/Source/platform/graphics/ListContainer.h b/Source/platform/graphics/ListContainer.h |
| index 6d5f22ddc4772866346cdad32741666e34cbecd2..42098073ba44cfaf891079bb431dd3a9cf43b6bc 100644 |
| --- a/Source/platform/graphics/ListContainer.h |
| +++ b/Source/platform/graphics/ListContainer.h |
| @@ -234,11 +234,39 @@ public: |
| BaseElementType* elementAt(size_t index) |
| { |
| - return *Iterator(iteratorAt(index)); |
| + return *iteratorAt(index); |
|
danakj
2015/06/29 17:43:51
Is this a change we could/should make in cc/ too?
pdr.
2015/06/29 22:20:03
Done in https://codereview.chromium.org/1219753003
|
| } |
| + |
| const BaseElementType* elementAt(size_t index) const |
| { |
| - return *ConstIterator(iteratorAt(index)); |
| + return *iteratorAt(index); |
| + } |
| + |
| + Iterator iteratorAt(size_t index) |
| + { |
| + return Iterator(ListContainerBase::iteratorAt(index)); |
| + } |
| + |
| + ConstIterator iteratorAt(size_t index) const |
| + { |
| + return ConstIterator(ListContainerBase::iteratorAt(index)); |
| + } |
| + |
| + BaseElementType& operator[](size_t index) |
|
danakj
2015/06/29 17:43:51
I recommend not adding these. It looks like it sho
pdr.
2015/06/29 22:20:03
I added these for similar reasons. These are heavi
danakj
2015/06/29 22:29:47
ah OK. iteratorat sounds OK to me. operator[] less
|
| + { |
| + return *elementAt(index); |
| + } |
| + |
| + const BaseElementType& operator[](size_t index) const |
| + { |
| + return *elementAt(index); |
| + } |
| + |
| + // Allocate a new, uninitialized DerivedElementType. Use with caution! |
|
danakj
2015/06/29 17:43:51
Why do we need this?
pdr.
2015/06/29 22:20:03
We no longer do because I've made allocateAndConst
|
| + template <typename DerivedElementType> |
| + DerivedElementType* allocateWithoutConstruction() |
| + { |
| + return static_cast<DerivedElementType*>(allocate(sizeof(DerivedElementType))); |
| } |
| // Take in derived element type and construct it at location generated by Allocate(). |
| @@ -273,15 +301,17 @@ public: |
| // Appends a new item without copying. The original item will not be |
| // destructed and will be replaced with a new DerivedElementType. The |
| // DerivedElementType does not have to match the moved type as a full block |
| - // of memory will be moved (up to maxSizeForDerivedClass()). |
| + // of memory will be moved (up to maxSizeForDerivedClass()). A pointer |
| + // to the moved element is returned. |
| template <typename DerivedElementType> |
| - void appendByMoving(DerivedElementType* item) |
| + DerivedElementType* appendByMoving(DerivedElementType* item) |
|
danakj
2015/06/29 17:43:51
Can we do this to the cc/ class too?
pdr.
2015/06/29 22:20:03
Done in https://codereview.chromium.org/1219753003
|
| { |
| size_t maxSize = maxSizeForDerivedClass(); |
| void* newItem = allocate(maxSize); |
| memcpy(newItem, static_cast<void*>(item), maxSize); |
| // Construct a new element in-place so it can be destructed safely. |
| new (item) DerivedElementType; |
| + return static_cast<DerivedElementType*>(newItem); |
| } |
| using ListContainerBase::size; |
| @@ -326,6 +356,7 @@ public: |
| friend Iterator ListContainer<BaseElementType>::begin(); |
| friend Iterator ListContainer<BaseElementType>::end(); |
| friend BaseElementType* ListContainer<BaseElementType>::elementAt(size_t index); |
| + friend Iterator ListContainer<BaseElementType>::iteratorAt(size_t index); |
| }; |
| class ConstIterator : public ListContainerBase::ConstIterator { |
| @@ -364,6 +395,7 @@ public: |
| friend ConstIterator ListContainer<BaseElementType>::cbegin() const; |
| friend ConstIterator ListContainer<BaseElementType>::cend() const; |
| friend const BaseElementType* ListContainer<BaseElementType>::elementAt(size_t index) const; |
| + friend ConstIterator ListContainer<BaseElementType>::iteratorAt(size_t index) const; |
| }; |
| class ReverseIterator : public ListContainerBase::ReverseIterator { |