diff options
author | Bad Diode <bd@badd10de.dev> | 2024-06-19 12:51:51 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2024-06-19 12:51:51 +0200 |
commit | aeca71546bb8c94d1aeae6fe3e15835a2541317d (patch) | |
tree | d3bc6a6d0b4943ded12603225f39ea333fff5c24 /src/badlib.h | |
parent | 06220393b4d3e9bdd227f333650883971e37b9f9 (diff) | |
download | bdl-aeca71546bb8c94d1aeae6fe3e15835a2541317d.tar.gz bdl-aeca71546bb8c94d1aeae6fe3e15835a2541317d.zip |
Implement the worlds worst register machine
Diffstat (limited to 'src/badlib.h')
-rw-r--r-- | src/badlib.h | 14 |
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 | ||
955 | static inline void * | 958 | static 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 | |||
967 | static 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); |