Cthulhu  0.2.10
Cthulhu compiler collection
vector.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-only
2 
3 #pragma once
4 
5 #include <ctu_std_api.h>
6 
7 #include "core/analyze.h"
8 
9 #include <stddef.h>
10 
12 
13 typedef struct arena_t arena_t;
14 
19 
21 typedef struct vector_t vector_t;
22 
28 CT_STD_API extern vector_t gEmptyVector;
29 
34 CT_STD_API extern const vector_t kEmptyVector;
35 
40 CT_STD_API void vector_delete(STA_RELEASE vector_t *vector);
41 
49 CT_STD_API vector_t *vector_new(size_t size, IN_NOTNULL arena_t *arena);
50 
60 CT_STD_API vector_t *vector_of(size_t len, IN_NOTNULL arena_t *arena);
61 
75 CT_STD_API vector_t *vector_init(void *value, IN_NOTNULL arena_t *arena);
76 
83 CT_STD_API vector_t *vector_clone(IN_NOTNULL vector_t *vector);
84 
89 CT_STD_API void vector_push(IN_NOTNULL vector_t **vector, void *value);
90 
95 CT_STD_API void vector_drop(IN_NOTNULL vector_t *vector);
96 
103 CT_STD_API void vector_set(
104  IN_NOTNULL vector_t *vector,
105  size_t index,
106  void *value
107 );
108 
117 CT_STD_API void *vector_get(
118  IN_NOTNULL const vector_t *vector,
119  size_t index);
120 
128 CT_STD_API void *vector_tail(IN_NOTNULL const vector_t *vector);
129 
136 CT_STD_API size_t vector_len(IN_NOTNULL const vector_t *vector);
137 
143 CT_STD_API void vector_append(IN_NOTNULL vector_t **vector, IN_NOTNULL const vector_t *other);
144 
153 CT_STD_API size_t vector_find(IN_NOTNULL vector_t *vector, const void *element);
154 
159 CT_STD_API void vector_reset(IN_NOTNULL vector_t *vec);
160 
168 CT_STD_API void **vector_data(IN_NOTNULL vector_t *vec);
169 
171 
CT_NODISCARD size_t size
Definition: scan.h:128
#define RET_NOTNULL
annotate the return value as not being null
#define STA_RELEASE
annotate a pointer as invalid after the function returns
#define CT_PUREFN
mark a function as pure, always returns the same value for the same arguments
Definition: analyze.h:228
#define CT_NODISCARD
mark a function as returning a value that must be used
#define IN_NOTNULL
annotate a parameter as not being null
#define RET_INSPECT
annotate the return value as needing to be inspected this is the same as CT_NODISCARD but implies tha...
#define CT_BEGIN_API
Definition: compiler.h:129
#define CT_END_API
Definition: compiler.h:130
CT_NODISCARD CT_PUREFN CT_STD_API void * vector_get(const vector_t *vector, size_t index)
get a value from a vector
Definition: vector.c:134
CT_NODISCARD CT_STD_API vector_t * vector_new(size_t size, arena_t *arena)
create a new vector with an initial capacity
Definition: vector.c:63
CT_NODISCARD CT_STD_API vector_t * vector_of(size_t len, arena_t *arena)
create a new vector with a specified length
Definition: vector.c:71
CT_STD_API const vector_t kEmptyVector
a global empty vector used to avoid allocating alot of empty vectors
Definition: vector.c:25
CT_STD_API void vector_push(vector_t **vector, void *value)
push a value onto the end of a vector
Definition: vector.c:108
CT_STD_API void vector_drop(vector_t *vector)
pop a value from the end of a vector
Definition: vector.c:117
CT_NODISCARD CT_PUREFN CT_STD_API void * vector_tail(const vector_t *vector)
get the last element of a vector
Definition: vector.c:143
CT_STD_API void vector_set(vector_t *vector, size_t index, void *value)
set a value in a vector
Definition: vector.c:125
CT_STD_API void vector_delete(STA_RELEASE vector_t *vector)
destroy a vector
CT_STD_API vector_t gEmptyVector
a global empty vector used to avoid allocating alot of empty vectors
Definition: vector.c:24
CT_NODISCARD CT_STD_API vector_t * vector_init(void *value, arena_t *arena)
create a new vector with a single initial value
Definition: vector.c:79
CT_NODISCARD CT_STD_API vector_t * vector_clone(vector_t *vector)
clone a vector
Definition: vector.c:89
CT_PUREFN CT_STD_API size_t vector_find(vector_t *vector, const void *element)
find an element in a vector searches via pointer equality
Definition: vector.c:160
CT_STD_API void vector_reset(vector_t *vec)
reset the contents of a vector
Definition: vector.c:188
CT_STD_API void ** vector_data(vector_t *vec)
get the data of a vector
Definition: vector.c:196
CT_NODISCARD CT_PUREFN CT_STD_API size_t vector_len(const vector_t *vector)
get the length of a vector
Definition: vector.c:152
CT_STD_API void vector_append(vector_t **vector, const vector_t *other)
append the contents of one vector to another this copies the contents of other into vector
Definition: vector.c:176
an allocator object
Definition: arena.h:86
a generic vector of pointers
Definition: vector.c:16
arena_t * arena
Definition: vector.c:17