summaryrefslogtreecommitdiff
path: root/test/raytracer/arrays.c
blob: 43508ee6678602b41486a3f33faeab583a9c2db5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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;
}