diff options
| author | gingerBill <bill@gingerbill.org> | 2018-02-25 20:24:38 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2018-02-25 20:24:38 +0000 |
| commit | 69062ba3ab6b2ac2d291c3e4b6931c1c0dd2b6ac (patch) | |
| tree | 07734f701dcfab8ec501951efebccd3f047aad5f /src/array.cpp | |
| parent | e75563cb3233a5883d1ae8ad1046ad673213f0d0 (diff) | |
More code tidying with `Array`
Diffstat (limited to 'src/array.cpp')
| -rw-r--r-- | src/array.cpp | 46 |
1 files changed, 31 insertions, 15 deletions
diff --git a/src/array.cpp b/src/array.cpp index ff3aefd9b..6809574df 100644 --- a/src/array.cpp +++ b/src/array.cpp @@ -24,20 +24,21 @@ struct Array { } }; -template <typename T> void array_init (Array<T> *array, gbAllocator const &a); -template <typename T> void array_init (Array<T> *array, gbAllocator const &a, isize count); -template <typename T> void array_init (Array<T> *array, gbAllocator const &a, isize count, isize capacity); -template <typename T> Array<T> array_make (gbAllocator const &a); -template <typename T> Array<T> array_make (gbAllocator const &a, isize count); -template <typename T> Array<T> array_make (gbAllocator const &a, isize count, isize capacity); +template <typename T> void array_init (Array<T> *array, gbAllocator const &a); +template <typename T> void array_init (Array<T> *array, gbAllocator const &a, isize count); +template <typename T> void array_init (Array<T> *array, gbAllocator const &a, isize count, isize capacity); +template <typename T> Array<T> array_make (gbAllocator const &a); +template <typename T> Array<T> array_make (gbAllocator const &a, isize count); +template <typename T> Array<T> array_make (gbAllocator const &a, isize count, isize capacity); 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_pop (Array<T> *array); -template <typename T> void array_clear (Array<T> *array); -template <typename T> void array_reserve (Array<T> *array, isize capacity); -template <typename T> void array_resize (Array<T> *array, isize count); -template <typename T> void array_set_capacity(Array<T> *array, 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_pop (Array<T> *array); +template <typename T> void array_clear (Array<T> *array); +template <typename T> void array_reserve (Array<T> *array, isize capacity); +template <typename T> void array_resize (Array<T> *array, isize count); +template <typename T> void array_set_capacity (Array<T> *array, isize capacity); +template <typename T> Array<T> array_slice (Array<T> const &array, isize lo, isize hi); template <typename T> gb_inline void array_init(Array<T> *array, gbAllocator const &a) { @@ -102,7 +103,7 @@ gb_inline Array<T> array_make(gbAllocator const &a, isize count, isize capacity) template <typename T> -void array_free(Array<T> *array) { +gb_inline void array_free(Array<T> *array) { if (array->allocator.proc != nullptr) { gb_free(array->allocator, array->data); } @@ -129,7 +130,7 @@ void array_add(Array<T> *array, T const &t) { } template <typename T> -T array_pop(Array<T> *array) { +gb_inline T array_pop(Array<T> *array) { GB_ASSERT(array->count > 0); array->count--; return array->data[array->count]; @@ -175,6 +176,21 @@ void array_set_capacity(Array<T> *array, isize capacity) { array->capacity = capacity; } + +template <typename T> +gb_inline Array<T> array_slice(Array<T> const &array, isize lo, isize hi) { + GB_ASSERT(0 <= lo && lo <= hi && hi <= array.count); + Array<T> out = {}; + isize len = hi-lo; + if (len > 0) { + out.data = array.data+lo; + out.count = len; + out.capacity = len; + } + return out; +} + + #endif #if 0 |