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< ArrayInterface< TYPE >, TYPE, StaticArrayInterface< TYPE > >
using Super = BaseCollection< ArrayInterface< TYPE >, StaticArrayInterface< TYPE > >
 
using ValueType = TYPE
 
- Public Types inherited from BaseCollection< ArrayInterface< TYPE >, StaticArrayInterface< TYPE > >
using IsCollection = std::true_type
 
- Public Types inherited from StaticArrayInterface< TYPE >
using ValueType = TYPE
 
using NonConstValueType = typename std::remove_const< TYPE >::type
 
using TYPE_FOR_SIZEOF = typename std::conditional< GENERIC, Char, TYPE >::type
 
using Iterator = IteratorTemplate< StaticArrayInterface >
 
using ConstIterator = IteratorTemplate< const StaticArrayInterface >
 

Public Member Functions

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)
 
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_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)
 
const const Generic ::type &const operator ArrayInterface< typename std::conditional< STD_IS_REPLACEMENT (same, TYPE, Generic)
 
const const Generic ::type &const Generic ::typeoperator const NonConstArray< TYPE > & ()
 
 operator const NonConstArray< typename std::conditional< STD_IS_REPLACEMENT (same, TYPE, Generic)
 
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
 
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< ArrayInterface< TYPE >, TYPE, StaticArrayInterface< TYPE > >
MAXON_ATTRIBUTE_FORCE_INLINE Collection (ARGS &&... args)
 
ResultOk< void > VariadicAppend ()
 
Result< void > VariadicAppend (V &&value, VALUES &&... rest)
 
 operator ValueReceiver< const TYPE & > ()
 
 operator ValueReceiver< TYPE && > ()
 
 operator ValueReceiver< typename std::conditional< STD_IS_REPLACEMENT (scalar, TYPE)
 
DummyParamType & type ()
 
Result< BoolForEach (FN &&callback) const
 
Result< BoolForEach (FN &&callback)
 
H::Iterator Find (typename ByValueParam< TYPE >::type v)
 
H::ConstIterator Find (typename ByValueParam< TYPE >::type v) const
 
Int FindIndex (typename ByValueParam< TYPE >::type v) const
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool Contains (typename ByValueParam< TYPE >::type v) const
 
- Public Member Functions inherited from BaseCollection< ArrayInterface< TYPE >, StaticArrayInterface< TYPE > >
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
 
- Public Member Functions inherited from StaticArrayInterface< TYPE >
MAXON_METHOD Int GetCount () const
 
MAXON_FUNCTION Bool IsEmpty () const
 
MAXON_FUNCTION Bool IsPopulated () const
 
const MAXON_METHOD TYPE & operator[] (Int index) const
 
MAXON_METHOD ResultRef< TYPE > GetWritable (Int index)
 
template<typename A >
MAXON_FUNCTION ResultMem Set (Int index, A &&value)
 
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)
 
const MAXON_METHOD DataTypeGetValueDataType () const
 
const MAXON_METHOD PersistentIdGenerator & GetPersistentIdGenerator () const
 
BlockIterator< StaticArrayInterface, TYPE, true, false > GetBlocks () const
 
BlockIterator< StaticArrayInterface, TYPE, true, true > GetStridedBlocks () const
 
Int GetValueSize () const
 
MAXON_FUNCTION StaticArrayInterface< TYPE >::ConstIterator Begin () const
 
Iterator Begin ()
 
MAXON_FUNCTION StaticArrayInterface< TYPE >::ConstIterator End () const
 
Iterator End ()
 

Public Attributes

 MAXON_METHOD_RESERVE
 
const DummyReturnType
 
const const Generic ::type &const DummyReturnType
 
 DummyReturnType
 
- Public Attributes inherited from Collection< ArrayInterface< TYPE >, TYPE, StaticArrayInterface< TYPE > >
 VALUETYPE
 
- Public Attributes inherited from StaticArrayInterface< TYPE >
 MAXON_METHOD_RESERVE
 

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< ArrayInterface< TYPE >, TYPE, StaticArrayInterface< TYPE > >
static const TYPEGetMapKey (const TYPE &key)
 
- Static Public Attributes inherited from ArrayBase0< ArrayInterface< TYPE >, TYPE, StaticArrayInterface< TYPE >, DefaultCompare >
static const COLLECTION_KIND KIND
 
- Static Public Attributes inherited from StaticArrayInterface< TYPE >
static const Bool GENERIC
 

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

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

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.

◆ 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()

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

◆ operator const NonConstArray< TYPE > &()

const const Generic ::type& const 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   
)

◆ 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

◆ MAXON_METHOD_RESERVE

MAXON_METHOD_RESERVE

◆ DummyReturnType [1/3]

const DummyReturnType

◆ DummyReturnType [2/3]

const const Generic ::type& const DummyReturnType

◆ DummyReturnType [3/3]

DummyReturnType