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;
}
|