summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'array.c')
-rw-r--r--array.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/array.c b/array.c
index 7d55041..abbe5b0 100644
--- a/array.c
+++ b/array.c
@@ -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) {