aboutsummaryrefslogtreecommitdiffstats
path: root/src/badlib.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-06-19 12:51:51 +0200
committerBad Diode <bd@badd10de.dev>2024-06-19 12:51:51 +0200
commitaeca71546bb8c94d1aeae6fe3e15835a2541317d (patch)
treed3bc6a6d0b4943ded12603225f39ea333fff5c24 /src/badlib.h
parent06220393b4d3e9bdd227f333650883971e37b9f9 (diff)
downloadbdl-aeca71546bb8c94d1aeae6fe3e15835a2541317d.tar.gz
bdl-aeca71546bb8c94d1aeae6fe3e15835a2541317d.zip
Implement the worlds worst register machine
Diffstat (limited to 'src/badlib.h')
-rw-r--r--src/badlib.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/badlib.h b/src/badlib.h
index 25bb92b..522e4bb 100644
--- a/src/badlib.h
+++ b/src/badlib.h
@@ -920,9 +920,12 @@ typedef struct ArrayHeader {
920#define array_cap(ARR) ((ARR) ? array_head(ARR)->cap : 0) 920#define array_cap(ARR) ((ARR) ? array_head(ARR)->cap : 0)
921 921
922// Initialize a dynamic array ARR with N elements. The initialization doesn't 922// Initialize a dynamic array ARR with N elements. The initialization doesn't
923// zero out the data, so thread carefully.. 923// zero out the data, so thread carefully. Use array_zero instead if that's what
924// you need.
924#define array_init(ARR, N, ARENA) \ 925#define array_init(ARR, N, ARENA) \
925 ((ARR) = _array_reserve(N, sizeof(*(ARR)), (ARENA))) 926 ((ARR) = _array_reserve(N, sizeof(*(ARR)), (ARENA)))
927#define array_zero(ARR, N, ARENA) \
928 ((ARR) = _array_reserve_zero(N, sizeof(*(ARR)), (ARENA)))
926 929
927// Push a given element T to the dynamic array ARR. 930// Push a given element T to the dynamic array ARR.
928#define array_push(ARR, T, ARENA) \ 931#define array_push(ARR, T, ARENA) \
@@ -953,6 +956,15 @@ _array_reserve(sz num_elem, sz type_size, Arena *a) {
953} 956}
954 957
955static inline void * 958static inline void *
959_array_reserve_zero(sz num_elem, sz type_size, Arena *a) {
960 u8 *p = arena_calloc(num_elem * type_size + sizeof(ArrayHeader), a);
961 p += sizeof(ArrayHeader);
962 array_head(p)->size = 0;
963 array_head(p)->cap = num_elem;
964 return p;
965}
966
967static inline void *
956_array_maybe_grow(void *arr, sz type_size, Arena *a) { 968_array_maybe_grow(void *arr, sz type_size, Arena *a) {
957 if (!arr) { 969 if (!arr) {
958 arr = _array_reserve(0, 0, a); 970 arr = _array_reserve(0, 0, a);