template<typename T, Int MINCHUNKSIZE = BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS MEMFLAGS = BASEARRAYFLAGS::NONE, typename ALLOCATOR = DefaultAllocator>
class maxon::BaseArray< T, MINCHUNKSIZE, MEMFLAGS, ALLOCATOR >
Basic array template. The array consists of one contiguous block of memory. The block will have a minimum size of MINCHUNKSIZE elements of type T as soon as the first element is added.
The elements may be copied and change their memory address when the array grows. If your objects cannot be copied or need a constant address use the BlockArray template.
If you need a specific alignment you may have to use a non-default allocator. See defaultallocator.h for alignment and grow rate behaviour details.
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.
- Note
- The 'Base' in BaseArray doesn't indicate that you should inherit from this class - it's just the most basic array template which is used as foundation by many other array templates and collections as well. The intended usage is simply BaseArray<MyDataType> myArray; 
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 linear with the number of elements which have to be moved (with n elements until the array end): 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. |  | MEMFLAGS | Use BASEARRAYFLAGS::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 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE | BaseArray () | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE | BaseArray (const ALLOCATOR &a) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE | BaseArray (ALLOCATOR &&a) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE | ~BaseArray () | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE | BaseArray (BaseArray &&src) | 
|  | 
|  | MAXON_OPERATOR_MOVE_ASSIGNMENT (BaseArray) | 
|  | 
| const Block< const T > & | ToBlock () const | 
|  | 
| const Block< T > & | ToBlock () | 
|  | 
|  | operator const Block< const T > & () const | 
|  | 
|  | operator const Block< T > & () | 
|  | 
|  | operator StridedBlock< const T > () const | 
|  | 
|  | operator StridedBlock< T > () | 
|  | 
| template<typename DUMMY  = T, typename  = typename std::enable_if<STD_IS_REPLACEMENT(scalar, DUMMY)>::type> | 
|  | operator Block< const Byte > () const | 
|  | 
| template<typename DUMMY  = T, typename  = typename std::enable_if<STD_IS_REPLACEMENT(scalar, DUMMY)>::type> | 
|  | operator Block< Byte > () | 
|  | 
| 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 > | AppendBlock (const MoveBlock< T > &values) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (Block< typename std::remove_const< T >::type > &values) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (Block< const T > &values) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (const Block< typename std::remove_const< T >::type > &values) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (const Block< const T > &values) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (Block< typename std::remove_const< T >::type > &&values) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE 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) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (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]) | 
|  | 
| template<Int CS, BASEARRAYFLAGS MF, typename A > | 
| MAXON_IMPLICIT MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (BaseArray< T, CS, MF, A > &a) | 
|  | 
| template<Int CS, BASEARRAYFLAGS MF, typename A > | 
| MAXON_IMPLICIT MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (const BaseArray< T, CS, MF, A > &a) | 
|  | 
| template<Int CS, BASEARRAYFLAGS MF, typename A > | 
| MAXON_IMPLICIT MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (BaseArray< T, CS, MF, A > &&a) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Append (const std::initializer_list< T > &values) | 
|  | 
| template<typename ARG > | 
| MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > | Insert (Int position, ARG &&x) | 
|  | 
| template<typename... ARGS> | 
| MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< sizeof...(ARGS) !=1, ResultRef< T > >::type | Insert (Int position, ARGS &&... args) | 
|  | 
| ResultPtr< T > | Insert (Int position, Block< typename std::remove_const< T >::type > &values) | 
|  | 
| ResultPtr< T > | Insert (Int position, Block< const T > &values) | 
|  | 
| ResultPtr< T > | Insert (Int position, const Block< typename std::remove_const< T >::type > &values) | 
|  | 
| ResultPtr< T > | Insert (Int position, const Block< const T > &values) | 
|  | 
| ResultPtr< T > | Insert (Int position, Block< typename std::remove_const< T >::type > &&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 > | Insert (Int position, MoveBlock< T > &&values) | 
|  | 
| template<Int CS, BASEARRAYFLAGS MF, typename A > | 
| MAXON_IMPLICIT MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Insert (Int position, BaseArray< T, CS, MF, A > &a) | 
|  | 
| template<Int CS, BASEARRAYFLAGS MF, typename A > | 
| MAXON_IMPLICIT MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Insert (Int position, const BaseArray< T, CS, MF, A > &a) | 
|  | 
| template<Int CS, BASEARRAYFLAGS MF, typename A > | 
| MAXON_IMPLICIT MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr< T > | Insert (Int position, BaseArray< T, CS, MF, A > &&a) | 
|  | 
| ResultPtr< T > | InsertBlock (Int position, const Block< const T > &values) | 
|  | 
| ResultPtr< T > | Insert (Int position, const std::initializer_list< T > &values) | 
|  | 
| ResultPtr< T > | InsertBlock (Int position, const MoveBlock< T > &values) | 
|  | 
| template<typename... ARGS> | 
| MAXON_ATTRIBUTE_FORCE_INLINE ResultMemT< Iterator > | InsertBlock (Iterator position, ARGS &&... args) | 
|  | 
| template<typename... ARGS> | 
| MAXON_ATTRIBUTE_FORCE_INLINE ResultMemT< Iterator > | Insert (Iterator position, ARGS &&... args) | 
|  | 
| ResultPtr< T > | Erase (Int position, Int eraseCnt=1) | 
|  | 
| Iterator | Erase (Iterator position, Int eraseCnt=1) | 
|  | 
| 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< const T, STRIDED > &block) const | 
|  | 
| template<Bool STRIDED> | 
| MAXON_ATTRIBUTE_FORCE_INLINE Int | GetBlock (Int position, Block< T, STRIDED > &block) | 
|  | 
| template<Bool STRIDED> | 
| MAXON_ATTRIBUTE_FORCE_INLINE ConstIterator | GetBlock (ConstIterator position, Block< const T, STRIDED > &block) const | 
|  | 
| template<Bool STRIDED> | 
| MAXON_ATTRIBUTE_FORCE_INLINE Iterator | GetBlock (Iterator position, Block< T, STRIDED > &block) | 
|  | 
| 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 | Resize (Int newCnt, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::DEFAULT) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE Bool | Pop (T *dst=nullptr) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE Int | GetIndex (const T &x) const | 
|  | 
| ResultMem | EnsureCapacity (Int requestedCapacity, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) | 
|  | 
| ResultMem | SetCapacityHint (Int requestedCapacity, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) | 
|  | 
| template<typename BASEARRAY , typename  = typename std::enable_if<STD_IS_REPLACEMENT(same, typename std::decay<BASEARRAY>::type, BaseArray)>::type> | 
| MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | AppendAllImpl (BASEARRAY &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank1) | 
|  | 
| template<typename BLOCK , typename  = typename std::enable_if<STD_IS_REPLACEMENT(same, typename std::decay<BLOCK>::type, Block<T>) || STD_IS_REPLACEMENT(same, typename std::decay<BLOCK>::type, Block<const T>)>::type> | 
| MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | AppendAllImpl (BLOCK &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank2) | 
|  | 
| 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 () | 
|  | 
| ResultMem | MoveAndShrink (BaseArray< T, MINCHUNKSIZE, MEMFLAGS, ALLOCATOR > &dst, Int position, Int moveCnt) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE Block< T > | Disconnect () | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE void | Connect (const Block< T > &block, Int capacity=0) | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE ALLOCATOR & | GetAllocator () | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE const ALLOCATOR & | GetAllocator () const | 
|  | 
| UniqueHash | GetUniqueHashCode () const | 
|  | 
| constexpr MAXON_ATTRIBUTE_FORCE_INLINE | ArrayBase (ARGS &&... args) | 
|  | 
| ArrayImpl< BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator > & > | ToArray () | 
|  | 
| ArrayImpl< const BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator > & > | ToArray () const | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE | operator ArrayImpl< BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator > & > () | 
|  | 
| MAXON_ATTRIBUTE_FORCE_INLINE | operator ArrayImpl< const BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, 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 | 
|  |