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);
BaseArray<Char> myArray2;
Func(myArray2);
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
-
TYPE | Type of elements of the array. |
|
| 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 ::type & | operator 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< Int > | GetBlock (Int index, SimdBlock< NonConstValueType > &block) |
|
Int | GetBlock (Int index, StridedBlock< NonConstValueType > &block) |
|
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 |
|
template<typename... ARGS> |
MAXON_ATTRIBUTE_FORCE_INLINE | Collection (ARGS &&... args) |
|
ResultOk< void > | VariadicAppend () |
|
template<typename V , typename... VALUES> |
Result< void > | VariadicAppend (V &&value, VALUES &&... rest) |
|
| operator ValueReceiver< const VALUETYPE & > () |
|
| operator ValueReceiver< VALUETYPE && > () |
|
| operator ValueReceiver< typename std::conditional< STD_IS_REPLACEMENT (scalar, VALUETYPE) |
|
DummyParamType & | type () |
|
template<typename FN > |
Result< Bool > | ForEach (FN &&callback) const |
|
template<typename FN > |
Result< Bool > | ForEach (FN &&callback) |
|
template<typename H = COLLECTION> |
H::Iterator | Find (typename ByValueParam< VALUETYPE >::type v) |
|
template<typename H = COLLECTION> |
H::ConstIterator | Find (typename ByValueParam< VALUETYPE >::type v) const |
|
Int | FindIndex (typename ByValueParam< VALUETYPE >::type v) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE Bool | Contains (typename ByValueParam< VALUETYPE >::type v) const |
|
template<typename... ARGS> |
MAXON_ATTRIBUTE_FORCE_INLINE | BaseCollection (ARGS &&... args) |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type | operator== (const COLLECTION2 &other) const |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type | operator!= (const COLLECTION2 &other) const |
|
template<typename COMPARE = EqualityCompare, typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value &&!STD_IS_REPLACEMENT(same, typename std::decay< COMPARE >::type, EQUALITY), Bool >::type | IsEqual (const COLLECTION2 &other, COMPARE &&cmp=COMPARE()) const |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE) |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | Subtract (COLLECTION2 &&other) |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | Intersect (const COLLECTION2 &other) |
|
template<typename COLLECTION2 > |
Bool | Intersects (const COLLECTION2 &other) const |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | CopyFromImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank0) |
|
template<typename COLLECTION2 > |
Result< void > | AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0) |
|
template<typename COLLECTION2 > |
Result< void > | IntersectImpl (COLLECTION2 &&other, OverloadRank0) |
|
MAXON_ATTRIBUTE_FORCE_INLINE Bool | IsEmpty () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE Bool | IsPopulated () const |
|
String | ToString (const FormatStatement *formatStatement=nullptr) const |
|
template<typename COLLECTION2 > |
MAXON_ATTRIBUTE_FORCE_INLINE Bool | ContainsAll (COLLECTION2 &&other) const |
|
template<typename COLLECTION2 > |
Bool | ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const |
|