#include <blockarray.h>
Block array template. The array consists of multiple blocks containing 2^BLOCK_SIZE_EXPONENT elements. Therefore the memory address of the elements will not change if the array grows and no memory is copied. Nonetheless objects have to be copied/moved when you call Insert() or Erase(), but the amount of memory is limited to the size of a block which makes it much faster than a BaseArray for these purposes.
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 or at least amortized constant (when elements have been removed inbetween): O(1). Append or Pop (erase the last) an element is amortized constant: O(1) Insert or Erase an element can be amortized constant (unless block size and array size mismatch) : O(1)
T | Type of the array elements. |
BLOCK_SIZE_EXPONENT | Size of an array block: 2^BLOCK_SIZE_EXPONENT. |
MEMFLAGS | Use BLOCKARRAYFLAGS::NONE unless you know the object can be moved and/or copied. |
ALLOCATOR | Class for memory allocation. |
Classes | |
class | ArrayOfBlocks |
struct | ForwardAllocator |
class | IteratorTemplate |
Public Types | |
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 | |
BlockArray () | |
BlockArray (const ALLOCATOR &a) | |
~BlockArray () | |
BlockArray (BlockArray &&src) | |
MAXON_OPERATOR_MOVE_ASSIGNMENT (BlockArray) | |
void | Reset () |
void | Flush () |
Int | GetCount () const |
Int | GetCapacityCount () const |
const T & | operator[] (Int idx) const |
T & | operator[] (Int idx) |
template<typename... ARGS> | |
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > | Append (ARGS &&... args) |
ResultPtr< T > | AppendBlock (const Block< const T > &values) |
ResultPtr< T > | Append (Block< typename std::remove_const< T >::type > &values) |
ResultPtr< T > | Append (Block< const T > &values) |
ResultPtr< T > | Append (const Block< typename std::remove_const< T >::type > &values) |
ResultPtr< T > | Append (const Block< const T > &values) |
ResultPtr< T > | Append (Block< typename std::remove_const< T >::type > &&values) |
ResultPtr< T > | Append (Block< const T > &&values) |
MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (MoveBlock< T > &values) |
MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (const MoveBlock< T > &values) |
template<Int N> | |
MAXON_IMPLICIT MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (typename std::remove_const< T >::type(&array)[N]) |
template<Int N> | |
MAXON_IMPLICIT MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (const T(&array)[N]) |
ResultPtr< T > | Append (const std::initializer_list< T > &values) |
template<typename... ARGS> | |
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > | Insert (Int position, ARGS &&... args) |
template<typename... ARGS> | |
ResultMemT< Iterator > | Insert (const Iterator &position, ARGS &&... args) |
ResultPtr< T > | Insert (Int position, Block< T > &values) |
ResultPtr< T > | Insert (Int position, Block< const T > &values) |
ResultPtr< T > | Insert (Int position, const Block< T > &values) |
ResultPtr< T > | Insert (Int position, const Block< const T > &values) |
ResultPtr< T > | Insert (Int position, Block< T > &&values) |
ResultPtr< T > | Insert (Int position, Block< const T > &&values) |
ResultPtr< T > | Insert (Int position, MoveBlock< T > &values) |
ResultPtr< T > | Insert (Int position, const MoveBlock< T > &values) |
ResultPtr< T > | InsertBlock (Int position, const Block< const T > &values) |
ResultPtr< T > | Insert (Int position, const std::initializer_list< T > &values) |
ResultMemT< Iterator > | InsertBlock (const 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 (const Iterator &position, Int eraseCnt=1) |
ResultMem | SwapErase (Int position, Int eraseCnt=1) |
Iterator | SwapErase (const Iterator &position, Int eraseCnt=1) |
template<Bool STRIDED> | |
Int | GetBlock (Int position, Block< const T, STRIDED > &block) const |
template<Bool STRIDED> | |
Int | GetBlock (Int position, Block< T, STRIDED > &block) |
template<Bool STRIDED> | |
MAXON_ATTRIBUTE_FORCE_INLINE ConstIterator | GetBlock (const ConstIterator &position, Block< const T, STRIDED > &block) const |
template<Bool STRIDED> | |
MAXON_ATTRIBUTE_FORCE_INLINE Iterator | GetBlock (const Iterator &position, Block< T, STRIDED > &block) |
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) |
Bool | Pop (T *dst=nullptr) |
Int | GetIndex (const T &x) const |
template<typename BASEARRAY , typename = typename std::enable_if<STD_IS_REPLACEMENT(same, typename std::decay<BASEARRAY>::type, BaseArray<T>)>::type> | |
Result< void > | CopyFromImpl (BASEARRAY &&src, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank4) |
void | Swap (Iterator &a, Iterator &b) |
Int | GetMemorySize () const |
ConstIterator | Begin () const |
Iterator | Begin () |
ConstIterator | End () const |
Iterator | End () |
BaseArray< ArrayBlock, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, ForwardAllocator > | Disconnect () |
ALLOCATOR & | GetAllocator () |
Public Member Functions inherited from ArrayBase< BlockArray< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE, DefaultAllocator >, T, DefaultAllocator, DefaultCompare > | |
MAXON_ATTRIBUTE_FORCE_INLINE | ArrayBase (ARGS &&... args) |
ArrayImpl< BlockArray< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE, DefaultAllocator > & > | ToArray () |
ArrayImpl< const BlockArray< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE, DefaultAllocator > & > | ToArray () const |
MAXON_ATTRIBUTE_FORCE_INLINE | operator ArrayImpl< BlockArray< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE, DefaultAllocator > & > () |
MAXON_ATTRIBUTE_FORCE_INLINE | operator ArrayImpl< const BlockArray< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE, DefaultAllocator > & > () const |
Public Member Functions inherited from ArrayBase0< COLLECTION, VALUETYPE, SUPER, HASH > | |
template<typename... ARGS> | |
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< 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 |
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 |
Static Public Attributes | |
static const Int | BLOCK_SIZE |
Static Public Attributes inherited from ArrayBase0< COLLECTION, VALUETYPE, SUPER, HASH > | |
static const COLLECTION_KIND | KIND |
Private Types | |
using | ArrayBlock = BaseArray< T,(Int) MEMFLAGS &(Int) BLOCKARRAYFLAGS::GROW_SLOWLY ? BASEARRAY_DEFAULT_CHUNK_SIZE :(Int) 1<< BLOCK_SIZE_EXPONENT,(BASEARRAYFLAGS)((Int) MEMFLAGS &~(Int) BLOCKARRAYFLAGS::NOINSERTERASE), ForwardAllocator > |
using | Super = ArrayBase< BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR >, T, ALLOCATOR, DefaultCompare > |
Private Member Functions | |
MAXON_DISALLOW_COPY_AND_ASSIGN (BlockArray) | |
Int | Insert (Int blockIdx, Int localIdx, const Block< const T > &values) |
Int | Erase (Int blockIdx, Int localIdx, Int eraseCnt) |
void | Move (ArrayBlock *dstBlock, Int dstLocalIdx, ArrayBlock *srcBlock, Int srcLocalIdx, Int moveCnt) |
Int | ResolveToLocalIndex (Int &idx) const |
ArrayBlock * | GetBlockAndIndex (Int &idx) |
const ArrayBlock * | GetBlockAndIndex (Int &idx) const |
Private Attributes | |
ArrayOfBlocks | _blocks |
Additional Inherited Members | |
Static Public Member Functions inherited from Collection< COLLECTION, VALUETYPE, SUPER > | |
static const VALUETYPE & | GetMapKey (const VALUETYPE &key) |
Public Attributes inherited from Collection< COLLECTION, VALUETYPE, SUPER > | |
VALUETYPE | |
|
private |
|
private |
using AllocatorType = ALLOCATOR |
using Iterator = IteratorTemplate<false> |
using ConstIterator = IteratorTemplate<true> |
BlockArray | ( | ) |
|
explicit |
this constructor has to be used if an array should use a custom allocator with member variables
~BlockArray | ( | ) |
BlockArray | ( | BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR > && | src | ) |
move constructor
|
private |
MAXON_OPERATOR_MOVE_ASSIGNMENT | ( | BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR > | ) |
move assignment operator
void Reset | ( | void | ) |
Deletes all elements (calls destructors and frees memory).
void Flush | ( | void | ) |
Deletes all elements (calls destructors and frees memory), but doesn't free the memory of the array which contains the blocks. The memory used by the blocks themselves is freed nevertheless.
Int GetCount | ( | void | ) | const |
Gets the number of array elements.
Int GetCapacityCount | ( | ) | const |
Gets the number of elements for which memory has been allocated (for a BlockArray this is equal to GetCount() plus the number of free elements in the last block)
const T& operator[] | ( | Int | idx | ) | const |
T& operator[] | ( | Int | idx | ) |
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef<T> Append | ( | ARGS &&... | args | ) |
MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr<T> Append | ( | MoveBlock< T > & | values | ) |
MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr<T> Append | ( | const MoveBlock< T > & | values | ) |
MAXON_IMPLICIT MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr<T> Append | ( | typename std::remove_const< T >::type(&) | array[N] | ) |
Appends new elements at the end of the array.
[in] | array | A C++ fixed-size array. of the array. |
MAXON_IMPLICIT MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr<T> Append | ( | const T(&) | array[N] | ) |
ResultPtr<T> Append | ( | const std::initializer_list< T > & | values | ) |
Appends new elements at the end of the array.
[in] | values | Initializer list with values to be copied. |
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef<T> Insert | ( | Int | position, |
ARGS &&... | args | ||
) |
Inserts a new element at index position and constructs it with the forwarded arguments.
[in] | position | Insert index (the array size will increase and the existing elements are moved). |
[in] | args | Values to be forwarded. |
ResultMemT<Iterator> Insert | ( | const Iterator & | position, |
ARGS &&... | args | ||
) |
Inserts a new element at iterator position and moves the content of x to it.
[in] | position | Insert position. |
[in] | args | Values to be forwarded. |
Inserts new elements at index position (all elements from position
on are moved by the the count of values
).
[in] | position | Insert index (the array size will increase and the existing elements are moved). |
[in] | values | Block with values to be moved (a MoveBlock must be used to prevent accidental moves of temporary Blocks). If the block points to nullptr, only its count is used, and you have to call the constructor of the new elements manually. |
Inserts new elements at index position (all elements from position on are moved by the the count of values
).
[in] | position | Insert index (the array size will increase and the existing elements are moved). |
[in] | values | Block 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. |
Inserts new elements at index position (all elements from position
on are moved by the the count of values
).
[in] | position | Insert index (the array size will increase and the existing elements are moved). |
[in] | values | Initializer list with values to be copied. |
ResultMemT<Iterator> InsertBlock | ( | const 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
).
[in] | position | Insert position. |
[in] | values | Block 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. |
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
).
[in] | position | Insert position. |
[in] | values | Initializer list with values to be copied. |
Erases (removes and deletes) elements.
[in] | position | Erase index (Erase() will fail if out of bounds and return nullptr). |
[in] | eraseCnt | Number of elements to be erased. If eraseCnt is invalid (higher than allowed or negative) a nullptr will be returned. |
Erases (removes and deletes) elements.
[in] | position | Erase position. |
[in] | eraseCnt | Number of elements to be erased. If eraseCnt is invalid (higher than allowed or negative) an invalid iterator will be returned. |
Iterable::EraseIterator
as in 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.
[in] | position | Erase index (SwapErase() will fail if out of bounds and return nullptr). |
[in] | eraseCnt | Number of elements to be erased. If eraseCnt is invalid (higher than allowed or negative) false will be returned. |
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.
[in] | position | Erase position. |
[in] | eraseCnt | Number of elements to be erased. If eraseCnt is invalid (higher than allowed or negative) an invalid iterator will be returned. |
Determines a contiguous block of array elements which contains the element at position
. The returned blocks are guaranteed to form a partition of the array, i.e., no two blocks overlap, and they cover the whole array.
position
- start index. Determines a contiguous block of array elements which contains the element at position
. The returned blocks are guaranteed to form a partition of the array, i.e., no two blocks overlap, and they cover the whole array.
position
- start index. MAXON_ATTRIBUTE_FORCE_INLINE ConstIterator GetBlock | ( | const ConstIterator & | 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.
position
- start iterator. MAXON_ATTRIBUTE_FORCE_INLINE Iterator GetBlock | ( | const 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.
position
- start iterator. 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.
[in] | requestedCapacity | The desired internal capacity. |
[in] | resizeFlags | If ON_GROW_FIT_TO_SIZE is set, the collection will use only as much memory as needed to hold the data. |
ResultMem Resize | ( | Int | newCnt, |
COLLECTION_RESIZE_FLAGS | resizeFlags = COLLECTION_RESIZE_FLAGS::DEFAULT |
||
) |
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.
[in] | newCnt | New array size. |
[in] | resizeFlags | See COLLECTION_RESIZE_FLAGS (flags other than ON_GROW_UNINITIALIZED/POD_UNINITIALIZED result in default behaviour). |
Bool Pop | ( | T * | dst = nullptr | ) |
Deletes the last element.
[out] | dst | Nullptr or pointer to return value. |
Int GetIndex | ( | const T & | x | ) | const |
Gets the index of an 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 slower than for a BaseArray because it has to iterate over the block.
Result<void> CopyFromImpl | ( | BASEARRAY && | src, |
COLLECTION_RESIZE_FLAGS | resizeFlags, | ||
OverloadRank4 | |||
) |
Swaps elements a and b (equivalent to global Swap(array[a], array[b]).
[in] | a | Position of element to be swapped. |
[in] | b | Position of element to be swapped. |
Int GetMemorySize | ( | void | ) | const |
Calculates the memory usage for this array. The array element class must have a public member GetMemorySize that returns an element's size.
ConstIterator Begin | ( | ) | const |
Iterator Begin | ( | ) |
ConstIterator End | ( | ) | const |
Iterator End | ( | ) |
BaseArray<ArrayBlock, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, ForwardAllocator> Disconnect | ( | ) |
Disconnects the array's memory buffers and returns its content as an array of blocks. Afterwards the array is in the same state as directly after its construction.
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.
|
private |
Returns the block index and local index within that block for a global array index.
[in,out] | idx | On input the global index, on return the local index within the block (must be < GetCount()). |
|
private |
Returns the block and local index within that block for a global array index.
[in,out] | idx | On input the global index, on return the local index within the block (must be < GetCount()). |
|
private |
|
static |
|
private |