aboutsummaryrefslogtreecommitdiff
path: root/src/array.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-05-27 18:23:37 +0100
committergingerBill <bill@gingerbill.org>2020-05-27 18:23:37 +0100
commit1a0614b0d7f4b6010d79ac0a402d3c4c1f389529 (patch)
treeaeee6f81470fe8f9ed0d918008272ed081a099bd /src/array.cpp
parent876820789e9dedaa6198c4cd145702485e3bd21c (diff)
Improve performance of tokenization and parsing
Diffstat (limited to 'src/array.cpp')
-rw-r--r--src/array.cpp14
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) {