diff options
Diffstat (limited to 'test/raytracer/arrays.c')
-rw-r--r-- | test/raytracer/arrays.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/raytracer/arrays.c b/test/raytracer/arrays.c new file mode 100644 index 00000000..43508ee6 --- /dev/null +++ b/test/raytracer/arrays.c @@ -0,0 +1,30 @@ +#include "config.h" +#include "arrays.h" + +struct array * alloc_array(int eltsize, int initialsize) +{ + struct array * a = arena_alloc(sizeof(struct array)); + a->size = 0; + a->capacity = initialsize; + a->data = arena_alloc(eltsize * initialsize); + return a; +} + +void grow_array(int eltsize, struct array * arr) +{ + void * newdata = arena_alloc(arr->capacity * 2 * eltsize); + memcpy(newdata, arr->data, arr->size * eltsize); + arr->data = newdata; + arr->capacity *= 2; +} + +struct array * copy_array(int eltsize, struct array * arr, int extrasize) +{ + struct array * a = arena_alloc(sizeof(struct array)); + a->size = arr->size; + a->capacity = arr->size + extrasize; + a->data = arena_alloc(eltsize * a->capacity); + memcpy(a->data, arr->data, eltsize * a->size); + return a; +} + |