aboutsummaryrefslogtreecommitdiff
path: root/Array.c
diff options
context:
space:
mode:
Diffstat (limited to 'Array.c')
-rw-r--r--Array.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/Array.c b/Array.c
index c9c9984..c97f741 100644
--- a/Array.c
+++ b/Array.c
@@ -1,5 +1,6 @@
#include "Array.h"
#include "Types.h"
+#include "GlobalArena.h"
#include <stdlib.h>
#include <string.h>
@@ -11,14 +12,14 @@ struct ArrayMeta {
};
static inline struct ArrayMeta*
-Array_metadata(void* arr) {
+A_metadata(void* arr) {
return arr - sizeof(struct ArrayMeta);
}
typedef void* Array;
Array
-Array_new(BumpArena b, usize element_size, usize length) {
+A_new(BumpArena b, usize element_size, usize length) {
if (NULL == b)
return NULL;
@@ -29,36 +30,36 @@ Array_new(BumpArena b, usize element_size, usize length) {
.length = length,
};
- void* start = Balloc(b, sizeof(am) + element_size * length);
+ void* start = B_alloc(b, sizeof(am) + element_size * length);
memcpy(start, &am, sizeof(am));
return start + sizeof(am);
}
usize
-Array_length(Array arr) {
+A_length(Array arr) {
if (NULL == arr)
return 0;
- return Array_metadata(arr)->length;
+ return A_metadata(arr)->length;
}
usize
-Array_count(Array arr) {
+A_count(Array arr) {
if (NULL == arr)
return 0;
- return Array_metadata(arr)->count;
+ return A_metadata(arr)->count;
}
Result
-Array_push(Array arr, void *value) {
+A_push(Array arr, void *value) {
if (NULL == arr)
return R_Uninitialized;
- struct ArrayMeta *am = Array_metadata(arr);
+ struct ArrayMeta *am = A_metadata(arr);
if (am->count >= am->length) {
- if (!Bresizeable(am->b, arr))
+ if (!B_resizeable(am->b, arr))
abort();
- Bresize(am->b, sizeof(*am) + am->element_size * (am->length <<= 2));
+ B_resize(am->b, sizeof(*am) + am->element_size * (am->length <<= 2));
}
memcpy(arr + am->count++ * am->element_size, value, am->element_size);
@@ -67,14 +68,19 @@ Array_push(Array arr, void *value) {
}
void*
-Array_pop(Array arr) {
+A_pop(Array arr) {
if (NULL == arr)
return NULL;
- struct ArrayMeta *am = Array_metadata(arr);
+ struct ArrayMeta *am = A_metadata(arr);
if (am->count == 0)
return NULL;
return arr + am->element_size * --am->count;
}
+
+Array
+AG_new(usize element_size, usize length) {
+ return A_new(g_arena, element_size, length);
+}