-
首页
-
C4D R23.110 C++ SDK
BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR > Class Template Reference
Data Structures
#include <blockarray.h>
详细描述
template<typename T, Int BLOCK_SIZE_EXPONENT = BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS MEMFLAGS = BLOCKARRAYFLAGS::NONE, typename ALLOCATOR = DefaultAllocator>
class maxon::BlockArray< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR >
Block
array template. The array consists of multiple blocks containing 2^BLOCK_SIZE_EXPONENT elements. Therefore the memory address of the elements will not change if the array grows and no memory is copied. Nonetheless objects have to be copied/moved when you call
Insert()
or
Erase()
, but the amount of memory is limited to the size of a block which makes it much faster than a
BaseArray
for these purposes.
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.
Performance characteristics:
Random
access to array elements is constant or at least amortized constant (when elements have been removed inbetween): O(1). Append or Pop (erase the last) an element is amortized constant: O(1) Insert or Erase an element can be amortized constant (unless block size and array size mismatch) : O(1)
-
注意
-
: Do not rely on the characteristics to pick the right type of collection. Always profile to check real life performance!
-
Template Parameters
-
T
|
Type of the array elements.
|
BLOCK_SIZE_EXPONENT
|
Size of an array block: 2^BLOCK_SIZE_EXPONENT.
|
MEMFLAGS
|
使用
BLOCKARRAYFLAGS::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
公共成员函数
|
|
BlockArray
()
|
|
BlockArray
(const ALLOCATOR &a)
|
|
~BlockArray
()
|
|
BlockArray
(
BlockArray
&&
src
)
|
|
MAXON_OPERATOR_MOVE_ASSIGNMENT
(
BlockArray
)
|
void
|
重置
()
|
void
|
Flush
()
|
Int
|
GetCount
() const
|
Int
|
GetCapacityCount
() const
|
const T &
|
operator[]
(
Int
idx) const
|
T &
|
operator[]
(
Int
idx)
|
ResultRef
< T >
|
Append
()
|
ResultRef
< T >
|
Append
(const T &x)
|
ResultRef
< T >
|
Append
(T &&x)
|
ResultPtr
< T >
|
Append
(const
Block
< const T > &values)
|
ResultPtr
< T >
|
Append
(const std::initializer_list< T > &values)
|
ResultRef
< T >
|
Insert
(
Int
position)
|
ResultMemT
<
Iterator
>
|
Insert
(const
Iterator
&position)
|
ResultRef
< T >
|
Insert
(
Int
position, const T &x)
|
ResultMemT
<
Iterator
>
|
Insert
(const
Iterator
&position, const T &x)
|
ResultRef
< T >
|
Insert
(
Int
position, T &&x)
|
ResultMemT
<
Iterator
>
|
Insert
(const
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)
|
ResultMemT
<
Iterator
>
|
Insert
(const
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
(const
Iterator
&position,
Int
eraseCnt=1)
|
ResultMem
|
SwapErase
(
Int
position,
Int
eraseCnt=1)
|
Iterator
|
SwapErase
(const
Iterator
&position,
Int
eraseCnt=1)
|
template<Bool STRIDED>
|
Int
|
GetBlock
(
Int
position,
Block
< const T, STRIDED > &block) const
|
template<Bool STRIDED>
|
Int
|
GetBlock
(
Int
position,
Block
< T, STRIDED > &block)
|
template<Bool STRIDED>
|
MAXON_ATTRIBUTE_FORCE_INLINE
ConstIterator
|
GetBlock
(const
ConstIterator
&position,
Block
< const T, STRIDED > &block) const
|
template<Bool STRIDED>
|
MAXON_ATTRIBUTE_FORCE_INLINE
Iterator
|
GetBlock
(const
Iterator
&position,
Block
< T, STRIDED > &block)
|
ResultMem
|
SetCapacityHint
(
Int
requestedCapacity,
COLLECTION_RESIZE_FLAGS
resizeFlags=
COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY
)
|
ResultMem
|
Resize
(
Int
newCnt,
COLLECTION_RESIZE_FLAGS
resizeFlags=
COLLECTION_RESIZE_FLAGS::DEFAULT
)
|
Bool
|
Pop
(T *dst=nullptr)
|
Int
|
GetIndex
(const T &x) const
|
template<typename BASEARRAY , typename = typename std::enable_if<STD_IS_REPLACEMENT(same, typename std::decay<BASEARRAY>::type, BaseArray<T>)>::type>
|
Result
< void >
|
CopyFromImpl
(BASEARRAY &&
src
,
COLLECTION_RESIZE_FLAGS
resizeFlags,
OverloadRank4
)
|
void
|
Swap
(
Iterator
&a,
Iterator
&b)
|
Int
|
GetMemorySize
() const
|
ConstIterator
|
Begin
() const
|
Iterator
|
Begin
()
|
ConstIterator
|
End
() const
|
Iterator
|
End
()
|
BaseArray
<
ArrayBlock
,
BASEARRAY_DEFAULT_CHUNK_SIZE
,
BASEARRAYFLAGS::NONE
,
ForwardAllocator
>
|
Disconnect
()
|
ALLOCATOR &
|
GetAllocator
()
|
MAXON_ATTRIBUTE_FORCE_INLINE
|
ArrayBase
(ARGS &&... args)
|
ArrayImpl
<
BlockArray
< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE,
DefaultAllocator
> & >
|
ToArray
()
|
ArrayImpl
< const
BlockArray
< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE,
DefaultAllocator
> & >
|
ToArray
() const
|
MAXON_ATTRIBUTE_FORCE_INLINE
|
operator ArrayImpl< BlockArray< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE, DefaultAllocator > & >
()
|
MAXON_ATTRIBUTE_FORCE_INLINE
|
operator ArrayImpl< const BlockArray< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE, DefaultAllocator > & >
() const
|
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
<
BlockArray
< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE,
DefaultAllocator
> >
|
切片
(
Int
start)
|
MAXON_ATTRIBUTE_FORCE_INLINE
AutoIterator
< const
BlockArray
< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE,
DefaultAllocator
> >
|
切片
(
Int
start) const
|
MAXON_ATTRIBUTE_FORCE_INLINE
AutoIterator
<
BlockArray
< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE,
DefaultAllocator
> >
|
切片
(
Int
start,
Int
end)
|
MAXON_ATTRIBUTE_FORCE_INLINE
AutoIterator
< const
BlockArray
< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE,
DefaultAllocator
> >
|
切片
(
Int
start,
Int
end) const
|
BlockIterator
<
BlockArray
< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE,
DefaultAllocator
>, T, false, false >
|
GetBlocks
()
|
BlockIterator
<
BlockArray
< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE,
DefaultAllocator
>, T, true, false >
|
GetBlocks
() const
|
BlockIterator
<
BlockArray
< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE,
DefaultAllocator
>, T, false, true >
|
GetStridedBlocks
()
|
BlockIterator
<
BlockArray
< T, BLOCKARRAY_DEFAULT_SIZE_EXPONENT, BLOCKARRAYFLAGS::NONE,
DefaultAllocator
>, T, true, true >
|
GetStridedBlocks
() const
|
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
|
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
|
Additional Inherited Members
|
static const T &
|
GetMapKey
(const T &key)
|
static
Int
|
ComputeArraySize
(
Int
currentSize,
Int
increment,
Int
minChunkSize)
|
static
MAXON_ATTRIBUTE_FORCE_INLINE
void *
|
Alloc
(
Int32
s,
MAXON_SOURCE_LOCATION_DECLARATION
)
|
static
MAXON_ATTRIBUTE_FORCE_INLINE
void *
|
Alloc
(
Int64
s,
MAXON_SOURCE_LOCATION_DECLARATION
)
|
static
MAXON_ATTRIBUTE_FORCE_INLINE
void *
|
AllocClear
(
Int32
s,
MAXON_SOURCE_LOCATION_DECLARATION
)
|
static
MAXON_ATTRIBUTE_FORCE_INLINE
void *
|
AllocClear
(
Int64
s,
MAXON_SOURCE_LOCATION_DECLARATION
)
|
static
MAXON_ATTRIBUTE_FORCE_INLINE
void *
|
Realloc
(void *p,
Int32
n,
MAXON_SOURCE_LOCATION_DECLARATION
)
|
static
MAXON_ATTRIBUTE_FORCE_INLINE
void *
|
Realloc
(void *p,
Int64
n,
MAXON_SOURCE_LOCATION_DECLARATION
)
|
template<typename T >
|
static
MAXON_ATTRIBUTE_FORCE_INLINE
void
|
Free
(T *&p)
|
static
MAXON_ATTRIBUTE_FORCE_INLINE
Bool
|
IsCompatibleWithDefaultAllocator
(void *)
|
|
VALUETYPE
|
Member Typedef Documentation
◆
ArrayBlock
◆
Super
◆
AllocatorType
◆
Iterator
◆
ConstIterator
构造函数 & 析构函数文档编制
◆
BlockArray()
[1/3]
◆
BlockArray()
[2/3]
this constructor has to be used if an array should use a custom allocator with member variables
◆
~BlockArray()
◆
BlockArray()
[3/3]
move constructor
成员函数文档编制
◆
MAXON_DISALLOW_COPY_AND_ASSIGN()
MAXON_DISALLOW_COPY_AND_ASSIGN
|
(
|
BlockArray
< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR >
|
|
)
|
|
|
private
|
◆
MAXON_OPERATOR_MOVE_ASSIGNMENT()
MAXON_OPERATOR_MOVE_ASSIGNMENT
|
(
|
BlockArray
< T, BLOCK_SIZE_EXPONENT, MEMFLAGS, ALLOCATOR >
|
|
)
|
|
move assignment operator
◆
Reset()
Deletes all elements (calls destructors and frees memory).
◆
Flush()
Deletes all elements (calls destructors and frees memory), but doesn't free the memory of the array which contains the blocks. The memory used by the blocks themselves is freed nevertheless.
◆
GetCount()
Gets the number of array elements.
-
返回
-
Number of array elements.
◆
GetCapacityCount()
Int
GetCapacityCount
|
(
|
|
)
|
const
|
Gets the number of elements for which memory has been allocated (for a
BlockArray
this is equal to
GetCount()
plus the number of free elements in the last block)
-
返回
-
Number of array elements for which memory has been allocated.
◆
operator[]()
[1/2]
const 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]
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/5]
Adds a new element at the end of the array.
-
返回
-
Element reference or OutOfMemoryError if the allocation failed.
◆
Append()
[2/5]
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/5]
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/5]
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/5]
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]
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]
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]
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]
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]
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]
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]
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]
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()
[10/11]
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/3]
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/3]
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).
-
注意
-
To erase an element within a ranged based for loop, you can't use this function directly as you don't have access to the iterator. But you can use
Iterable::EraseIterator
as in
for
(
auto
it =
Iterable::EraseIterator
(array); it; ++it)
{
if
(*it == valueToErase)
it.Erase();
}
◆
SwapErase()
[1/2]
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.
|
-
返回
-
False if position was out of bounds.
◆
SwapErase()
[2/2]
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]
Int
GetBlock
|
(
|
Int
|
position
,
|
|
|
Block
< const T, STRIDED > &
|
block
|
|
)
|
|
const
|
Determines a contiguous block of array elements which contains the element at
position
. The returned blocks are guaranteed to form a partition of the array, i.e., no two blocks overlap, and they cover the whole array.
-
参数
-
[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]
Int
GetBlock
|
(
|
Int
|
position
,
|
|
|
Block
< T, STRIDED > &
|
block
|
|
)
|
|
|
Determines a contiguous block of array elements which contains the element at
position
. The returned blocks are guaranteed to form a partition of the array, i.e., no two blocks overlap, and they cover the whole array.
-
参数
-
[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]
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]
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.
◆
SetCapacityHint()
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.
-
参数
-
[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.
|
-
返回
-
False if allocation failed.
◆
Resize()
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 (flags other than ON_GROW_UNINITIALIZED/POD_UNINITIALIZED result in default behaviour).
|
-
返回
-
False if allocation failed.
◆
Pop()
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()
Int
GetIndex
|
(
|
const T &
|
x
|
)
|
const
|
Gets the index of an 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. This is slower than for a
BaseArray
because it has to iterate over the block.
-
返回
-
Index of element or InvalidIndex (not element of this).
◆
CopyFromImpl()
◆
Swap()
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]
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]
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]
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 (this is behind the last element).
◆
End()
[2/2]
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 (this is behind the last element).
◆
Disconnect()
Disconnects the array's memory buffers and returns its content as an array of blocks. Afterwards the array is in the same state as directly after its construction.
-
返回
-
Array
of blocks.
-
注意
-
The memory needs to be freed with the allocator that the array is using.
◆
GetAllocator()
ALLOCATOR& GetAllocator
|
(
|
|
)
|
|
Returns the allocator as reference. Typically this is used by the arrays and other base classes when multiple of them are "stiched" together as one big object all shall use one main allocator.
-
返回
-
Allocator reference.
◆
Insert()
[11/11]
Int
Insert
|
(
|
Int
|
blockIdx
,
|
|
|
Int
|
localIdx
,
|
|
|
const
Block
< const T > &
|
values
|
|
)
|
|
|
|
private
|
-
返回
-
0 on success or the number of elements not being inserted.
◆
Erase()
[3/3]
◆
Move()
◆
ResolveToLocalIndex()
Int
ResolveToLocalIndex
|
(
|
Int
&
|
idx
|
)
|
const
|
|
private
|
Returns the block index and local index within that block for a global array index.
-
参数
-
[in,out]
|
idx
|
On input the global index, on return the local index within the block (must be <
GetCount()
).
|
-
返回
-
Block
index.
◆
GetBlockAndIndex()
[1/2]
Returns the block and local index within that block for a global array index.
-
参数
-
[in,out]
|
idx
|
On input the global index, on return the local index within the block (must be <
GetCount()
).
|
-
返回
-
Block
pointer.
◆
GetBlockAndIndex()
[2/2]
Member Data Documentation
◆
BLOCK_SIZE
const
Int
BLOCK_SIZE
static
|
|
◆
_blocks
static MAXON_ATTRIBUTE_FORCE_INLINE maxon::EraseIterator< COLLECTION, false > EraseIterator(COLLECTION &c)
定义:
foreach.h:1321