template<typename T, Int BLOCK_SIZE_EXPONENT = BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS MEMFLAGS = BLOCKARRAYFLAGS::NONE, typename ALLOCATOR = DefaultAllocator>
class maxon::BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR >
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) 
- Note
 - : Do not rely on the characteristics to pick the right type of collection. Always profile to check real life performance!
 
- Template Parameters
 - 
  
    | 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. | 
  
   
- Note
 - Note that the array element class has special requirements regarding copy and move constructors . 
 
- See also
 - $ref arrays 
 
 | 
|   | 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) | 
|   | 
| ResultRef< T >  | Append () | 
|   | 
| ResultRef< T >  | Append (const T &x) | 
|   | 
| ResultRef< T >  | Append (T &&x) | 
|   | 
| ResultPtr< T >  | Append (const Block< const T > &values) | 
|   | 
| ResultPtr< T >  | Append (const std::initializer_list< T > &values) | 
|   | 
| ResultRef< T >  | Insert (Int position) | 
|   | 
| ResultMemT< Iterator >  | Insert (const Iterator &position) | 
|   | 
| ResultRef< T >  | Insert (Int position, const T &x) | 
|   | 
| ResultMemT< Iterator >  | Insert (const Iterator &position, const T &x) | 
|   | 
| ResultRef< T >  | Insert (Int position, T &&x) | 
|   | 
| ResultMemT< Iterator >  | Insert (const Iterator &position, T &&x) | 
|   | 
| ResultPtr< T >  | Insert (Int position, const Block< const T > &values) | 
|   | 
| ResultPtr< T >  | Insert (Int position, const std::initializer_list< T > &values) | 
|   | 
| ResultMemT< Iterator >  | Insert (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_same<typename std::decay<BASEARRAY>::type, BaseArray<T>>::value>::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 () | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE  | ArrayBase (ARGS &&... args) | 
|   | 
| ArrayImpl< BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR > & >  | ToArray () | 
|   | 
| ArrayImpl< const BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR > & >  | ToArray () const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE  | operator ArrayImpl< BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR > & > () | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE  | operator ArrayImpl< const BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR > & > () const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE  | ArrayBase0 (ARGS &&... args) | 
|   | 
| Bool  | IsValidIndex (Int index) const | 
|   | 
| Result< void >  | CheckValidIndex (Int index) const | 
|   | 
| Int  | FindIndex (typename ByValueParam< T >::type v, Int start) const | 
|   | 
| Int  | FindLastIndex (typename ByValueParam< T >::type v) const | 
|   | 
| Int  | FindLastIndex (typename ByValueParam< T >::type v, Int start) const | 
|   | 
| Bool  | EraseFirst (typename ByValueParam< T >::type v) | 
|   | 
| Int  | EraseAll (typename ByValueParam< T >::type v) | 
|   | 
| Result< void >  | AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0) | 
|   | 
| Result< void >  | InsertAll (Int index, COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) | 
|   | 
| Result< void >  | Add (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) | 
|   | 
| Result< void >  | SubtractImpl (COLLECTION2 &&other, OverloadRank0) | 
|   | 
| Bool  | IsEqualImpl (const COLLECTION2 &other, COMPARE &&cmp, OverloadRank0) const | 
|   | 
| UInt  | GetHashCode () const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR > >  | Slice (Int start) | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< const BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR > >  | Slice (Int start) const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR > >  | Slice (Int start, Int end) | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< const BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR > >  | Slice (Int start, Int end) const | 
|   | 
| BlockIterator< BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR >, T, false, false >  | GetBlocks () | 
|   | 
| BlockIterator< BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR >, T, true, false >  | GetBlocks () const | 
|   | 
| BlockIterator< BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR >, T, false, true >  | GetStridedBlocks () | 
|   | 
| BlockIterator< BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR >, T, true, true >  | GetStridedBlocks () const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE  | Collection (ARGS &&... args) | 
|   | 
| ResultOk< void >  | VariadicAppend () | 
|   | 
| Result< void >  | VariadicAppend (V &&value, VALUES &&... rest) | 
|   | 
|   | operator ValueReceiver< const T & > () | 
|   | 
|   | operator ValueReceiver< T && > () | 
|   | 
|   | operator ValueReceiver< typename std::conditional< std::is_scalar< T >::value, T, DummyParamType & >::type > () | 
|   | 
| Result< Bool >  | ForEach (FN &&callback) | 
|   | 
| H::Iterator  | Find (typename ByValueParam< T >::type v) | 
|   | 
| H::ConstIterator  | Find (typename ByValueParam< T >::type v) const | 
|   | 
| Int  | FindIndex (typename ByValueParam< T >::type v) const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE Bool  | Contains (typename ByValueParam< T >::type v) const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE  | BaseCollection (ARGS &&... args) | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type  | operator== (const COLLECTION2 &other) const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type  | operator!= (const COLLECTION2 &other) const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value &&!std::is_same< typename std::decay< COMPARE >::type, EQUALITY >::value, Bool >::type  | IsEqual (const COLLECTION2 &other, COMPARE &&cmp=COMPARE()) const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE Result< void >  | AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE Result< void >  | CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE) | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE Result< void >  | Subtract (COLLECTION2 &&other) | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE Result< void >  | Intersect (const COLLECTION2 &other) | 
|   | 
| Bool  | Intersects (const COLLECTION2 &other) const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE Result< void >  | CopyFromImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank0) | 
|   | 
| Result< void >  | AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0) | 
|   | 
| 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) const | 
|   | 
| MAXON_ATTRIBUTE_FORCE_INLINE Bool  | ContainsAll (COLLECTION2 &&other) const | 
|   | 
| Bool  | ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const | 
|   |