Fenix @develop
 
Loading...
Searching...
No Matches
fenix_dynamic_array.h
1#include <stdlib.h>
2#include <string.h>
3#include <assert.h>
4
5#define CAT__(a,b,c) a##b##c
6#define CAT_(a,b,c) CAT__(a,b,c)
7#define NAME(a) CAT_(__fenix_,__fenix_dynamic_array_typename,a)
8
9#define __fenix_dynamic_array_t NAME(_dynamic_array_t)
10#define __fenix_dynamic_array_init NAME(_dynamic_array_init)
11#define __fenix_dynamic_array_destroy NAME(_dynamic_array_destroy)
12#define __fenix_dynamic_array_inc NAME(_dynamic_array_inc)
13#define __fenix_dynamic_array_dec NAME(_dynamic_array_dec)
14#define __fenix_dynamic_array_clear NAME(_dynamic_array_clear)
15
16typedef struct {
17 int size; // number of used elements in 'elements'
18 int max_size; // number of elements that can fit in 'elements'
19 size_t bytes_allocated; // size, in bytes, of 'elements'
20 __fenix_dynamic_array_type *elements;
21 // pointer to array where the elements are stored
23
24static inline
25void __fenix_dynamic_array_init(__fenix_dynamic_array_t *d,
26 int max_size)
27{
28 d->size = 0;
29 d->max_size = max_size;
30 d->bytes_allocated = max_size*sizeof(__fenix_dynamic_array_type);
31 d->elements = malloc(d->bytes_allocated);
32 memset(d->elements, 0x00, d->bytes_allocated);
33}
34
35static inline
36void __fenix_dynamic_array_destroy(__fenix_dynamic_array_t *d)
37{
38 free(d->elements);
39 d->size = 0;
40 d->max_size = 0;
41}
42
43static inline
44void __fenix_dynamic_array_inc(__fenix_dynamic_array_t *d)
45{
46 assert(d->size <= d->max_size);
47 if(d->size == d->max_size) {
48 size_t olds = d->bytes_allocated;
49 d->bytes_allocated *= 2;
50 d->max_size *= 2;
51 d->elements = realloc(d->elements, d->bytes_allocated);
52 memset(((char *)d->elements)+olds, 0x00, olds);
53 }
54 d->size++;
55}
56
57static inline
58void __fenix_dynamic_array_dec(__fenix_dynamic_array_t *d)
59{
60 assert(d->size > 0);
61 d->size--;
62}
63
64static inline
65void __fenix_dynamic_array_clear(__fenix_dynamic_array_t *d)
66{
67 d->size = 0;
68}
69
70#undef CAT__
71#undef CAT_
72#undef NAME
73#undef __fenix_dynamic_array_t
74#undef __fenix_dynamic_array_init
75#undef __fenix_dynamic_array_destroy
76#undef __fenix_dynamic_array_inc
77#undef __fenix_dynamic_array_dec
78#undef __fenix_dynamic_array_clear
Definition fenix_dynamic_array.h:16