BaseArray< T, MINCHUNKSIZE, MEMFLAGS, ALLOCATOR > Class Template Reference Data Structures

#include <basearray.h>

Inheritance diagram for BaseArray< T, MINCHUNKSIZE, MEMFLAGS, ALLOCATOR >:

详细描述

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.

注意
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)

注意
: 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 使用 BASEARRAYFLAGS::NONE unless you know the object can be moved and/or copied.
ALLOCATOR Class for memory allocation.
注意
Note that the array element class has special requirements regarding copy and move constructors .
另请参阅
$ref arrays

Public Types

using  AllocatorType = ALLOCATOR
using  Iterator = BaseIterator < BaseArray , false >
using  ConstIterator = BaseIterator < const BaseArray , false >
using  Super = ArrayBase < BaseArray < T, MINCHUNKSIZE, MEMFLAGS, ALLOCATOR >, T, BaseArrayData< T, ALLOCATOR, STD_IS_REPLACEMENT (empty, ALLOCATOR)>, DefaultCompare >
-  Public Types inherited from Collection< BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, T, BaseArrayData< T, DefaultAllocator, STD_IS_REPLACEMENT(empty, DefaultAllocator)> >
using  Super = BaseCollection < BaseArray < T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, BaseArrayData< T, DefaultAllocator , STD_IS_REPLACEMENT (empty, DefaultAllocator )> >
using  ValueType = T
-  Public Types inherited from BaseCollection< BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, BaseArrayData< T, DefaultAllocator, STD_IS_REPLACEMENT(empty, DefaultAllocator)> >
using  IsCollection = std::true_type

公共成员函数

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  重置 ()
void  Flush ()
MAXON_ATTRIBUTE_FORCE_INLINE Int   GetCount () const
MAXON_ATTRIBUTE_FORCE_INLINE Int   GetCapacityCount () const
const MAXON_ATTRIBUTE_FORCE_INLINE T &  operator[] ( Int idx) const
MAXON_ATTRIBUTE_FORCE_INLINE T &  operator[] ( Int idx)
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef < T >  Append ()
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef < T >  Append (const T &x)
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef < T >  Append (T &&x)
MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr < T >  Append (const Block < const T > &values)
ResultPtr < T >  Append (const MoveBlock < T > &values)
MAXON_ATTRIBUTE_FORCE_INLINE ResultPtr < T >  Append (const std::initializer_list< T > &values)
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 >  Insert ( Int position, const Block < const T > &values)
ResultPtr < T >  Insert ( Int position, const std::initializer_list< T > &values)
ResultPtr < T >  Insert ( Int position, const MoveBlock < T > &values)
ResultMemT < Iterator Insert ( 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)
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)
const MAXON_ATTRIBUTE_FORCE_INLINE T *  GetFirst () const
MAXON_ATTRIBUTE_FORCE_INLINE T *  GetFirst ()
const MAXON_ATTRIBUTE_FORCE_INLINE 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 )
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  连接 (const Block < T > &block, Int capacity=0)
MAXON_ATTRIBUTE_FORCE_INLINE ALLOCATOR &  GetAllocator ()
const MAXON_ATTRIBUTE_FORCE_INLINE ALLOCATOR &  GetAllocator () const
-  Public Member Functions inherited from ArrayBase< BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, T, BaseArrayData< T, DefaultAllocator, STD_IS_REPLACEMENT(empty, DefaultAllocator)>, DefaultCompare >
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
-  Public Member Functions inherited from ArrayBase0< BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, T, BaseArrayData< T, DefaultAllocator, STD_IS_REPLACEMENT(empty, DefaultAllocator)>, DefaultCompare >
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 >  添加 (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
HashInt   GetHashCode () const
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator < BaseArray < T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator > >  切片 ( Int start)
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator < const BaseArray < T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator > >  切片 ( Int start) const
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator < BaseArray < T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator > >  切片 ( Int start, Int end)
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator < const BaseArray < T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator > >  切片 ( Int start, Int end) const
BlockIterator < BaseArray < T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, T, false, false >  GetBlocks ()
BlockIterator < BaseArray < T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, T, true, false >  GetBlocks () const
BlockIterator < BaseArray < T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, T, false, true >  GetStridedBlocks ()
BlockIterator < BaseArray < T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, T, true, true >  GetStridedBlocks () const
-  Public Member Functions inherited from Collection< BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, T, BaseArrayData< T, DefaultAllocator, STD_IS_REPLACEMENT(empty, DefaultAllocator)> >
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_REPLACEMENT (scalar, T)
DummyParamType &  type ()
Result < Bool ForEach (FN &&callback) const
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
-  Public Member Functions inherited from BaseCollection< BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, BaseArrayData< T, DefaultAllocator, STD_IS_REPLACEMENT(empty, DefaultAllocator)> >
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_REPLACEMENT (same, typename std::decay< COMPARE >::type, EQUALITY ), 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=nullptr) const
MAXON_ATTRIBUTE_FORCE_INLINE Bool   ContainsAll (COLLECTION2 &&other) const
Bool   ContainsAllImpl (COLLECTION2 &&other, OverloadRank0 ) const

私有成员函数

  MAXON_DISALLOW_COPY_AND_ASSIGN ( BaseArray )
template<typename COLLECTION2 >
Result < void >  AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0 )
template<typename BASEARRAY , typename = typename std::enable_if<STD_IS_REPLACEMENT(same, typename std::decay<BASEARRAY>::type, BaseArray)>::type>
Result < void >  CopyFromImpl (BASEARRAY && src , COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank4 )
template<typename BLOCK , typename = typename std::enable_if<STD_IS_REPLACEMENT(same, typename std::decay<BLOCK>::type, Block<T>)>::type>
Result < void >  CopyFromImpl (BLOCK && src , COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank3 )
  BaseArray (const Block < T > &block, Int capacity)
MAXON_WARN_UNUSED T *  IncreaseCapacity ( Int increment=1, COLLECTION_RESIZE_FLAGS resizeFlags= COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY )
MAXON_WARN_UNUSED T *  InsertWithoutConstructor ( Int idx, Int increment=1)
ResultMem   FitToSize ( Int newCapacity)

Friends

class  GenericBaseArray

Additional Inherited Members

-  Static Public Member Functions inherited from Collection< BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, T, BaseArrayData< T, DefaultAllocator, STD_IS_REPLACEMENT(empty, DefaultAllocator)> >
static const T &  GetMapKey (const T &key)
-  Public Attributes inherited from Collection< BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, T, BaseArrayData< T, DefaultAllocator, STD_IS_REPLACEMENT(empty, DefaultAllocator)> >
  VALUETYPE
-  Static Public Attributes inherited from ArrayBase0< BaseArray< T, BASEARRAY_DEFAULT_CHUNK_SIZE, BASEARRAYFLAGS::NONE, DefaultAllocator >, T, BaseArrayData< T, DefaultAllocator, STD_IS_REPLACEMENT(empty, DefaultAllocator)>, DefaultCompare >
static const COLLECTION_KIND   KIND

Member Typedef Documentation

◆  AllocatorType

using AllocatorType = ALLOCATOR

◆  Iterator

using Iterator = BaseIterator < BaseArray , false>

Iterator allows read and write access to array elements.

◆  ConstIterator

using ConstIterator = BaseIterator <const BaseArray , false>

Iterator for read-only access to array elements.

◆  Super

using Super = ArrayBase < BaseArray <T, MINCHUNKSIZE, MEMFLAGS, ALLOCATOR>, T, BaseArrayData<T, ALLOCATOR, STD_IS_REPLACEMENT (empty, ALLOCATOR)>, DefaultCompare >

构造函数 & 析构函数文档编制

◆  BaseArray() [1/5]

MAXON_ATTRIBUTE_FORCE_INLINE BaseArray ( )

Default constructor. Creates an empty arry.

◆  BaseArray() [2/5]

MAXON_ATTRIBUTE_FORCE_INLINE BaseArray ( const ALLOCATOR &  a )
explicit

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

◆  BaseArray() [3/5]

MAXON_ATTRIBUTE_FORCE_INLINE BaseArray ( ALLOCATOR &&  a )
explicit

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

◆  ~BaseArray()

MAXON_ATTRIBUTE_FORCE_INLINE ~ BaseArray ( )

Destructs the array with all its elements.

◆  BaseArray() [4/5]

MAXON_ATTRIBUTE_FORCE_INLINE BaseArray ( BaseArray < T, MINCHUNKSIZE, MEMFLAGS, ALLOCATOR > &&  src )

Move constructor.

◆  BaseArray() [5/5]

BaseArray ( const Block < T > &  block ,
Int   capacity  
)
private

Constructs a BaseArray such that it uses the given block as memory buffer.

参数
[in] block Memory block to use for the array. The array takes ownership of the memory.
[in] capacity Capacity of the buffer. If a non-positive value is given, the capacity is assumed to be the same as the size.
注意
The memory pointed to by block must have been allocated by the allocator that the array is using.

成员函数文档编制

◆  MAXON_DISALLOW_COPY_AND_ASSIGN()

MAXON_DISALLOW_COPY_AND_ASSIGN ( BaseArray < T, MINCHUNKSIZE, MEMFLAGS, ALLOCATOR >  )
private

◆  MAXON_OPERATOR_MOVE_ASSIGNMENT()

MAXON_OPERATOR_MOVE_ASSIGNMENT ( BaseArray < T, MINCHUNKSIZE, MEMFLAGS, ALLOCATOR >  )

Move assignment operator.

◆  ToBlock() [1/2]

const Block <const T>& ToBlock ( ) const

Returns a Block<const T> which represents the elements of the array.

返回
The content of this array as a block.

◆  ToBlock() [2/2]

const Block <T>& ToBlock ( )

Returns a Block<T> which represents the elements of the array.

返回
The content of this array as a block.

◆  operator const Block< const T > &()

operator const Block < const T > & ( ) const

Converts this BaseArray to a Block<const T> which represents the elements of the array.

返回
The content of this array as a block.

◆  operator const Block< T > &()

operator const Block < T > & ( )

Converts this BaseArray to a Block<T> which represents the elements of the array.

返回
The content of this array as a block.

◆  operator StridedBlock< const T >()

operator StridedBlock < const T > ( ) const

Converts this BaseArray to a StridedBlock<const T> which represents the elements of the array. The block will have the natural stride of T.

返回
The content of this array as a strided block.

◆  operator StridedBlock< T >()

operator StridedBlock < T > ( )

Converts this BaseArray to a StridedBlock<T> which represents the elements of the array. The block will have the natural stride of T.

返回
The content of this array as a strided block.

◆  operator Block< const Byte >()

operator Block < const Byte > ( ) const

Operator for passing a BaseArray to a Block<const Byte> which represents the raw bytes of the array. This operator is only supported when T is a scalar type.

返回
The content of this array as a raw Byte block.

◆  operator Block< Byte >()

operator Block < Byte > ( )

Operator for passing a BaseArray to a Block<Byte> which represents the raw bytes of the array. This operator is only supported when T is a scalar type.

返回
The content of this array as a raw Byte block.

◆  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.

返回
Number of array elements.

◆  GetCapacityCount()

MAXON_ATTRIBUTE_FORCE_INLINE Int GetCapacityCount ( ) const

Gets the number of elements for which memory has been allocated (this is usually bigger than GetCount() ).

返回
Number of array elements for which memory has been allocated.

◆  operator[]() [1/2]

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

Array (subscript) operator for const objects.

参数
[in] idx Element index (if it's out of bounds you will get an error in debug code only, otherwise it will crash).
返回
Array element.

◆  operator[]() [2/2]

MAXON_ATTRIBUTE_FORCE_INLINE T& operator[] ( Int   idx )

Array (subscript) operator for non-const objects.

参数
[in] idx Element index (if it's out of bounds you will get an error in debug code only, otherwise it will crash).
返回
Array element.

◆  Append() [1/6]

MAXON_ATTRIBUTE_FORCE_INLINE ResultRef <T> Append ( )

Adds a new element at the end of the array.

返回
Element reference or OutOfMemoryError if the allocation failed.

◆  Append() [2/6]

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

Adds a new element at the end of the array and initializes it with a copy of x.

参数
[in] x Value to be copied.
返回
Element reference or OutOfMemoryError if the allocation failed.

◆  Append() [3/6]

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

Adds a new element at the end of the array and moves the content of x to it.

参数
[in] x Value to be moved.
返回
Element reference or OutOfMemoryError if the allocation failed.

◆  Append() [4/6]

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

Appends new elements at the end of the array.

参数
[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.
返回
Element pointer or OutOfMemoryError if the allocation failed.

◆  Append() [5/6]

ResultPtr <T> Append ( const MoveBlock < T > &  values )

Appends new elements at the end of the array.

参数
[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.
返回
Element pointer or OutOfMemoryError if the allocation failed.

◆  Append() [6/6]

MAXON_ATTRIBUTE_FORCE_INLINE 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.
返回
Element pointer or OutOfMemoryError if the allocation failed.

◆  Insert() [1/11]

MAXON_ATTRIBUTE_FORCE_INLINE ResultRef <T> Insert ( Int   position )

Inserts a new default element at index position.

参数
[in] position Insert index (the array size will increase and the existing elements are moved).
返回
Element reference or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆  Insert() [2/11]

MAXON_ATTRIBUTE_FORCE_INLINE ResultMemT < Iterator > Insert ( Iterator   position )

Inserts a new default element at iterator position.

参数
[in] position Insert position.
返回
Iterator for the new element or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆  Insert() [3/11]

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.

参数
[in] position Insert index (the array size will increase and the existing elements are moved).
[in] x Value to be copied.
返回
Element reference or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆  Insert() [4/11]

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.

参数
[in] position Insert position.
[in] x Value to be copied.
返回
Iterator for the new element or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆  Insert() [5/11]

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.

参数
[in] position Insert index (the array size will increase and the existing elements are moved).
[in] x Value to be moved.
返回
Element reference or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆  Insert() [6/11]

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.

参数
[in] position Insert position.
[in] x Value to be moved.
返回
Iterator for the new element or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆  Insert() [7/11]

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

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.
返回
Element pointer or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆  Insert() [8/11]

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 ).

参数
[in] position Insert index (the array size will increase and the existing elements are moved).
[in] values Initializer list with values to be copied.
返回
Element pointer or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆  Insert() [9/11]

ResultPtr <T> Insert ( Int   position ,
const MoveBlock < T > &  values  
)

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.
返回
Element pointer or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆  Insert() [10/11]

ResultMemT < Iterator > Insert ( 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.
返回
Iterator for the new element or OutOfMemoryError if the allocation failed (or position is out of boundaries).

◆  Insert() [11/11]

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.
返回
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.

参数
[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.
返回
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.

参数
[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.
返回
Iterator for the element that is now at position (its operator Bool() will return false if something failed).

◆  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.

参数
[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.
返回
OK on success, FAILED 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.

参数
[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.
返回
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 < 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.

参数
[in] position Element index.
[out] block Block which contains the element at position .
返回
Start index of the block. The requested element can be found within the block at position - start index.

◆  GetBlock() [2/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 position . For a BaseArray , this yields the whole array as a block.

参数
[in] position Element index.
[out] block Block which contains the element at position .
返回
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 ConstIterator GetBlock ( 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.

参数
[in] position Element position.
[out] block Block which contains the element at position .
返回
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 < 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.

参数
[in] position Element position.
[out] block Block which contains the element at position .
返回
Start iterator of the block. The requested element can be found within the block at index position - start iterator.

◆  GetFirst() [1/2]

const MAXON_ATTRIBUTE_FORCE_INLINE T* GetFirst ( ) const

Returns the first element of the array. For the BaseArray this is a pointer to a continuous block of memory which contains all elements of the array. You can use it for operations like writing to a stream or copying or moving memory up to the number of allocated elements.

返回
Pointer to the first element (nullptr if the array is empty).

◆  GetFirst() [2/2]

MAXON_ATTRIBUTE_FORCE_INLINE T* GetFirst ( )

Returns the first element of the array. For the BaseArray this is a pointer to a continuous block of memory which contains all elements of the array. You can use it for operations like reading from a stream or copying or moving memory up to the number of allocated elements.

返回
Pointer to the first element (nullptr if the array is empty).

◆  GetLast() [1/2]

const MAXON_ATTRIBUTE_FORCE_INLINE T* GetLast ( ) const

Returns the last element of the array.

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

◆  GetLast() [2/2]

MAXON_ATTRIBUTE_FORCE_INLINE T* GetLast ( )

Returns the last element of the array.

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

◆  Resize()

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.
返回
FAILED if allocation failed.

◆  Pop()

MAXON_ATTRIBUTE_FORCE_INLINE Bool Pop ( T *  dst = nullptr )

Deletes the last element.

参数
[out] dst Nullptr or pointer to return value.
返回
True if there was at least one element.

◆  GetIndex()

MAXON_ATTRIBUTE_FORCE_INLINE 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.

返回
Index of element or InvalidArrayIndex (not element of this).

◆  EnsureCapacity()

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

Increases the internal capacity of this array (if necessary) so that it can hold at least the given number of elements without further memory allocations.

参数
[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.
返回
FAILED if allocation failed.

◆  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.

注意
This is just a hint. It does not guarantee that the collection will be able to store the number of indicated elements. Only for a BaseArray , this does the same as EnsureCapacity() .
参数
[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.
返回
FAILED if allocation failed.

◆  AppendAllImpl()

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

Specialization of AppendAllImpl, used by BaseCollection::AppendAll .

◆  CopyFromImpl() [1/2]

Result <void> CopyFromImpl ( BASEARRAY &&  src ,
COLLECTION_RESIZE_FLAGS   resizeFlags ,
OverloadRank4    
)
private

Specialization of CopyFromImpl for a BaseArray source, used by BaseCollection::CopyFrom .

◆  CopyFromImpl() [2/2]

Result <void> CopyFromImpl ( BLOCK &&  src ,
COLLECTION_RESIZE_FLAGS   resizeFlags ,
OverloadRank3    
)
private

Specialization of CopyFromImpl for a Block source, used by BaseCollection::CopyFrom .

◆  Swap()

MAXON_ATTRIBUTE_FORCE_INLINE void Swap ( Iterator   a ,
Iterator   b  
)

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.

◆  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.

返回
Memory size in bytes.

◆  Begin() [1/2]

MAXON_ATTRIBUTE_FORCE_INLINE ConstIterator Begin ( ) const

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

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

◆  Begin() [2/2]

MAXON_ATTRIBUTE_FORCE_INLINE Iterator Begin ( )

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

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

◆  End() [1/2]

MAXON_ATTRIBUTE_FORCE_INLINE ConstIterator End ( ) const

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.

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

◆  End() [2/2]

MAXON_ATTRIBUTE_FORCE_INLINE Iterator End ( )

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.

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

◆  MoveAndShrink()

ResultMem MoveAndShrink ( BaseArray < T, MINCHUNKSIZE, MEMFLAGS, ALLOCATOR > &  dst ,
Int   position ,
Int   moveCnt  
)

Moves elements to another (empty) array.

参数
[out] dst The destination array.
[in] position Index of the first element to be moved.
[in] moveCnt Number of elements to be moved.
返回
OK on success.

◆  Disconnect()

MAXON_ATTRIBUTE_FORCE_INLINE Block <T> Disconnect ( )

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

返回
Block of the memory buffer.
注意
The memory needs to be freed with the allocator that the array is using.

◆  Connect()

MAXON_ATTRIBUTE_FORCE_INLINE void Connect ( const Block < T > &  block ,
Int   capacity = 0  
)

Sets the array's memory buffer to the given block. The current content of this array is freed before.

参数
[in] block Memory block to use for the array. The array takes ownership of the memory.
[in] capacity Capacity of the buffer. If a non-positive value is given, the capacity is assumed to be the same as the size.
注意
The memory pointed to by block must have been allocated by the allocator that the array is using.

◆  GetAllocator() [1/2]

MAXON_ATTRIBUTE_FORCE_INLINE ALLOCATOR& GetAllocator ( )

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

返回
Allocator reference.

◆  GetAllocator() [2/2]

const MAXON_ATTRIBUTE_FORCE_INLINE ALLOCATOR& GetAllocator ( ) const

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

返回
Allocator reference.

◆  IncreaseCapacity()

MAXON_WARN_UNUSED T* IncreaseCapacity ( Int   increment = 1 ,
COLLECTION_RESIZE_FLAGS   resizeFlags = COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY  
)
private

BaseArray specific: Appends uninitialized element(s) at the end of the array.

参数
[in] increment Number of elements to be appended.
[in] resizeFlags If ON_GROW_FIT_TO_SIZE is set, the collection will use only as much memory as needed to hold the data.
返回
Pointer to the element (the constructor hasn't been called yet) or nullptr.

◆  InsertWithoutConstructor()

MAXON_WARN_UNUSED T* InsertWithoutConstructor ( Int   idx ,
Int   increment = 1  
)
private

BaseArray specific: Inserts uninitialized element(s) at the specified index. This does not call the constructor! Use Insert() unless you deal with PODs that shall not be initialized for a very good reason!

参数
[in] idx Index at which elements shall be inserted (0 <= idx <= cnt).
[in] increment Number of elements to be inserted.
返回
Pointer to the element (the constructor hasn't been called yet) or nullptr.

◆  FitToSize()

ResultMem FitToSize ( Int   newCapacity )
private

Friends And Related Function Documentation

◆  GenericBaseArray

friend class GenericBaseArray
friend