PointerArray< T, MINCHUNKSIZE, ALLOCATOR > Class Template Reference

#include <pointerarray.h>

Inheritance diagram for PointerArray< T, MINCHUNKSIZE, ALLOCATOR >:

Detailed Description

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
TType of the array elements.
MINCHUNKSIZEThe minimum number of elements upon array creation.
ALLOCATORClass for memory allocation.
Note
Note that the array element class has special requirements regarding copy and move constructors .
See also
$ref arrays

Classes

class  IteratorTemplate
 

Public Types

using Array = BaseArray< T *, MINCHUNKSIZE, BASEARRAYFLAGS::MOVEANDCOPYOBJECTS, ALLOCATOR >
 
using AllocatorType = ALLOCATOR
 
using Iterator = IteratorTemplate< false >
 
using ConstIterator = IteratorTemplate< true >
 
- Public Types inherited from Collection< COLLECTION, VALUETYPE, SUPER >
using Super = BaseCollection< COLLECTION, SUPER >
 
using ValueType = VALUETYPE
 
- Public Types inherited from BaseCollection< COLLECTION, SUPER >
using IsCollection = std::true_type
 
using IsBaseArray = std::false_type
 

Public Member Functions

 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< IteratorInsert (Iterator position)
 
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > Insert (Int position, const T &x)
 
MAXON_ATTRIBUTE_FORCE_INLINE ResultMemT< IteratorInsert (Iterator position, const T &x)
 
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > Insert (Int position, T &&x)
 
MAXON_ATTRIBUTE_FORCE_INLINE ResultMemT< IteratorInsert (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< IteratorInsertBlock (Iterator position, const Block< const T > &values)
 
ResultMemT< IteratorInsert (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 ()
 
ArrayGetUnderlyingArray ()
 
const ArrayGetUnderlyingArray () const
 
- Public Member Functions inherited from ArrayBase< PointerArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, DefaultAllocator >, T, EmptyClass, DefaultCompare >
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
 
- Public Member Functions inherited from ArrayBase0< COLLECTION, VALUETYPE, SUPER, HASH >
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
 
- Public Member Functions inherited from Collection< COLLECTION, VALUETYPE, SUPER >
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< BoolForEach (FN &&callback) const
 
template<typename FN >
Result< BoolForEach (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
 
- Public Member Functions inherited from BaseCollection< COLLECTION, SUPER >
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
 

Private Member Functions

 MAXON_DISALLOW_COPY_AND_ASSIGN (PointerArray)
 
template<typename COLLECTION2 >
Result< void > AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0)
 
T * Alloc ()
 
T ** AllocPointers (Int cnt)
 
template<typename X >
void Free (X *&p)
 

Private Attributes

Array _ptr
 

Additional Inherited Members

- Static Public Member Functions inherited from Collection< COLLECTION, VALUETYPE, SUPER >
static const VALUETYPEGetMapKey (const VALUETYPE &key)
 
- Public Attributes inherited from Collection< COLLECTION, VALUETYPE, SUPER >
 VALUETYPE
 
- Static Public Attributes inherited from ArrayBase0< COLLECTION, VALUETYPE, SUPER, HASH >
static const COLLECTION_KIND KIND
 

Member Typedef Documentation

◆ Array

using Array = BaseArray<T*, MINCHUNKSIZE, BASEARRAYFLAGS::MOVEANDCOPYOBJECTS, ALLOCATOR>

◆ AllocatorType

using AllocatorType = ALLOCATOR

◆ Iterator

using Iterator = IteratorTemplate<false>

◆ ConstIterator

Constructor & Destructor Documentation

◆ PointerArray() [1/3]

Default constructor. Creates an empty array.

◆ PointerArray() [2/3]

PointerArray ( const ALLOCATOR &  a)
explicit

This constructor has to be used if an array should use a custom allocator with member variables.

◆ ~PointerArray()

Destructs the array with all its elements.

◆ PointerArray() [3/3]

PointerArray ( PointerArray< T, MINCHUNKSIZE, ALLOCATOR > &&  src)

Move constructor.

Member Function Documentation

◆ MAXON_DISALLOW_COPY_AND_ASSIGN()

MAXON_DISALLOW_COPY_AND_ASSIGN ( PointerArray< T, MINCHUNKSIZE, ALLOCATOR >  )
private

◆ MAXON_OPERATOR_MOVE_ASSIGNMENT()

MAXON_OPERATOR_MOVE_ASSIGNMENT ( PointerArray< T, MINCHUNKSIZE, ALLOCATOR >  )

Move assignment operator.

◆ Reset()

void Reset ( )

Deletes all elements (calls destructors and frees memory).

◆ Flush()

void Flush ( )

Deletes all elements, but doesn't free memory (calls destructors though).

◆ GetCount()

MAXON_ATTRIBUTE_FORCE_INLINE Int GetCount ( ) const

Gets the number of array elements.

Returns
Number of array elements.

◆ GetCapacityCount()

MAXON_ATTRIBUTE_FORCE_INLINE Int GetCapacityCount ( ) const

Gets the number of elements for which memory has been allocated (for a PointerArray this is equal to GetCount()).

Returns
Number of array elements for which memory has been allocated.

◆ operator[]() [1/2]

MAXON_ATTRIBUTE_FORCE_INLINE const T& operator[] ( Int  idx) const

Array (subscript) operator for const objects.

Parameters
[in]idxElement index (if it's out of bounds you will get an error in debug code only, otherwise it will crash).
Returns
Array element.

◆ operator[]() [2/2]

MAXON_ATTRIBUTE_FORCE_INLINE T& operator[] ( Int  idx)

Array (subscript) operator for non-const objects.

Parameters
[in]idxElement index (if it's out of bounds you will get an error in debug code only, otherwise it will crash).
Returns
Array element.

◆ Append() [1/3]

MAXON_ATTRIBUTE_FORCE_INLINE ResultRef<T> Append ( ARG &&  x)

◆ Append() [2/3]

MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if<sizeof...(ARGS) != 1, ResultRef<T> >::type Append ( ARGS &&...  args)

◆ AppendBlock()

MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr<T> AppendBlock ( const Block< const T > &  values)

◆ Append() [3/3]

MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr<T> Append ( const std::initializer_list< T > &  values)

Appends new elements at the end of the array.

Parameters
[in]valuesInitializer list with values to be copied.
Returns
Element pointer or OutOfMemoryError if the allocation failed.

◆ AppendPtr()

ResultPtr<T> AppendPtr ( T *  x)

PointerArray specific: Adds a pointer to the new element at the end of the array.

Parameters
[in]xPointer to new element (PointerArray will take ownership of it).
Returns
Element pointer or nullptr (in this case x is still valid).

◆ Insert() [1/8]

MAXON_ATTRIBUTE_FORCE_INLINE ResultRef<T> Insert ( Int  position)

Inserts a new default element at index position.

Parameters
[in]positionInsert index (the array size will increase and the existing elements are moved).
Returns
Element reference or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆ Insert() [2/8]

Inserts a new default element at iterator position.

Parameters
[in]positionInsert position.
Returns
Iterator for the new element or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆ Insert() [3/8]

MAXON_ATTRIBUTE_FORCE_INLINE ResultRef<T> Insert ( Int  position,
const T &  x 
)

Inserts a new element at index position and initializes it with a copy of x.

Parameters
[in]positionInsert index (the array size will increase and the existing elements are moved).
[in]xValue to be copied.
Returns
Element reference or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆ Insert() [4/8]

MAXON_ATTRIBUTE_FORCE_INLINE ResultMemT<Iterator> Insert ( Iterator  position,
const T &  x 
)

Inserts a new element at iterator position and initializes it with a copy of x.

Parameters
[in]positionInsert position.
[in]xValue to be copied.
Returns
Iterator for the new element or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆ Insert() [5/8]

MAXON_ATTRIBUTE_FORCE_INLINE ResultRef<T> Insert ( Int  position,
T &&  x 
)

Inserts a new element at index position and moves the content of x to it.

Parameters
[in]positionInsert index (the array size will increase and the existing elements are moved).
[in]xValue to be moved.
Returns
Element reference or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆ Insert() [6/8]

MAXON_ATTRIBUTE_FORCE_INLINE ResultMemT<Iterator> Insert ( Iterator  position,
T &&  x 
)

Inserts a new element at iterator position and moves the content of x to it.

Parameters
[in]positionInsert position.
[in]xValue to be moved.
Returns
Iterator for the new element or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆ InsertPtr()

ResultPtr<T> InsertPtr ( Int  position,
T *  x 
)

PointerArray specific: Inserts a pointer to a new element at index position.

Parameters
[in]positionInsert index (the array size will increase and the existing elements are moved).
[in]xPointer to new element (PointerArray will take ownership of it).
Returns
Element pointer or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆ InsertBlock() [1/2]

ResultPtr<T> InsertBlock ( Int  position,
const Block< const T > &  values 
)

Inserts new elements at index position (the pointers to all elements from position on are moved by the the count of values).

Parameters
[in]positionInsert index (the array size will increase and the existing elements are moved).
[in]valuesBlock with values to be copied. If the block points to nullptr, only its count is used, and you have to call the constructor of the new elements manually.
Returns
Element pointer or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆ Insert() [7/8]

ResultPtr<T> Insert ( Int  position,
const std::initializer_list< T > &  values 
)

Inserts new elements at index position (all elements from position on are moved by the the count of values).

Parameters
[in]positionInsert index (the array size will increase and the existing elements are moved).
[in]valuesInitializer list with values to be copied.
Returns
Element pointer or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆ InsertBlock() [2/2]

ResultMemT<Iterator> InsertBlock ( Iterator  position,
const Block< const T > &  values 
)

Inserts new elements at iterator position (all elements from position on are moved by the the count of values).

Parameters
[in]positionInsert position.
[in]valuesBlock with values to be copied. If the block points to nullptr, only its count is used, and you have to call the constructor of the new elements manually.
Returns
Iterator for the new element or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆ Insert() [8/8]

ResultMemT<Iterator> Insert ( Iterator  position,
const std::initializer_list< T > &  values 
)

Inserts new elements at iterator position (all elements from position on are moved by the the count of values).

Parameters
[in]positionInsert position.
[in]valuesInitializer list with values to be copied.
Returns
Iterator for the new element or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆ Erase() [1/2]

ResultPtr<T> Erase ( Int  position,
Int  eraseCnt = 1 
)

Erases (removes and deletes) elements.

Parameters
[in]positionErase index (Erase() will fail if out of bounds and return nullptr).
[in]eraseCntNumber of elements to be erased. If eraseCnt is invalid (higher than allowed or negative) a nullptr will be returned.
Returns
Pointer to the element that is now at position. If position equals the number of elements after Erase() a valid pointer is returned but you are not allowed to access it. OutOfMemoryError is only returned on failure (position was out of bounds).

◆ Erase() [2/2]

Iterator Erase ( Iterator  position,
Int  eraseCnt = 1 
)

Erases (removes and deletes) elements.

Parameters
[in]positionErase position.
[in]eraseCntNumber of elements to be erased. If eraseCnt is invalid (higher than allowed or negative) an invalid iterator will be returned.
Returns
Iterator for the element that is now at position (its operator Bool() will return false if something failed).

◆ ErasePtr()

ResultPtr<T> ErasePtr ( Int  position,
T **  dst 
)

Extracts a single element from the list and returns its pointer. The caller takes ownership of the element.

Parameters
[in]positionErase index (Erase() will fail if out of bounds and return nullptr).
[in,out]dstUsed to return pointer to the erased element (must not be null).
Returns
Pointer to the element that is now at position. If position equals the that of the element after Erase(), a valid pointer is returned but you are not allowed to access it. A nullptr is only returned on failure (position was out of bounds).

◆ SwapErase() [1/2]

ResultMem SwapErase ( Int  position,
Int  eraseCnt = 1 
)

Erases elements within the array and moves elements from the end to the erased gap. This is generally faster than Erase() because at most eraseCnt elements have to be moved, but it changes the order of elements.

Parameters
[in]positionErase index (SwapErase() will fail if out of bounds and return nullptr).
[in]eraseCntNumber of elements to be erased. If eraseCnt is invalid (higher than allowed or negative) false will be returned.
Returns
False if position was out of bounds.

◆ SwapErase() [2/2]

Iterator SwapErase ( Iterator  position,
Int  eraseCnt = 1 
)

Erases elements within the array and moves elements from the end to the erased gap. This is generally faster than Erase() because at most eraseCnt elements have to be moved, but it changes the order of elements.

Parameters
[in]positionErase position.
[in]eraseCntNumber of elements to be erased. If eraseCnt is invalid (higher than allowed or negative) an invalid iterator will be returned.
Returns
Iterator for the element that is now at position (its operator Bool() will return false if something failed).

◆ GetBlock() [1/4]

MAXON_ATTRIBUTE_FORCE_INLINE Int GetBlock ( Int  position,
Block< T, STRIDED > &  block 
)

Determines a contiguous block of array elements which contains the element at index. For a BaseArray, this yields the whole array as a block.

Parameters
[in]positionElement index.
[out]blockBlock which contains the element at index.
Returns
Start index of the block. The requested element can be found within the block at index - start index.

◆ GetBlock() [2/4]

MAXON_ATTRIBUTE_FORCE_INLINE Int GetBlock ( Int  position,
Block< const T, STRIDED > &  block 
) const

Determines a contiguous block of array elements which contains the element at position. For a BaseArray, this yields the whole array as a block.

Parameters
[in]positionElement index.
[out]blockBlock which contains the element at position.
Returns
Start index of the block. The requested element can be found within the block at position - start index.

◆ GetBlock() [3/4]

MAXON_ATTRIBUTE_FORCE_INLINE Iterator GetBlock ( Iterator  position,
Block< T, STRIDED > &  block 
)

Determines a contiguous block of array elements which contains the element at position. For a BaseArray, this yields the whole array as a block.

Parameters
[in]positionElement position.
[out]blockBlock which contains the element at position.
Returns
Start iterator of the block. The requested element can be found within the block at index position - start iterator.

◆ GetBlock() [4/4]

MAXON_ATTRIBUTE_FORCE_INLINE Iterator GetBlock ( Iterator  position,
Block< const T, STRIDED > &  block 
) const

Determines a contiguous block of array elements which contains the element at position. For a BaseArray, this yields the whole array as a block.

Parameters
[in]positionElement position.
[out]blockBlock which contains the element at index.
Returns
Start iterator of the block. The requested element can be found within the block at index position - start iterator.

◆ GetFirst() [1/2]

MAXON_ATTRIBUTE_FORCE_INLINE const T* GetFirst ( ) const

Returns the first element of the array.

Note
The PointerArray uses a separate memory blocks for each element. You must not and cannot use the pointer returned by GetFirst() to access the array elements like a continous block.
Returns
Pointer to the first element (nullptr if the array is empty).

◆ GetFirst() [2/2]

Returns the first element of the array.

Note
The PointerArray uses a separate memory blocks for each element. You must not and cannot use the pointer returned by GetFirst() to access the array elements like a continous block.
Returns
Pointer to the first element (nullptr if the array is empty).

◆ GetLast() [1/2]

MAXON_ATTRIBUTE_FORCE_INLINE const T* GetLast ( ) const

Returns the last element of the array.

Returns
Pointer to the last element (nullptr if the array is empty).

◆ GetLast() [2/2]

Returns the last element of the array.

Returns
Pointer to the last element (nullptr if the array is empty).

◆ SetCapacityHint()

ResultMem SetCapacityHint ( Int  requestedCapacity,
COLLECTION_RESIZE_FLAGS  resizeFlags = COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY 
)

Prepares the internal buffer(s) to hold at least the given number of elements with as few further memory allocations as possible.

Note
This is just a hint. It does not guarantee that the collection will be able to store the number of indicated elements.
Parameters
[in]requestedCapacityThe desired internal capacity.
[in]resizeFlagsIf ON_GROW_FIT_TO_SIZE is set, the collection will use only as much memory as needed to hold the data.
Returns
False if allocation failed.

◆ Resize()

Resizes the array to contain newCnt elements. If newCnt is smaller than GetCount() all extra elements are being deleted. If it is greater the array is expanded and the default constructor is called for new elements.

Parameters
[in]newCntNew array size.
[in]resizeFlagsSee COLLECTION_RESIZE_FLAGS (flags other than ON_GROW_UNINITIALIZED/POD_UNINITIALIZED result in default behaviour).
Returns
False if allocation failed.

◆ Pop()

MAXON_ATTRIBUTE_FORCE_INLINE Bool Pop ( T *  dst = nullptr)

Deletes the last element.

Parameters
[out]dstNullptr or pointer to return value.
Returns
True if there was at least one element.

◆ PopPtr()

Bool PopPtr ( T **  dst)

PointerArray specific: Removes the last element and returns the pointer.

Parameters
[out]dstUsed to return pointer to the last element (must not be null), the caller will take ownership of the element.
Returns
True if successful.

◆ GetIndex()

Int GetIndex ( const T &  x) const

Gets the index of the element. The element must be part of the array, otherwise (e.g. if x is a copy of an array element) InvalidArrayIndex will be returned. This is quite slow because GetIndex() has to iterate over the array.

Returns
Index of element or InvalidArrayIndex (not element of this).

◆ AppendAllImpl()

Result<void> AppendAllImpl ( COLLECTION2 &&  other,
COLLECTION_RESIZE_FLAGS  resizeFlags,
Bool  overwrite,
OverloadRank0   
)
private

Specialization of AppendAllImpl, used by BaseCollection::AppendAll.

◆ Swap()

Swaps elements a and b (just the pointers are swapped, this is more efficient than global Swap(array[a], array[b]).

Parameters
[in]aPosition of element to be swapped.
[in]bPosition of element to be swapped.

◆ GetMemorySize()

Int GetMemorySize ( ) const

Calculates the memory usage for this array. The array element class must have a public member GetMemorySize that returns an element's size.

Returns
Memory size in bytes.

◆ Begin() [1/2]

Gets an iterator for the first element. When you modify the array Begin() will change, it is not a constant value.

Returns
Iterator for the first element (equal to End() if the array is empty).

◆ Begin() [2/2]

Gets an iterator for the first element. When you modify the array Begin() will change, it is not a constant value.

Returns
Iterator for the first element (equal to End() if the array is empty).

◆ End() [1/2]

Gets an iterator for the end (End() - 1 is the last element if the array is not empty). When you modify the array End() will change, it is not a constant value.

Returns
Iterator for the array end (points behind the last element).

◆ End() [2/2]

Gets an iterator for the end (End() - 1 is the last element if the array is not empty). When you modify the array End() will change, it is not a constant value.

Returns
Iterator for the array end (points behind the last element).

◆ Disconnect()

Block<T*> Disconnect ( )

Disconnects the array's memory buffer and returns it as a block. Afterwards the array is in the same state as directly after its construction.

Returns
The buffer consisting of pointers to elements of type T.
Note
The memory needs to be freed with the allocator that the array is using.

◆ GetAllocator()

ALLOCATOR& GetAllocator ( )

Returns the allocator as reference. Typically this is used by the arrays and other base classes when multiple of them are "stiched" together as one big object all shall use one main allocator.

Returns
Allocator reference.

◆ GetUnderlyingArray() [1/2]

Array& GetUnderlyingArray ( )

Returns the underlying array which stores the pointers to the elements.

Returns
Array with pointers.

◆ GetUnderlyingArray() [2/2]

const Array& GetUnderlyingArray ( ) const

Returns the underlying array which stores the pointers to the elements.

Returns
Array with pointers.

◆ Alloc()

T* Alloc ( )
private

◆ AllocPointers()

T** AllocPointers ( Int  cnt)
private

◆ Free()

void Free ( X *&  p)
private

Member Data Documentation

◆ _ptr

Array _ptr
private