src/dynarray.c
 1#include <stdio.h>
 2
 3#include "alba.h"
 4
 5#include <stdlib.h>
 6#include <string.h>
 7
 8void float_array_reserve(FloatArray* array, const uint64_t capacity)
 9{
10    if (array->capacity > capacity) return;
11    array->capacity = capacity;
12    array->data = reallocarray(array->data, array->capacity, sizeof(float));
13}
14
15void float_array_append(FloatArray* array, const float value)
16{
17    if (array->capacity < array->length + 1)
18    {
19        while (array->capacity < array->length + 1)
20        {
21            if (array->capacity == 0) array->capacity = 4;
22            array->capacity = array->capacity * 2;
23        }
24        array->data = reallocarray(array->data, array->capacity, sizeof(float));
25    }
26
27    array->data[array->length] = value;
28    array->length += 1;
29}
30
31void float_array_extend(FloatArray* array, const uint64_t size, const float* data)
32{
33    float_array_reserve(array, array->length + size);
34    memcpy(array->data + array->length, data, size * sizeof(float));
35    array->length += size;
36}
37
38void float_array_release(const FloatArray* array)
39{
40    free(array->data);
41}
42
43void float_array_clear(FloatArray* array)
44{
45    array->length = 0;
46}
47
48
49void uint32_array_reserve(Uint32Array* array, const uint64_t capacity)
50{
51    if (array->capacity > capacity) return;
52    array->capacity = capacity;
53    array->data = reallocarray(array->data, array->capacity, sizeof(uint32_t));
54}
55
56void uint32_array_append(Uint32Array* array, const uint32_t value)
57{
58    if (array->capacity < array->length + 1)
59    {
60        while (array->capacity < array->length + 1)
61        {
62            if (array->capacity == 0) array->capacity = 4;
63            array->capacity = array->capacity * 2;
64        }
65        array->data = reallocarray(array->data, array->capacity, sizeof(uint32_t));
66    }
67
68    array->data[array->length] = value;
69    array->length += 1;
70}
71
72void uint32_array_extend(Uint32Array* array, const uint64_t size, const uint32_t* data)
73{
74    uint32_array_reserve(array, array->length + size);
75    memcpy(array->data + array->length, data, size * sizeof(uint32_t));
76    array->length += size;
77}
78
79void uint32_array_release(const Uint32Array* array)
80{
81    free(array->data);
82}
83
84void uint32_array_clear(Uint32Array* array)
85{
86    array->length = 0;
87}