ae2f_docs
Loading...
Searching...
No Matches
vec.c
1#ifndef aclspv_pass_ctx_auto_h
2#define aclspv_pass_ctx_auto_h
3
4#include <ae2f/Macro.h>
5#include <stddef.h>
6#include <ae2f/Keys.h>
7#include <ae2f/Cast.h>
8
9typedef struct {
10 void* ae2f_restrict m_p;
11 size_t m_sz;
12} x_aclspv_vec;
13
15
16void aclspv_init_vec(x_aclspv_vec);
17void aclspv_stop_vec(x_aclspv_vec);
18void aclspv_grow_vec(x_aclspv_vec, const size_t);
19void aclspv_grow_vec_with_copy(x_aclspv_vec, const size_t);
20
21void f_free(void* ae2f_restrict, size_t);
22ae2f_retnew void* f_malloc(size_t);
23void* f_memcpy(void*, const void*, size_t);
24
25#endif
26
27#include <string.h>
28#include <stdlib.h>
29
30#define _aclspv_free(a, b) free(a)
31#define _aclspv_malloc(a) calloc(1, ae2f_static_cast(size_t, a))
32#define _aclspv_memcpy(a, b, c) memcpy(a, b, ae2f_static_cast(size_t, c))
33
34
35ae2f_MAC() aclspv_init_vec(x_aclspv_vec i_vec) {
36 (i_vec).m_p = ae2f_NIL;
37 (i_vec).m_sz = 0ul;
38}
39
40ae2f_MAC((f_free, )) aclspv_stop_vec(x_aclspv_vec s_vec) {
41 f_free((s_vec).m_p, (s_vec).m_sz);
42}
43
44ae2f_MAC((f_malloc, f_free, ))
45 aclspv_grow_vec(x_aclspv_vec rc_vec, const size_t c_new_sz) {
46 if((c_new_sz) > (rc_vec).m_sz) {
47 f_free((rc_vec).m_p, (c_new_sz));
48 ae2f_expected_if(((rc_vec).m_p = f_malloc(c_new_sz))) {
49 (rc_vec).m_sz = (c_new_sz);
50 } else {
51 (rc_vec).m_sz = 0ul;
52 }
53 }
54 }
55
56ae2f_MAC((f_malloc, f_free, f_memcpy, L_new, ))
57 aclspv_grow_vec_with_copy(x_aclspv_vec rc_vec, const size_t c_new_sz) {
58 if((c_new_sz) > (rc_vec).m_sz) {
59 void* ae2f_restrict
60 L_new = f_malloc(c_new_sz);
61
62 ae2f_expected_if(L_new) {
63 if((rc_vec).m_p) {
64 f_memcpy(L_new, (rc_vec).m_p, (rc_vec).m_sz);
65 f_free((rc_vec).m_p, (rc_vec).m_sz);
66 }
67 (rc_vec).m_p = L_new;
68 (rc_vec).m_sz = (c_new_sz);
69 } else {
70 f_free((rc_vec).m_p, (rc_vec).m_sz);
71 (rc_vec).m_p = ae2f_NIL;
72 (rc_vec).m_sz = 0ul;
73 }
74 }
75 }
76
77#endif
#define ae2f_static_cast(t, v)
static_cast for C++
Definition Cast.h:28
#define __ae2f_MACRO_GENERATED
Definition Macro.h:4
#define ae2f_MAC(a)
A hint for creating a macro from void-returning function.
Definition Macro.h:17
#define ae2f_NIL
Definition Nil.h:13
#define ae2f_retnew
The returning pointer does not alias to existing object.
Definition cc.h:94
#define ae2f_expected_if(a)
Definition cc.h:195
#define ae2f_restrict
Keyword as restrict on C99.
Definition cc.h:81