]> git.lizzy.rs Git - nothing.git/blob - src/dynarray.h
(#946) Merge snapping conditions
[nothing.git] / src / dynarray.h
1 #ifndef DYNARRAY_H_
2 #define DYNARRAY_H_
3
4 #include <stdlib.h>
5 #include <stdbool.h>
6
7 typedef struct Dynarray Dynarray;
8
9 Dynarray *create_dynarray(size_t element_size);
10 void destroy_dynarray(Dynarray *dynarray);
11
12 size_t dynarray_count(const Dynarray *dynarray);
13 void *dynarray_data(Dynarray *dynarray);
14 void *dynarray_pointer_at(Dynarray *dynarray, size_t index);
15 void dynarray_replace_at(Dynarray *dynarray, size_t index, void *element);
16 void dynarray_copy_to(Dynarray *dynarray, void *dest, size_t index);
17 void dynarray_clear(Dynarray *dynarray);
18 // O(1) amortized
19 // TODO(#981): dynarray_push should be called dynarray_push_copy
20 int dynarray_push(Dynarray *dynarray, const void *element);
21 int dynarray_push_empty(Dynarray *dynarray);
22 void dynarray_pop(Dynarray *dynarray, void *element);
23 bool dynarray_contains(const Dynarray *dynarray,
24                        const void *element);
25
26 void dynarray_swap(Dynarray *dynarray, size_t i, size_t j);
27
28 // O(N)
29 void dynarray_delete_at(Dynarray *dynarray, size_t index);
30 void dynarray_insert_before(Dynarray *dynarray, size_t index, void *element);
31
32 #endif  // DYNARRAY_H_