Nirtcpp 2.1.0
Nirtcpp is a high-performance c++ graphics engine.
|
Self reallocating template array (like stl vector) with additional features. More...
#include <nirtcpp/core/engine/irrArray.hpp>
Public Types | |
using | allocator_type = TAlloc |
using | value_type = T |
using | size_type = u32 |
Public Member Functions | |
array () | |
Default constructor for empty array. | |
array (u32 start_count) | |
Constructs an array and allocates an initial chunk of memory. | |
array (const array< T, TAlloc > &other) | |
Copy constructor. | |
~array () | |
Destructor. | |
void | reallocate (u32 new_size, bool canShrink=true) |
Reallocates the array, make it bigger or smaller. | |
void | setAllocStrategy (eAllocStrategy newStrategy=ALLOC_STRATEGY_DOUBLE) |
set a new allocation strategy | |
void | push_back (const T &element) |
Adds an element at back of array. | |
void | push_front (const T &element) |
Adds an element at the front of the array. | |
void | insert (const T &element, u32 index=0) |
Insert item into array at specified position. | |
void | clear () |
Clears the array and deletes all allocated memory. | |
void | set_pointer (T *newPointer, u32 size, bool _is_sorted=false, bool _free_when_destroyed=true) |
Sets pointer to new array, using this as new workspace. | |
void | set_data (const T *newData, u32 newSize, bool newDataIsSorted=false, bool canShrink=false) |
Set (copy) data from given memory block. | |
bool | equals (const T *otherData, u32 size) const |
Compare if given data block is identical to the data in our array. | |
void | set_free_when_destroyed (bool f) |
Sets if the array should delete the memory it uses upon destruction. | |
void | set_used (u32 usedNow) |
Sets the size of the array and allocates new elements if necessary. | |
const array< T, TAlloc > & | operator= (const array< T, TAlloc > &other) |
Assignment operator. | |
bool | operator== (const array< T, TAlloc > &other) const |
Equality operator. | |
bool | operator!= (const array< T, TAlloc > &other) const |
Inequality operator. | |
T & | operator[] (u32 index) |
Direct access operator. | |
const T & | operator[] (u32 index) const |
Direct const access operator. | |
T & | getLast () |
Gets last element. | |
const T & | getLast () const |
Gets last element. | |
T * | pointer () |
Gets a pointer to the array. | |
const T * | const_pointer () const |
Gets a const pointer to the array. | |
u32 | size () const |
Get number of occupied elements of the array. | |
u32 | allocated_size () const |
Get amount of memory allocated. | |
bool | empty () const |
Check if array is empty. | |
void | sort () |
Sorts the array using heapsort. | |
s32 | binary_search (const T &element) |
Performs a binary search for an element, returns -1 if not found. | |
s32 | binary_search (const T &element) const |
Performs a binary search for an element if possible, returns -1 if not found. | |
s32 | binary_search (const T &element, s32 left, s32 right) const |
Performs a binary search for an element, returns -1 if not found. | |
s32 | binary_search_multi (const T &element, s32 &last) |
template<class E > | |
s32 | linear_search (const E &element) const |
Finds an element by searching linearly from array start to end. | |
template<class E > | |
s32 | linear_reverse_search (const E &element) const |
Finds an element by searching linearly from array end to start. | |
void | erase (u32 index) |
Erases an element from the array. | |
void | erase (u32 index, s32 count) |
Erases some elements from the array. | |
void | set_sorted (bool _is_sorted) |
Sets if the array is sorted. | |
void | swap (array< T, TAlloc > &other) |
Swap the content of this array container with the content of another array. | |
Self reallocating template array (like stl vector) with additional features.
Some features are: Heap sorting, binary search methods, easier debugging.
|
inlineexplicit |
Constructs an array and allocates an initial chunk of memory.
start_count | Amount of elements to pre-allocate. |
|
inline |
Destructor.
Frees allocated memory, if set_free_when_destroyed was not set to false by the user before.
|
inline |
Get amount of memory allocated.
Performs a binary search for an element, returns -1 if not found.
The array will be sorted before the binary search if it is not already sorted. Caution is advised! Be careful not to call this on unsorted const arrays, or the slower method will be used.
element | Element to search for. |
Performs a binary search for an element if possible, returns -1 if not found.
This method is for const arrays and so cannot call sort(), if the array is not sorted then linear_search will be used instead. Potentially very slow!
element | Element to search for. |
|
inline |
Performs a binary search for an element, returns -1 if not found.
element | Element to search for. |
left | First left index |
right | Last right index. |
Performs a binary search for an element, returns -1 if not found. it is used for searching a multiset The array will be sorted before the binary search if it is not already sorted.
element | Element to search for. |
&last | return lastIndex of equal elements |
|
inline |
Gets a const pointer to the array.
|
inline |
Check if array is empty.
Compare if given data block is identical to the data in our array.
Like operator ==, but without the need to create the array
otherData | Address to data against which we compare, must contain size elements |
size | Amount of elements in otherData |
|
inline |
Erases an element from the array.
May be slow, because all elements following after the erased element have to be copied.
index | Index of element to be erased. |
Erases some elements from the array.
May be slow, because all elements following after the erased element have to be copied.
index | Index of the first element to be erased. |
count | Amount of elements to be erased. |
Insert item into array at specified position.
element | Element to be inserted |
index | Where position to insert the new element. |
Finds an element by searching linearly from array end to start.
Can be slow with large arrays, try binary_search for those. Only works if corresponding operator== is implemented.
element | Element to search for. |
Finds an element by searching linearly from array start to end.
Can be slow with large arrays, try binary_search for those. Only works if corresponding operator== is implemented.
element | Element to search for. |
|
inline |
Gets a pointer to the array.
Adds an element at back of array.
If the array is too small to add this new element it is made bigger.
element | Element to add at the back of the array. |
Adds an element at the front of the array.
If the array is to small to add this new element, the array is made bigger. Please note that this is slow, because the whole array needs to be copied for this.
element | Element to add at the back of the array. |
Reallocates the array, make it bigger or smaller.
new_size | New size of array. |
canShrink | Specifies whether the array is reallocated even if enough space is available. Setting this flag to false can speed up array usage, but may use more memory than required by the data. |
|
inline |
Set (copy) data from given memory block.
newData | data to set, must have newSize elements |
newSize | Amount of elements in newData |
newDataIsSorted | Info if you pass sorted/unsorted data |
canShrink | Specifies whether the array is reallocated even if enough space is available. Setting this flag to false can speed up array usage, but may use more memory than required by the data. |
|
inline |
Sets if the array should delete the memory it uses upon destruction.
Also clear and set_pointer will only delete the (original) memory area if this flag is set to true, which is also the default. The methods reallocate, set_used, push_back, push_front, insert, and erase will still try to deallocate the original memory, which might cause troubles depending on the intended use of the memory area.
f | If true, the array frees the allocated memory in its destructor, otherwise not. The default is true. |
|
inline |
Sets pointer to new array, using this as new workspace.
Make sure that set_free_when_destroyed is used properly.
newPointer | Pointer to new array of elements. |
size | Size of the new array. |
_is_sorted | Flag which tells whether the new array is already sorted. |
_free_when_destroyed | Sets whether the new memory area shall be freed by the array upon destruction, or if this will be up to the user application. |
|
inline |
Sets the size of the array and allocates new elements if necessary.
Please note: This is only secure when using it with simple types, because no default constructor will be called for the added elements.
usedNow | Amount of elements now used. |
|
inline |
set a new allocation strategy
if the maximum size of the array is unknown, you can define how big the allocation should happen.
newStrategy | New strategy to apply to this array. |
|
inline |
Get number of occupied elements of the array.
|
inline |
Sorts the array using heapsort.
There is no additional memory waste and the algorithm performs O(n*log n) in worst case.
Swap the content of this array container with the content of another array.
Afterward this object will contain the content of the other object and the other object will contain the content of this object.
other | Swap content with this object |