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