| Index: Source/platform/graphics/ListContainer.h
|
| diff --git a/Source/platform/graphics/ListContainer.h b/Source/platform/graphics/ListContainer.h
|
| index 6d5f22ddc4772866346cdad32741666e34cbecd2..9da1ebf225c07b687da75d7e27789f607e3155a3 100644
|
| --- a/Source/platform/graphics/ListContainer.h
|
| +++ b/Source/platform/graphics/ListContainer.h
|
| @@ -9,6 +9,7 @@
|
| #include "wtf/Forward.h"
|
| #include "wtf/Noncopyable.h"
|
| #include "wtf/OwnPtr.h"
|
| +#include "wtf/Utility.h"
|
| #include "wtf/Vector.h"
|
|
|
| #include <iterator>
|
| @@ -234,18 +235,29 @@ public:
|
|
|
| BaseElementType* elementAt(size_t index)
|
| {
|
| - return *Iterator(iteratorAt(index));
|
| + return *iteratorAt(index);
|
| }
|
| +
|
| 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));
|
| }
|
|
|
| // Take in derived element type and construct it at location generated by Allocate().
|
| - template <typename DerivedElementType>
|
| - DerivedElementType* allocateAndConstruct()
|
| + template <typename DerivedElementType, typename... Args>
|
| + DerivedElementType* allocateAndConstruct(Args&&... args)
|
| {
|
| - return new (allocate(sizeof(DerivedElementType))) DerivedElementType;
|
| + return new (allocate(sizeof(DerivedElementType))) DerivedElementType(WTF::forward<Args>(args)...);
|
| }
|
|
|
| // Take in derived element type and copy construct it at location generated by
|
| @@ -273,15 +285,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)
|
| {
|
| 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 +340,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 +379,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 {
|
|
|