summaryrefslogtreecommitdiffhomepage
path: root/include/stc/cvec.h
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-06-01 20:46:09 +0200
committerTyge Løvset <[email protected]>2021-06-01 20:46:09 +0200
commit18de7e809d470c84fec9c420133e3a5a036a4239 (patch)
tree88abab137f32a98a388e89e3734fb4dba38d8c06 /include/stc/cvec.h
parent032b6d654a1125fe172ef225fdacb87ac3e1fdc5 (diff)
downloadSTC-modified-18de7e809d470c84fec9c420133e3a5a036a4239.tar.gz
STC-modified-18de7e809d470c84fec9c420133e3a5a036a4239.zip
1. Added c_forscope() macro. Similar to c_forvar() and c_fordefer().
2. Added *experimental* forward declare for cvec: No API changes: typedef struct person Person; // forward declare cvec_prs forward_cvec(prs, Person); ... // complete definition: specify c_false as very last parameter. using_cvec(prs, Person, c_no_compare, person_del, person_clone, c_default_toraw, Person, c_false);
Diffstat (limited to 'include/stc/cvec.h')
-rw-r--r--include/stc/cvec.h22
1 files changed, 15 insertions, 7 deletions
diff --git a/include/stc/cvec.h b/include/stc/cvec.h
index 3e7e37f2..02537081 100644
--- a/include/stc/cvec.h
+++ b/include/stc/cvec.h
@@ -27,6 +27,8 @@
#include <stdlib.h>
#include <string.h>
+#define forward_cvec(X, Value) _cvec_types(cvec_##X, Value)
+
#define using_cvec(...) c_MACRO_OVERLOAD(using_cvec, __VA_ARGS__)
#define using_cvec_2(X, Value) \
@@ -38,22 +40,28 @@
#define using_cvec_5(X, Value, valueCompare, valueDel, valueClone) \
using_cvec_7(X, Value, valueCompare, valueDel, valueClone, c_default_toraw, Value)
#define using_cvec_7(X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \
- _c_using_cvec(cvec_##X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue)
+ _c_using_cvec(cvec_##X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue, c_true)
+#define using_cvec_8(X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue, defineTypes) \
+ _c_using_cvec(cvec_##X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue, defineTypes)
#define using_cvec_str() \
- _c_using_cvec(cvec_str, cstr, c_rawstr_compare, cstr_del, cstr_from, cstr_toraw, const char*)
-
+ using_cvec_7(str, cstr, c_rawstr_compare, cstr_del, cstr_from, cstr_toraw, const char*)
struct cvec_rep { size_t size, cap; void* data[]; };
#define _cvec_rep(self) c_container_of((self)->data, struct cvec_rep, data)
+#define c_true(...) __VA_ARGS__
+#define c_false(...)
-#define _c_using_cvec(CX, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \
-\
+#define _cvec_types(CX, Value) \
typedef Value CX##_value_t; \
+ typedef struct { CX##_value_t *ref; } CX##_iter_t; \
+ typedef struct { CX##_value_t *data; } CX
+
+#define _c_using_cvec(CX, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue, defineTypes) \
+\
+ defineTypes( _cvec_types(CX, Value); ) \
typedef RawValue CX##_rawvalue_t; \
- typedef struct {CX##_value_t *ref;} CX##_iter_t; \
- typedef struct {CX##_value_t *data;} CX; \
\
STC_API CX CX##_init(void); \
STC_API CX CX##_clone(CX cx); \