]> git.lizzy.rs Git - nothing.git/blob - src/dynarray.h
8832d82a9199624735f0fc81613aedb3d4663f07
[nothing.git] / src / dynarray.h
1 #ifndef DYNARRAY_H_
2 #define DYNARRAY_H_
3
4 #include <stdlib.h>
5 #include <stdbool.h>
6 #include <stdint.h>
7
8 typedef struct {
9     size_t element_size;
10     size_t capacity;
11     size_t count;
12     uint8_t *data;
13 } Dynarray;
14
15 static inline
16 Dynarray create_dynarray(size_t element_size)
17 {
18     Dynarray result = {
19         .element_size = element_size,
20         .capacity = 0,
21         .count = 0,
22         .data = NULL
23     };
24     return result;
25 }
26
27 void *dynarray_pointer_at(Dynarray *dynarray, size_t index);
28 void dynarray_replace_at(Dynarray *dynarray, size_t index, void *element);
29 void dynarray_copy_to(Dynarray *dynarray, void *dest, size_t index);
30 void dynarray_clear(Dynarray *dynarray);
31 // O(1) amortized
32 // TODO(#981): dynarray_push should be called dynarray_push_copy
33 int dynarray_push(Dynarray *dynarray, const void *element);
34 int dynarray_push_empty(Dynarray *dynarray);
35 void dynarray_pop(Dynarray *dynarray, void *element);
36 bool dynarray_contains(const Dynarray *dynarray,
37                        const void *element);
38
39 void dynarray_swap(Dynarray *dynarray, size_t i, size_t j);
40
41 // O(N)
42 void dynarray_delete_at(Dynarray *dynarray, size_t index);
43 void dynarray_insert_before(Dynarray *dynarray, size_t index, void *element);
44
45 #endif  // DYNARRAY_H_