ArrayInterface< TYPE > Class Template Reference

#include <array.h>

Inheritance diagram for ArrayInterface< TYPE >:

Detailed Description

template<typename TYPE>
class maxon::ArrayInterface< TYPE >

ArrayInterface is an interface which provides the usual array functions as virtual methods. Each standard array of the MAXON API can be represented as such an interface, so this allows to write non-template functions which nevertheless are able to deal with any kind of array.

If the function won't modify both the structure and values of the array, you should use a const ArrayInterface with const elements:

void Func(const ArrayInterface<const Char>& array);
BlockArray<Char> myArray;
Func(myArray); // OK
BaseArray<Char> myArray2;
Func(myArray2); // OK

As the access to the array happens via virtual methods, there is an inevitable performance penalty. Often this will be negligible, but if not, you can use the GetBlock function to obtain a fraction of the array as a Block of array elements which are laid out regularly in memory. Then as long as the elements you need to access are within that same block, no further virtual method invocations are necessary. E.g., a BaseArray consists of just a single block, and a BlockArray of a small number of blocks (small compared to the number of elements). The iterator of an ArrayInterface already takes this into account, so it uses the minimum possible number of virtual method invocations.

For an array which shall be modified, use WritableArrayInterface as type of the function parameter instead.

Template Parameters
TYPEType of elements of the array.

Public Types

using ValueType = TYPE
 
using Super = StaticArrayInterface< TYPE >
 
using Iterator = typename Super::template IteratorTemplate< ArrayInterface >
 
using ConstIterator = typename Super::template IteratorTemplate< const ArrayInterface >
 
- 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

 MAXON_ADD_TO_COPY_ON_WRITE_REFERENCE_CLASS (public:using ValueType=TYPE;)
 
TYPE & operator[] (Int index)
 
MAXON_METHOD Int GetBlock (Int index, Block< const TYPE > &block) const
 
Int GetBlock (Int index, Block< typename Super::NonConstValueType > &block)
 
MAXON_METHOD Result< void > PrivateInsert (Int index, const StridedBlock< const TYPE > &values, Bool move, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
 
MAXON_METHOD ResultMem Resize (Int count, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::DEFAULT)
 
MAXON_METHOD ResultMem SetCapacityHint (Int requestedCapacity, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
 
MAXON_METHOD ResultRef< TYPE > Insert (Int index)
 
MAXON_FUNCTION ResultRef< TYPE > Insert (Int index, const TYPE &value)
 
MAXON_FUNCTION ResultRef< TYPE > Insert (Int index, TYPE &&value)
 
MAXON_METHOD ResultMem Insert (Int index, const Block< const TYPE > &values)
 
MAXON_METHOD ResultMem Insert (Int index, const MoveBlock< TYPE > &values)
 
MAXON_FUNCTION ResultMem InsertBlock (Int index, const Block< const TYPE > &values)
 
MAXON_FUNCTION ResultMem InsertBlock (Int index, const MoveBlock< TYPE > &values)
 
MAXON_METHOD ResultRef< TYPE > Append ()
 
MAXON_FUNCTION ResultRef< TYPE > Append (const TYPE &value)
 
MAXON_FUNCTION ResultRef< TYPE > Append (TYPE &&value)
 
template<typename A >
MAXON_FUNCTION ResultRef< TYPE > Append (A &&value)
 
MAXON_FUNCTION Bool Pop ()
 
MAXON_FUNCTION Bool Pop (TYPE *dst)
 
MAXON_METHOD ResultMem Erase (Int index, Int count=1)
 
template<typename C >
ArrayInterface::template IteratorTemplate< C > Erase (const typename ArrayInterface::template IteratorTemplate< C > &it)
 
MAXON_METHOD ResultMem SwapErase (Int index, Int count=1)
 
MAXON_METHOD void Reset ()
 
MAXON_METHOD void Flush ()
 
MAXON_METHOD Result< void > CopyFrom (const ArrayInterface &other)
 
MAXON_METHOD void SetPersistentIdGenerator (const PersistentIdGenerator &generator)
 
MAXON_METHOD Int GetMemorySize () const
 
template<typename DT >
MAXON_FUNCTION Bool HasType () const
 
template<typename DT >
MAXON_FUNCTION void AssertType () const
 
template<typename T2 >
ArrayInterface< T2 > & AssertCast ()
 
template<typename T2 >
const ArrayInterface< T2 > & AssertCast () const
 
 operator const ArrayInterface< const TYPE > & () const
 
 operator const ArrayInterface< typename std::conditional< STD_IS_REPLACEMENT (same, const TYPE, const Generic)
 
 operator ArrayInterface< typename std::conditional< STD_IS_REPLACEMENT (same, TYPE, Generic)
 
Generic ::typeoperator const NonConstArray< TYPE > & ()
 
 operator const NonConstArray< typename std::conditional< STD_IS_REPLACEMENT (same, TYPE, Generic)
 
 MAXON_ADD_TO_CONST_REFERENCE_CLASS (using Iterator=typename ArrayInterface::ConstIterator;using ConstIterator=typename ArrayInterface::ConstIterator;)
 
MAXON_FUNCTION ArrayInterface< TYPE >::ConstIterator Begin () const
 
Iterator Begin ()
 
MAXON_FUNCTION ArrayInterface< TYPE >::ConstIterator End () const
 
Iterator End ()
 
MAXON_METHOD Int GetBlock (Int index, SimdBlock< const TYPE > &block) const
 
Int GetBlock (Int index, StridedBlock< const TYPE > &block) const
 
Int GetBlock (Int index, Block< const TYPE, false > &block) const
 
MAXON_METHOD Result< IntGetBlock (Int index, SimdBlock< NonConstValueType > &block)
 
Int GetBlock (Int index, StridedBlock< NonConstValueType > &block)
 
- Public Member Functions inherited from ArrayBase0< ArrayInterface< TYPE >, TYPE, StaticArrayInterface< TYPE >, DefaultCompare >
MAXON_ATTRIBUTE_FORCE_INLINE ArrayBase0 (ARGS &&... args)
 
Bool IsValidIndex (Int index) const
 
Result< void > CheckValidIndex (Int index) const
 
Int FindIndex (typename ByValueParam< TYPE >::type v, Int start) const
 
Int FindLastIndex (typename ByValueParam< TYPE >::type v) const
 
Int FindLastIndex (typename ByValueParam< TYPE >::type v, Int start) const
 
Bool EraseFirst (typename ByValueParam< TYPE >::type v)
 
Int EraseAll (typename ByValueParam< TYPE >::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
 
HashInt GetHashCode () const
 
UniqueHash GetUniqueHashCode () const
 
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< ArrayInterface< TYPE > > Slice (Int start)
 
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< const ArrayInterface< TYPE > > Slice (Int start) const
 
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< ArrayInterface< TYPE > > Slice (Int start, Int end)
 
MAXON_ATTRIBUTE_FORCE_INLINE AutoIterator< const ArrayInterface< TYPE > > Slice (Int start, Int end) const
 
BlockIterator< ArrayInterface< TYPE >, TYPE, false, false > GetBlocks ()
 
BlockIterator< ArrayInterface< TYPE >, TYPE, true, false > GetBlocks () const
 
BlockIterator< ArrayInterface< TYPE >, TYPE, false, true > GetStridedBlocks ()
 
BlockIterator< ArrayInterface< TYPE >, TYPE, true, true > GetStridedBlocks () const
 
- Public Member Functions inherited from Collection< COLLECTION, VALUETYPE, SUPER >
template<typename... ARGS>
MAXON_ATTRIBUTE_FORCE_INLINE Collection (ARGS &&... args)
 
ResultOk< void > VariadicAppend ()
 
template<typename V , typename... VALUES>
Result< void > VariadicAppend (V &&value, VALUES &&... rest)
 
 operator ValueReceiver< const VALUETYPE & > ()
 
 operator ValueReceiver< VALUETYPE && > ()
 
 operator ValueReceiver< typename std::conditional< STD_IS_REPLACEMENT (scalar, VALUETYPE)
 
DummyParamType & type ()
 
template<typename FN >
Result< BoolForEach (FN &&callback) const
 
template<typename FN >
Result< BoolForEach (FN &&callback)
 
template<typename H = COLLECTION>
H::Iterator Find (typename ByValueParam< VALUETYPE >::type v)
 
template<typename H = COLLECTION>
H::ConstIterator Find (typename ByValueParam< VALUETYPE >::type v) const
 
Int FindIndex (typename ByValueParam< VALUETYPE >::type v) const
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool Contains (typename ByValueParam< VALUETYPE >::type v) const
 
- Public Member Functions inherited from BaseCollection< COLLECTION, SUPER >
template<typename... ARGS>
MAXON_ATTRIBUTE_FORCE_INLINE BaseCollection (ARGS &&... args)
 
template<typename COLLECTION2 >
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type operator== (const COLLECTION2 &other) const
 
template<typename COLLECTION2 >
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type operator!= (const COLLECTION2 &other) const
 
template<typename COMPARE = EqualityCompare, typename COLLECTION2 >
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value &&!STD_IS_REPLACEMENT(same, typename std::decay< COMPARE >::type, EQUALITY), Bool >::type IsEqual (const COLLECTION2 &other, COMPARE &&cmp=COMPARE()) const
 
template<typename COLLECTION2 >
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
 
template<typename COLLECTION2 >
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE)
 
template<typename COLLECTION2 >
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > Subtract (COLLECTION2 &&other)
 
template<typename COLLECTION2 >
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > Intersect (const COLLECTION2 &other)
 
template<typename COLLECTION2 >
Bool Intersects (const COLLECTION2 &other) const
 
template<typename COLLECTION2 >
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > CopyFromImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank0)
 
template<typename COLLECTION2 >
Result< void > AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0)
 
template<typename COLLECTION2 >
Result< void > IntersectImpl (COLLECTION2 &&other, OverloadRank0)
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool IsEmpty () const
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool IsPopulated () const
 
String ToString (const FormatStatement *formatStatement=nullptr) const
 
template<typename COLLECTION2 >
MAXON_ATTRIBUTE_FORCE_INLINE Bool ContainsAll (COLLECTION2 &&other) const
 
template<typename COLLECTION2 >
Bool ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const
 

Public Attributes

 DeleteReturnType01
 
const Generic ::typeconst
 
 DeleteReturnType02
 
- Public Attributes inherited from Collection< COLLECTION, VALUETYPE, SUPER >
 VALUETYPE
 

Private Member Functions

 MAXON_INTERFACE_SIMPLE_VIRTUAL_DERIVED (ArrayInterface, MAXON_REFERENCE_COPY_ON_WRITE)
 

Static Private Member Functions

static ArrayInterfaceAlloc (MAXON_SOURCE_LOCATION_DECLARATION)
 

Friends

template<typename ARRAY >
class ArrayImpl
 
class StrongCOWRefHandler
 

Additional Inherited Members

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

Member Typedef Documentation

◆ ValueType

using ValueType = TYPE

◆ Super

using Super = StaticArrayInterface<TYPE>

◆ Iterator

using Iterator = typename Super::template IteratorTemplate<ArrayInterface>

◆ ConstIterator

using ConstIterator = typename Super::template IteratorTemplate<const ArrayInterface>

Member Function Documentation

◆ MAXON_INTERFACE_SIMPLE_VIRTUAL_DERIVED()

MAXON_INTERFACE_SIMPLE_VIRTUAL_DERIVED ( ArrayInterface< TYPE >  ,
MAXON_REFERENCE_COPY_ON_WRITE   
)
private

◆ MAXON_ADD_TO_COPY_ON_WRITE_REFERENCE_CLASS()

MAXON_ADD_TO_COPY_ON_WRITE_REFERENCE_CLASS ( public:using  ValueType = TYPE;)

◆ operator[]()

TYPE& operator[] ( Int  index)

◆ GetBlock() [1/7]

MAXON_METHOD Int GetBlock ( Int  index,
Block< const TYPE > &  block 
) const

Determines a contiguous non-strided block of array elements which contains the element at index. The returned blocks are guaranteed to form a partition of the array, i.e., no two blocks overlap, and they cover the whole array.

Using this method can greatly reduce the performance penalty of virtual method invocations of the Array interface as only one such invocation has to happen per block, and a block may consist of a relatively large number of elements which can then be accessed directly.

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

◆ GetBlock() [2/7]

Int GetBlock ( Int  index,
Block< typename Super::NonConstValueType > &  block 
)

◆ PrivateInsert()

MAXON_METHOD Result<void> PrivateInsert ( Int  index,
const StridedBlock< const TYPE > &  values,
Bool  move,
COLLECTION_RESIZE_FLAGS  resizeFlags = COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY 
)

For future compatibility, not implemented at the moment.

◆ Resize()

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

Parameters
[in]countNew array size.
[in]resizeFlagsSee COLLECTION_RESIZE_FLAGS.
Returns
False if allocation failed.

◆ SetCapacityHint()

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

Prepare the internal array so that it can hold at least the given number of elements with as few further memory allocations as possible.

Parameters
[in]requestedCapacityThe desired internal capacity.
[in]resizeFlagsIf ON_GROW_FIT_TO_SIZE is set, the collection will use only as much memory as needed to hold the data.
Returns
False if allocation failed.

◆ Insert() [1/5]

MAXON_METHOD ResultRef<TYPE> Insert ( Int  index)

Inserts a new element at index. The element will be default-constructed.

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

◆ Insert() [2/5]

MAXON_FUNCTION ResultRef<TYPE> Insert ( Int  index,
const TYPE &  value 
)

Inserts a new element at index position and initializes it with value.

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

◆ Insert() [3/5]

MAXON_FUNCTION ResultRef<TYPE> Insert ( Int  index,
TYPE &&  value 
)

Inserts a new element at index position and initializes it with value.

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

◆ Insert() [4/5]

MAXON_METHOD ResultMem Insert ( Int  index,
const Block< const TYPE > &  values 
)

Inserts a number of new elements at index. The elements will be copied.

Parameters
[in]indexInsertion index (the array size will increase and the existing elements are moved).
[in]valuesBlock with values to be copied. If the block points to nullptr, only its count is used, and you have to call the constructor of the new elements manually.
Returns
False if insert failed.

◆ Insert() [5/5]

MAXON_METHOD ResultMem Insert ( Int  index,
const MoveBlock< TYPE > &  values 
)

Inserts a number of new elements at index. The elements will be moved.

Parameters
[in]indexInsertion index (the array size will increase and the existing elements are moved).
[in]valuesBlock with values to be moved. If the block points to nullptr, only its count is used, and you have to call the constructor of the new elements manually.
Returns
False if insert failed.

◆ InsertBlock() [1/2]

MAXON_FUNCTION ResultMem InsertBlock ( Int  index,
const Block< const TYPE > &  values 
)

◆ InsertBlock() [2/2]

MAXON_FUNCTION ResultMem InsertBlock ( Int  index,
const MoveBlock< TYPE > &  values 
)

◆ Append() [1/4]

MAXON_METHOD ResultRef<TYPE> Append ( )

Adds a new element at the end of the array. The element will be default-constructed.

Returns
Element reference or OutOfMemoryError if the allocation failed.

◆ Append() [2/4]

MAXON_FUNCTION ResultRef<TYPE> Append ( const TYPE &  value)

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

Parameters
[in]valueValue to be appended.
Returns
Element reference or OutOfMemoryError if the allocation failed.

◆ Append() [3/4]

MAXON_FUNCTION ResultRef<TYPE> Append ( TYPE &&  value)

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

Parameters
[in]valueValue to be appended.
Returns
Element reference or OutOfMemoryError if the allocation failed.

◆ Append() [4/4]

MAXON_FUNCTION ResultRef<TYPE> Append ( A &&  value)

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

Parameters
[in]valueValue to be appended.
Returns
Element reference or OutOfMemoryError if the allocation failed.

◆ Pop() [1/2]

Deletes the last element.

Returns
True if there was at least one element.

◆ Pop() [2/2]

MAXON_FUNCTION Bool Pop ( TYPE *  dst)

Deletes the last element.

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

◆ Erase() [1/2]

MAXON_METHOD ResultMem Erase ( Int  index,
Int  count = 1 
)

Erases (removes and deletes) elements.

Parameters
[in]indexErase index.
[in]countNumber of elements to be erased (if eraseCnt is higher than what is available at position Erase() will succeed, but remove only the number of available elements).
Returns
True if operation was successul.

◆ Erase() [2/2]

ArrayInterface::template IteratorTemplate<C> Erase ( const typename ArrayInterface< TYPE >::template IteratorTemplate< C > &  it)

Erases (removes and deletes) an element.

Parameters
[in]itIterator pointing to the element to erase.
Returns
True if operation was successul.

◆ SwapErase()

MAXON_METHOD ResultMem SwapErase ( Int  index,
Int  count = 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 count elements have to be moved, but it changes the order of elements.

Parameters
[in]indexErase index.
[in]countNumber of elements to be erased (if eraseCnt is higher than what is available at position Erase() will succeed, but remove only the number of available elements).
Returns
True if operation was successul.

◆ Reset()

MAXON_METHOD void Reset ( )

Deletes all elements (calls destructors and frees memory).

◆ Flush()

MAXON_METHOD void Flush ( )

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

◆ CopyFrom()

MAXON_METHOD Result<void> CopyFrom ( const ArrayInterface< TYPE > &  other)

Sets this array to a copy of the given other array.

Parameters
[in]otherSource array.
Returns
Success of operation.

◆ SetPersistentIdGenerator()

MAXON_METHOD void SetPersistentIdGenerator ( const PersistentIdGenerator &  generator)

◆ GetMemorySize()

MAXON_METHOD Int GetMemorySize ( ) const

Calculates the memory usage for this array.

Returns
Memory size in bytes.

◆ HasType()

MAXON_FUNCTION Bool HasType ( ) const

◆ AssertType()

MAXON_FUNCTION void AssertType ( ) const

Issues a failed DebugAssert if the DataType of this array doesn't match T. If T is Generic, no check happens.

Template Parameters
DTType to check.

◆ AssertCast() [1/2]

ArrayInterface<T2>& AssertCast ( )

Casts this array to an array with elements of type T2. If T2 doesn't match the actual data type of this array, a failed DebugAssert is issued. This function only makes sense when the original array uses Generic as its type.

Template Parameters
T2Element type of the destination array.
Returns
This array, cast to an ArrayInterface of T2 elements.

◆ AssertCast() [2/2]

const ArrayInterface<T2>& AssertCast ( ) const

Casts this array to an array with elements of type T2. If T2 doesn't match the actual data type of this array, a failed DebugAssert is issued. This function only makes sense when the original array uses Generic as its type.

Template Parameters
T2Element type of the destination array.
Returns
This array, cast to an ArrayInterface of T2 elements.

◆ operator const ArrayInterface< const TYPE > &()

operator const ArrayInterface< const TYPE > & ( ) const

◆ operator const ArrayInterface< typename std::conditional< STD_IS_REPLACEMENT()

operator const ArrayInterface< typename std::conditional< STD_IS_REPLACEMENT ( same  ,
const  TYPE,
const  Generic 
)

◆ operator ArrayInterface< typename std::conditional< STD_IS_REPLACEMENT()

operator ArrayInterface< typename std::conditional< STD_IS_REPLACEMENT ( same  ,
TYPE  ,
Generic   
)

◆ operator const NonConstArray< TYPE > &()

Generic ::type& operator const NonConstArray< TYPE > & ( )

◆ operator const NonConstArray< typename std::conditional< STD_IS_REPLACEMENT()

operator const NonConstArray< typename std::conditional< STD_IS_REPLACEMENT ( same  ,
TYPE  ,
Generic   
)

◆ MAXON_ADD_TO_CONST_REFERENCE_CLASS()

MAXON_ADD_TO_CONST_REFERENCE_CLASS ( using  Iterator = typename ArrayInterface< TYPE >::ConstIterator;using ConstIterator=typename ArrayInterface< TYPE >::ConstIterator;)

◆ Begin() [1/2]

Returns an iterator pointing to the first array element.

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

◆ Begin() [2/2]

Iterator Begin ( )

Returns an iterator pointing to the first array element.

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

◆ End() [1/2]

Returns an iterator pointing one behind the last array element.

Returns
Iterator for the array end, this is one behind the last element.

◆ End() [2/2]

Iterator End ( )

Returns an iterator pointing one behind the last array element.

Returns
Iterator for the array end, this is one behind the last element.

◆ Alloc()

static ArrayInterface* Alloc ( MAXON_SOURCE_LOCATION_DECLARATION  )
staticprivate

◆ GetBlock() [3/7]

MAXON_METHOD Int GetBlock

Determines a contiguous, possibly strided block of array elements which contains the element at index. The returned blocks are guaranteed to form a partition of the array, i.e., no two blocks overlap, and they cover the whole array.

Using this method can greatly reduce the performance penalty of virtual method invocations of the Array interface as only one such invocation has to happen per block, and a block may consist of a relatively large number of elements which can then be accessed directly.

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

◆ GetBlock() [4/7]

Int GetBlock

◆ GetBlock() [5/7]

Int GetBlock

◆ GetBlock() [6/7]

MAXON_METHOD Result<Int> GetBlock

Determines a contiguous, possibly strided writable block of array elements which contains the element at index. The returned blocks are guaranteed to form a partition of the array, i.e., no two blocks overlap, and they cover the whole array.

Using this method can greatly reduce the performance penalty of virtual method invocations of the Array interface as only one such invocation has to happen per block, and a block may consist of a relatively large number of elements which can then be accessed directly.

Parameters
[in]indexElement index.
[out]blockBlock which contains the element at index.
Returns
Start index of the block. I.e., the requested element can be found within the block at index - start index. @MAXON_ANNOTATION{cowName=GetWritableBlock}

◆ GetBlock() [7/7]

Int GetBlock

Friends And Related Function Documentation

◆ ArrayImpl

friend class ArrayImpl
friend

◆ StrongCOWRefHandler

friend class StrongCOWRefHandler
friend

Member Data Documentation

◆ DeleteReturnType01

DeleteReturnType01

◆ const

const Generic ::type& const

◆ DeleteReturnType02

DeleteReturnType02