diff options
Diffstat (limited to 'src/array.cpp')
| -rw-r--r-- | src/array.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/array.cpp b/src/array.cpp index ea8873908..3df688e2e 100644 --- a/src/array.cpp +++ b/src/array.cpp @@ -33,6 +33,7 @@ template <typename T> Array<T> array_make (gbAllocator const &a, isize template <typename T> Array<T> array_make_from_ptr (T *data, isize count, isize capacity); template <typename T> void array_free (Array<T> *array); template <typename T> void array_add (Array<T> *array, T const &t); +template <typename T> T * array_add_and_get (Array<T> *array); template <typename T> void array_add_elems (Array<T> *array, T const *elems, isize elem_count); template <typename T> T array_pop (Array<T> *array); template <typename T> void array_clear (Array<T> *array); @@ -42,6 +43,7 @@ template <typename T> void array_set_capacity (Array<T> *array, isize capac template <typename T> Array<T> array_slice (Array<T> const &array, isize lo, isize hi); + template <typename T> void array_ordered_remove (Array<T> *array, isize index); template <typename T> void array_unordered_remove(Array<T> *array, isize index); @@ -159,6 +161,18 @@ void array_add(Array<T> *array, T const &t) { } template <typename T> +T *array_add_and_get(Array<T> *array) { + if (array->count < array->capacity) { + return &array->data[array->count++]; + } + if (array->capacity < array->count+1) { + array__grow(array, 0); + } + return &array->data[array->count++]; +} + + +template <typename T> void array_add_elems(Array<T> *array, T const *elems, isize elem_count) { GB_ASSERT(elem_count >= 0); if (array->capacity < array->count+elem_count) { |