Open Search
    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 >
    constexpr MAXON_ATTRIBUTE_FORCE_INLINE ArrayBase0 (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, 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, COMPARERESULT >::type Compare (const COLLECTION2 &other, COMPARE &&cmp=COMPARE()) const
     
    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
     
    COMPARERESULT CompareImpl (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