diff options
Diffstat (limited to 'array.c')
| -rw-r--r-- | array.c | 28 |
1 files changed, 12 insertions, 16 deletions
@@ -4,27 +4,24 @@ #include <stdlib.h> #define CRASH_IF_OOB(array, len) {\ - if (len > array.length)\ - crash("Array access out of bounds: %ld > %ld\n", len, array.length);\ + if (len > array->length)\ + crash(\ + "Array does not have expected length: %ld > %ld\n",\ + len,\ + array->length);\ } -void* array_at(const array_t array, size_t idx) { - CRASH_IF_OOB(array, idx); - return (char*)array.__data + idx*array.elemsz; +void* array_at(const array_t* array, size_t idx) { + CRASH_IF_OOB(array, idx + 1); + return (char*)array->__data + idx*array->elemsz; } -array_t array_slice(const array_t array, size_t start, size_t length) { +array_t array_slice(const array_t* array, size_t start, size_t length) { CRASH_IF_OOB(array, start + length); - array_t slice = { + return (array_t) { .length = length, - .__data = (char*)array.__data + start * array.elemsz + .__data = (char*)array->__data + start * array->elemsz }; - return slice; -} - -array_t array_init(void* data, size_t length, size_t elemsz) { - array_t array = {.length = length, .elemsz = elemsz, .__data = data}; - return array; } array_t array_heap_alloc(size_t length, size_t elemsz) { @@ -35,12 +32,11 @@ array_t array_heap_alloc(size_t length, size_t elemsz) { length, elemsz); - array_t container = { + return (array_t) { .length = length, .elemsz = elemsz, .__data = data_ptr, }; - return container; } void array_heap_destroy(array_t array) { |
