XROAD
xroad_vector.h
Go to the documentation of this file.
1 #pragma once
7 #include "xroad_common_fwd.h"
8 #include "xroad_common_types.h"
9 #include <stdint.h>
10 #include <stdlib.h>
11 
12 #ifdef __cplusplus
13 extern "C"
14 {
15 #endif
16 
20 typedef void (*xroad_vector_free_func_t)(void*);
21 
22 typedef struct
23 {
24  size_t entry_size;
25  size_t capacity;
26  xroad_mem_pool_t* pool;
29 
39  size_t entry_size, size_t capacity, xroad_mem_pool_t* pool, xroad_vector_free_func_t free_func);
40 
41 #define xroad_vector_create(...) \
42 ({ \
43  xroad_vector_args_t args = {__VA_ARGS__}; \
44  xroad_vector_create_ex(args.entry_size, args.capacity, args.pool, args.dtor); \
45 })
46 
52 
53 #define __xroad_vector_dtor__ __dtor__(xroad_vector_destructor)
54 void xroad_vector_destructor(void* vector);
55 
60 int32_t xroad_vector_get_size(const xroad_vector_t* vector);
61 
67 
73 #define xroad_vector_push_back(vector, val) \
74  xroad_vector_insert(vector, xroad_vector_get_size(vector), val)
75 
81 #define xroad_vector_push_front(vector, val) \
82  xroad_vector_insert(vector, 0, val)
83 
90 void xroad_vector_insert(xroad_vector_t* vector, size_t pos, void* val);
91 
98 void xroad_vector_delete_at(xroad_vector_t* vector, size_t pos, xroad_vector_free_func_t free_func);
99 
106 
113 void* xroad_vector_get_at(const xroad_vector_t* vector, size_t pos);
114 
120 #define xroad_vector_get_last(vector) \
121  xroad_vector_get_at(vector, xroad_vector_get_size(vector) - 1)
122 
128 #define xroad_vector_get_first(vector) \
129  xroad_vector_get_at(vector, 0)
130 
134 typedef int32_t (*xroad_cmp_func_t)(const void*, const void*);
135 
143 int32_t xroad_vector_find(xroad_vector_t* vector, void* val, xroad_cmp_func_t cb);
144 
151 
157 
158 #ifdef __cplusplus
159 }
160 #endif
Definition: xroad_vector.h:23
struct xroad_vector_s xroad_vector_t
see common/xroad_vector.h for details
Definition: xroad_common_fwd.h:35
void xroad_vector_insert(xroad_vector_t *vector, size_t pos, void *val)
xroad_vector_t * xroad_vector_create_ex(size_t entry_size, size_t capacity, xroad_mem_pool_t *pool, xroad_vector_free_func_t free_func)
int32_t xroad_vector_find(xroad_vector_t *vector, void *val, xroad_cmp_func_t cb)
void xroad_vector_clear(xroad_vector_t *vector)
void xroad_vector_sort(xroad_vector_t *vector, xroad_cmp_func_t cb)
int32_t(* xroad_cmp_func_t)(const void *, const void *)
Definition: xroad_vector.h:134
int32_t xroad_vector_get_size(const xroad_vector_t *vector)
void xroad_vector_destroy(xroad_vector_t *vector)
void * xroad_vector_get_at(const xroad_vector_t *vector, size_t pos)
void xroad_vector_pop_back(xroad_vector_t *vector, xroad_vector_free_func_t free_func)
int32_t xroad_vector_get_capacity(const xroad_vector_t *vector)
void(* xroad_vector_free_func_t)(void *)
Definition: xroad_vector.h:20
void xroad_vector_delete_at(xroad_vector_t *vector, size_t pos, xroad_vector_free_func_t free_func)