template<typename T, Int MINCHUNKSIZE = BASEARRAY_DEFAULT_CHUNK_SIZE, typename ALLOCATOR = DefaultAllocator>
class maxon::PointerArray< T, MINCHUNKSIZE, ALLOCATOR >
Array of pointers to objects. The array consists of pointers to objects of type T (instead of storing the objects directly like a BaseArray does). Internally each time you append or insert an element a new object of type T is allocated, constructed and the corresponding index of the array will point to it. Nonetheless this array has the same interface as a BaseArray except for AppendPtr(), InsertPtr() and PopPtr() which allow you to directly add or remove already existing objects. Like with all other arrays the destructor of the PointerArray will release memory for all objects that are still part of the array. If you want to use the objects yourself after they have been created by the PointerArray you have to take ownership of them by calling PopPtr() or use a BaseArray<T*> instead of a PointerArray<T>.
Please note that in a C++11 range based for loop you may not call a non-const method that modifies the range (e.g. Erase) - it does not work because the loop does not expect the range to change. Use the Iterable::EraseIterator in that case.
Performance characteristics: Random access to array elements is constant: O(1). Append or Pop (erase the last) an element is amortized constant: O(1) Insert or Erase an element is best case amortized constant (big elements) or in worst case linear (small elements): O(1) to O(n)
- Note
- : Do not rely on the characteristics to pick the right type of collection. Always profile!
- Template Parameters
-
T | Type of the array elements. |
MINCHUNKSIZE | The minimum number of elements upon array creation. |
ALLOCATOR | Class for memory allocation. |
- Note
- Note that the array element class has special requirements regarding copy and move constructors .
- See also
- $ref arrays
|
| PointerArray () |
|
| PointerArray (const ALLOCATOR &a) |
|
| ~PointerArray () |
|
| PointerArray (PointerArray &&src) |
|
| MAXON_OPERATOR_MOVE_ASSIGNMENT (PointerArray) |
|
void | Reset () |
|
void | Flush () |
|
MAXON_ATTRIBUTE_FORCE_INLINE Int | GetCount () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE Int | GetCapacityCount () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE const T & | operator[] (Int idx) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE T & | operator[] (Int idx) |
|
template<typename ARG > |
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > | Append (ARG &&x) |
|
template<typename... ARGS> |
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< sizeof...(ARGS) !=1, ResultRef< T > >::type | Append (ARGS &&... args) |
|
MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | AppendBlock (const Block< const T > &values) |
|
MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (const std::initializer_list< T > &values) |
|
ResultPtr< T > | AppendPtr (T *x) |
|
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > | Insert (Int position) |
|
MAXON_ATTRIBUTE_FORCE_INLINE ResultMemT< Iterator > | Insert (Iterator position) |
|
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > | Insert (Int position, const T &x) |
|
MAXON_ATTRIBUTE_FORCE_INLINE ResultMemT< Iterator > | Insert (Iterator position, const T &x) |
|
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > | Insert (Int position, T &&x) |
|
MAXON_ATTRIBUTE_FORCE_INLINE ResultMemT< Iterator > | Insert (Iterator position, T &&x) |
|
ResultPtr< T > | InsertPtr (Int position, T *x) |
|
ResultPtr< T > | InsertBlock (Int position, const Block< const T > &values) |
|
ResultPtr< T > | Insert (Int position, const std::initializer_list< T > &values) |
|
ResultMemT< Iterator > | InsertBlock (Iterator position, const Block< const T > &values) |
|
ResultMemT< Iterator > | Insert (Iterator position, const std::initializer_list< T > &values) |
|
ResultPtr< T > | Erase (Int position, Int eraseCnt=1) |
|
Iterator | Erase (Iterator position, Int eraseCnt=1) |
|
ResultPtr< T > | ErasePtr (Int position, T **dst) |
|
ResultMem | SwapErase (Int position, Int eraseCnt=1) |
|
Iterator | SwapErase (Iterator position, Int eraseCnt=1) |
|
template<Bool STRIDED> |
MAXON_ATTRIBUTE_FORCE_INLINE Int | GetBlock (Int position, Block< T, STRIDED > &block) |
|
template<Bool STRIDED> |
MAXON_ATTRIBUTE_FORCE_INLINE Int | GetBlock (Int position, Block< const T, STRIDED > &block) const |
|
template<Bool STRIDED> |
MAXON_ATTRIBUTE_FORCE_INLINE Iterator | GetBlock (Iterator position, Block< T, STRIDED > &block) |
|
template<Bool STRIDED> |
MAXON_ATTRIBUTE_FORCE_INLINE Iterator | GetBlock (Iterator position, Block< const T, STRIDED > &block) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE const T * | GetFirst () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE T * | GetFirst () |
|
MAXON_ATTRIBUTE_FORCE_INLINE const T * | GetLast () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE T * | GetLast () |
|
ResultMem | SetCapacityHint (Int requestedCapacity, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
|
ResultMem | Resize (Int newCnt, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::DEFAULT) |
|
MAXON_ATTRIBUTE_FORCE_INLINE Bool | Pop (T *dst=nullptr) |
|
Bool | PopPtr (T **dst) |
|
Int | GetIndex (const T &x) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE void | Swap (Iterator a, Iterator b) |
|
Int | GetMemorySize () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE ConstIterator | Begin () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE Iterator | Begin () |
|
MAXON_ATTRIBUTE_FORCE_INLINE ConstIterator | End () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE Iterator | End () |
|
Block< T * > | Disconnect () |
|
ALLOCATOR & | GetAllocator () |
|
Array & | GetUnderlyingArray () |
|
const Array & | GetUnderlyingArray () const |
|
constexpr MAXON_ATTRIBUTE_FORCE_INLINE | ArrayBase (ARGS &&... args) |
|
ArrayImpl< PointerArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, DefaultAllocator > & > | ToArray () |
|
ArrayImpl< const PointerArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, DefaultAllocator > & > | ToArray () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE | operator ArrayImpl< PointerArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, DefaultAllocator > & > () |
|
MAXON_ATTRIBUTE_FORCE_INLINE | operator ArrayImpl< const PointerArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, DefaultAllocator > & > () const |
|
template<typename... ARGS> |
constexpr MAXON_ATTRIBUTE_FORCE_INLINE | ArrayBase0 (ARGS &&... args) |
|
Bool | IsValidIndex (Int index) const |
|
Result< void > | CheckValidIndex (Int index) const |
|
Int | FindIndex (typename ByValueParam< VALUETYPE >::type v, Int start) const |
|
Int | FindLastIndex (typename ByValueParam< VALUETYPE >::type v) const |
|
Int | FindLastIndex (typename ByValueParam< VALUETYPE >::type v, Int start) const |
|
Bool | EraseFirst (typename ByValueParam< VALUETYPE >::type v) |
|
Int | EraseAll (typename ByValueParam< VALUETYPE >::type v) |
|
template<typename COLLECTION2 > |
Result< void > | AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0) |
|
template<typename COLLECTION2 > |
Result< void > | InsertAll (Int index, COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
|
template<typename COLLECTION2 > |
Result< void > | Add (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
|
template<typename COLLECTION2 > |
Result< void > | SubtractImpl (COLLECTION2 &&other, OverloadRank0) |
|
template<typename COLLECTION2 , typename COMPARE > |
Bool | IsEqualImpl (const COLLECTION2 &other, COMPARE &&cmp, OverloadRank0) const |
|
HashInt | GetHashCode () const |
|
UniqueHash | GetUniqueHashCode () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< COLLECTION > | Slice (Int start) |
|
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< const COLLECTION > | Slice (Int start) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< COLLECTION > | Slice (Int start, Int end) |
|
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< const COLLECTION > | Slice (Int start, Int end) const |
|
BlockIterator< COLLECTION, VALUETYPE, false, false > | GetBlocks () |
|
BlockIterator< COLLECTION, VALUETYPE, true, false > | GetBlocks () const |
|
BlockIterator< COLLECTION, VALUETYPE, false, true > | GetStridedBlocks () |
|
BlockIterator< COLLECTION, VALUETYPE, true, true > | GetStridedBlocks () const |
|
template<typename... ARGS> |
MAXON_ATTRIBUTE_FORCE_INLINE | Collection (ARGS &&... args) |
|
ResultOk< void > | VariadicAppend () |
|
template<typename V , typename... VALUES> |
Result< void > | VariadicAppend (V &&value, VALUES &&... rest) |
|
| operator ValueReceiver< const VALUETYPE & > () |
|
| operator ValueReceiver< VALUETYPE && > () |
|
| operator ValueReceiver< typename std::conditional< STD_IS_REPLACEMENT (scalar, VALUETYPE) |
|
DummyParamType & | type () |
|
template<typename FN > |
Result< Bool > | ForEach (FN &&callback) const |
|
template<typename FN > |
Result< Bool > | ForEach (FN &&callback) |
|
template<typename H = COLLECTION> |
H::Iterator | Find (typename ByValueParam< VALUETYPE >::type v) |
|
template<typename H = COLLECTION> |
H::ConstIterator | Find (typename ByValueParam< VALUETYPE >::type v) const |
|
Int | FindIndex (typename ByValueParam< VALUETYPE >::type v) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE Bool | Contains (typename ByValueParam< VALUETYPE >::type v) const |
|
template<typename... ARGS> |
MAXON_ATTRIBUTE_FORCE_INLINE | BaseCollection (ARGS &&... args) |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type | operator== (const COLLECTION2 &other) const |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type | operator!= (const COLLECTION2 &other) const |
|
template<typename COMPARE = EqualityCompare, typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value &&!STD_IS_REPLACEMENT(same, typename std::decay< COMPARE >::type, EQUALITY), Bool >::type | IsEqual (const COLLECTION2 &other, COMPARE &&cmp=COMPARE()) const |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE) |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | Subtract (COLLECTION2 &&other) |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | Intersect (const COLLECTION2 &other) |
|
template<typename COLLECTION2 > |
Bool | Intersects (const COLLECTION2 &other) const |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | CopyFromImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank0) |
|
template<typename COLLECTION2 > |
Result< void > | AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0) |
|
template<typename COLLECTION2 > |
Result< void > | IntersectImpl (COLLECTION2 &&other, OverloadRank0) |
|
MAXON_ATTRIBUTE_FORCE_INLINE Bool | IsEmpty () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE Bool | IsPopulated () const |
|
String | ToString (const FormatStatement *formatStatement=nullptr) const |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Bool | ContainsAll (COLLECTION2 &&other) const |
|
template<typename COLLECTION2 > |
Bool | ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const |
|