From 1a0614b0d7f4b6010d79ac0a402d3c4c1f389529 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 27 May 2020 18:23:37 +0100 Subject: Improve performance of tokenization and parsing --- src/array.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/array.cpp') 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 Array array_make (gbAllocator const &a, isize 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); +template T * array_add_and_get (Array *array); template void array_add_elems (Array *array, T const *elems, isize elem_count); template T array_pop (Array *array); template void array_clear (Array *array); @@ -42,6 +43,7 @@ template void array_set_capacity (Array *array, isize capac template Array array_slice (Array const &array, isize lo, isize hi); + template void array_ordered_remove (Array *array, isize index); template void array_unordered_remove(Array *array, isize index); @@ -158,6 +160,18 @@ void array_add(Array *array, T const &t) { array->count++; } +template +T *array_add_and_get(Array *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 void array_add_elems(Array *array, T const *elems, isize elem_count) { GB_ASSERT(elem_count >= 0); -- cgit v1.2.3