From d63885a495d2314a5ef76337605a9ebeefb26218 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 25 Feb 2018 19:23:52 +0000 Subject: `array_make` --- src/array.cpp | 58 ++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 18 deletions(-) (limited to 'src/array.cpp') diff --git a/src/array.cpp b/src/array.cpp index 8384c32f4..ff3aefd9b 100644 --- a/src/array.cpp +++ b/src/array.cpp @@ -24,10 +24,12 @@ struct Array { } }; -template void array_init (Array *array, gbAllocator a, isize init_capacity = ARRAY_GROW_FORMULA(0)); -template void array_init_count (Array *array, gbAllocator a, isize count); -template Array array_make (gbAllocator a, isize init_capacity = ARRAY_GROW_FORMULA(0)); -template Array array_make_count (gbAllocator a, isize count); +template void array_init (Array *array, gbAllocator const &a); +template void array_init (Array *array, gbAllocator const &a, isize count); +template void array_init (Array *array, gbAllocator const &a, isize count, isize capacity); +template Array array_make (gbAllocator const &a); +template Array array_make (gbAllocator const &a, isize count); +template Array array_make (gbAllocator const &a, isize count, isize capacity); template Array array_make_from_ptr(T *data, isize count, isize capacity); template void array_free (Array *array); template void array_add (Array *array, T const &t); @@ -38,24 +40,28 @@ template void array_resize (Array *array, isize count); template void array_set_capacity(Array *array, isize capacity); template -void array_init(Array *array, gbAllocator a, isize init_capacity) { - array->allocator = a; - array->data = gb_alloc_array(a, T, init_capacity); - array->count = 0; - array->capacity = init_capacity; +gb_inline void array_init(Array *array, gbAllocator const &a) { + isize cap = ARRAY_GROW_FORMULA(0); + array_init(array, a, 0, cap); +} + +template +gb_inline void array_init(Array *array, gbAllocator const &a, isize count) { + array_init(array, a, count, count); } template -void array_init_count(Array *array, gbAllocator a, isize count) { +gb_inline void array_init(Array *array, gbAllocator const &a, isize count, isize capacity) { array->allocator = a; - array->data = gb_alloc_array(a, T, count); + array->data = gb_alloc_array(a, T, capacity); array->count = count; - array->capacity = count; + array->capacity = capacity; } + template -Array array_make_from_ptr(T *data, isize count, isize capacity) { +gb_inline Array array_make_from_ptr(T *data, isize count, isize capacity) { Array a = {0}; a.data = data; a.count = count; @@ -65,15 +71,31 @@ Array array_make_from_ptr(T *data, isize count, isize capacity) { template -Array array_make(gbAllocator a, isize init_capacity) { +gb_inline Array array_make(gbAllocator const &a) { + isize capacity = ARRAY_GROW_FORMULA(0); + Array array = {}; + array.allocator = a; + array.data = gb_alloc_array(a, T, capacity); + array.count = 0; + array.capacity = capacity; + return array; +} +template +gb_inline Array array_make(gbAllocator const &a, isize count) { Array array = {}; - array_init(&array, a, init_capacity); + array.allocator = a; + array.data = gb_alloc_array(a, T, count); + array.count = count; + array.capacity = count; return array; } template -Array array_make_count(gbAllocator a, isize count) { +gb_inline Array array_make(gbAllocator const &a, isize count, isize capacity) { Array array = {}; - array_init_count(&array, a, count); + array.allocator = a; + array.data = gb_alloc_array(a, T, capacity); + array.count = count; + array.capacity = capacity; return array; } @@ -157,7 +179,7 @@ void array_set_capacity(Array *array, isize capacity) { #if 0 #define Array(Type_) struct { \ - gbAllocator allocator; \ + gbAllocator const &allocator; \ Type_ * e; \ isize count; \ isize capacity; \ -- cgit v1.2.3