![]() |
XII Release 0.1.0
|
Implementation of a dynamically growing array. More...
#include <DynamicArray.h>
Public Member Functions | |
void | Reserve (xiiUInt32 uiCapacity) |
Expands the array so it can at least store the given capacity. | |
void | Compact () |
Tries to compact the array to avoid wasting memory. The resulting capacity is at least 'GetCount' (no elements get removed). Will deallocate all data, if the array is empty. | |
xiiAllocatorBase * | GetAllocator () const |
Returns the allocator that is used by this instance. | |
xiiUInt64 | GetHeapMemoryUsage () const |
Returns the amount of bytes that are currently allocated on the heap. | |
void | Swap (xiiDynamicArrayBase< T > &other) |
swaps the contents of this array with another one | |
![]() | |
xiiArrayBase () | |
Constructor. | |
~xiiArrayBase () | |
Destructor. | |
void | operator= (const xiiArrayPtr< const T > &rhs) |
Copies the data from some other contiguous array into this one. | |
operator xiiArrayPtr< const T > () const | |
Conversion to const xiiArrayPtr. | |
operator xiiArrayPtr< T > () | |
Conversion to xiiArrayPtr. | |
bool | operator== (const xiiArrayBase< T, xiiDynamicArrayBase< T > > &rhs) const |
Compares this array to another contiguous array type. | |
bool | operator< (const xiiArrayBase< T, xiiDynamicArrayBase< T > > &rhs) const |
Compares this array to another contiguous array type. | |
bool | operator< (const xiiArrayPtr< const T > &rhs) const |
Compares this array to another contiguous array type. | |
const T & | operator[] (xiiUInt32 uiIndex) const |
Returns the element at the given index. Does bounds checks in debug builds. | |
T & | operator[] (xiiUInt32 uiIndex) |
Returns the element at the given index. Does bounds checks in debug builds. | |
void | SetCount (xiiUInt32 uiCount) |
Resizes the array to have exactly uiCount elements. Default constructs extra elements if the array is grown. | |
void | SetCount (xiiUInt32 uiCount, const T &fillValue) |
Resizes the array to have exactly uiCount elements. Constructs all new elements by copying the FillValue. | |
void | SetCountUninitialized (xiiUInt32 uiCount) |
Resizes the array to have exactly uiCount elements. Extra elements might be uninitialized. | |
void | EnsureCount (xiiUInt32 uiCount) |
Ensures the container has at least uiCount elements. Ie. calls SetCount() if the container has fewer elements, does nothing otherwise. | |
xiiUInt32 | GetCount () const |
Returns the number of active elements in the array. | |
bool | IsEmpty () const |
Returns true, if the array does not contain any elements. | |
void | Clear () |
Clears the array. | |
bool | Contains (const T &value) const |
Checks whether the given value can be found in the array. O(n) complexity. | |
void | InsertAt (xiiUInt32 uiIndex, const T &value) |
Inserts value at index by shifting all following elements. | |
void | InsertAt (xiiUInt32 uiIndex, T &&value) |
Inserts value at index by shifting all following elements. | |
void | InsertRange (const xiiArrayPtr< const T > &range, xiiUInt32 uiIndex) |
Inserts all elements in the range starting at the given index, shifting the elements after the index. | |
bool | RemoveAndCopy (const T &value) |
Removes the first occurrence of value and fills the gap by shifting all following elements. | |
bool | RemoveAndSwap (const T &value) |
Removes the first occurrence of value and fills the gap by swapping in the last element. | |
void | RemoveAtAndCopy (xiiUInt32 uiIndex, xiiUInt32 uiNumElements=1) |
Removes the element at index and fills the gap by shifting all following elements. | |
void | RemoveAtAndSwap (xiiUInt32 uiIndex, xiiUInt32 uiNumElements=1) |
Removes the element at index and fills the gap by swapping in the last element. | |
xiiUInt32 | IndexOf (const T &value, xiiUInt32 uiStartIndex=0) const |
Searches for the first occurrence of the given value and returns its index or xiiInvalidIndex if not found. | |
xiiUInt32 | LastIndexOf (const T &value, xiiUInt32 uiStartIndex=xiiInvalidIndex) const |
Searches for the last occurrence of the given value and returns its index or xiiInvalidIndex if not found. | |
T & | ExpandAndGetRef () |
Grows the array by one element and returns a reference to the newly created element. | |
T * | ExpandBy (xiiUInt32 uiNumNewItems) |
Expands the array by N new items and returns a pointer to the first new one. | |
void | PushBack (const T &value) |
Pushes value at the end of the array. | |
void | PushBack (T &&value) |
Pushes value at the end of the array. | |
void | PushBackUnchecked (const T &value) |
Pushes value at the end of the array. Does NOT ensure capacity. | |
void | PushBackUnchecked (T &&value) |
Pushes value at the end of the array. Does NOT ensure capacity. | |
void | PushBackRange (const xiiArrayPtr< const T > &range) |
Pushes all elements in range at the end of the array. Increases the capacity if necessary. | |
void | PopBack (xiiUInt32 uiCountToRemove=1) |
Removes count elements from the end of the array. | |
T & | PeekBack () |
Returns the last element of the array. | |
const T & | PeekBack () const |
Returns the last element of the array. | |
void | Sort (const Comparer &comparer) |
Sort with explicit comparer. | |
void | Sort () |
Sort with default comparer. | |
T * | GetData () |
Returns a pointer to the array data, or nullptr if the array is empty. | |
const T * | GetData () const |
Returns a pointer to the array data, or nullptr if the array is empty. | |
xiiArrayPtr< T > | GetArrayPtr () |
Returns an array pointer to the array data, or an empty array pointer if the array is empty. | |
xiiArrayPtr< const T > | GetArrayPtr () const |
Returns an array pointer to the array data, or an empty array pointer if the array is empty. | |
xiiArrayPtr< typename xiiArrayPtr< T >::ByteType > | GetByteArrayPtr () |
Returns a byte array pointer to the array data, or an empty array pointer if the array is empty. | |
xiiArrayPtr< typename xiiArrayPtr< const T >::ByteType > | GetByteArrayPtr () const |
Returns a byte array pointer to the array data, or an empty array pointer if the array is empty. | |
xiiUInt32 | GetCapacity () const |
Returns the reserved number of elements that the array can hold without reallocating. | |
Protected Member Functions | |
xiiDynamicArrayBase (xiiAllocatorBase *pAllocator) | |
Creates an empty array. Does not allocate any data yet. | |
xiiDynamicArrayBase (T *pInplaceStorage, xiiUInt32 uiCapacity, xiiAllocatorBase *pAllocator) | |
xiiDynamicArrayBase (const xiiDynamicArrayBase< T > &other, xiiAllocatorBase *pAllocator) | |
Creates a copy of the given array. | |
xiiDynamicArrayBase (xiiDynamicArrayBase< T > &&other, xiiAllocatorBase *pAllocator) | |
Moves the given array into this one. | |
xiiDynamicArrayBase (const xiiArrayPtr< const T > &other, xiiAllocatorBase *pAllocator) | |
Creates a copy of the given array. | |
~xiiDynamicArrayBase () | |
Destructor. | |
void | operator= (const xiiDynamicArrayBase< T > &rhs) |
Copies the data from some other contiguous array into this one. | |
void | operator= (xiiDynamicArrayBase< T > &&rhs) noexcept |
Moves the data from some other contiguous array into this one. | |
T * | GetElementsPtr () |
const T * | GetElementsPtr () const |
![]() | |
void | DoSwap (xiiArrayBase< T, xiiDynamicArrayBase< T > > &other) |
Friends | |
class | xiiArrayBase< T, xiiDynamicArrayBase< T > > |
Additional Inherited Members | |
![]() | |
using | const_iterator |
using | const_reverse_iterator |
using | iterator |
using | reverse_iterator |
![]() | |
T * | m_pElements |
Element-type access to m_Data. | |
xiiUInt32 | m_uiCount |
The number of elements used from the array. | |
xiiUInt32 | m_uiCapacity |
The number of elements which can be stored in the array without re-allocating. | |
Implementation of a dynamically growing array.
Best-case performance for the PushBack operation is O(1) if the xiiDynamicArray doesn't need to be expanded. In the worst case, PushBack is O(n). Look-up is guaranteed to always be O(1).