Add missing function for variant:
variant_init_element variant_init_set_element
This commit is contained in:
1 parent
ddc1c7e98f
commit
34d0f8ec81
3 files changed
+45
-3
No files matched your search
@@ -1949,9 +1949,17 @@ Clear the variant 'variant (aka destructor).
|
||||
|
||||
Clean the variant 'variant and make it empty.
|
||||
|
||||
##### void name\_init_elementN(name\_t variant)
|
||||
|
||||
Initialize the variant 'variant' to the type of 'element1'
|
||||
|
||||
##### void name\_init\_set_elementN(name\_t variant, const typeN elementN)
|
||||
|
||||
Initialize and set the variant 'variant' to the type and value of 'elementN'.
|
||||
|
||||
##### void name\_set_elementN(name\_t variant, const typeN elementN)
|
||||
|
||||
Set the variant 'variant' to the type and value of 'element1'.
|
||||
Set the variant 'variant' to the type and value of 'elementN'.
|
||||
|
||||
##### typeN * name\_get_elementN(name\_t variant)
|
||||
|
||||
|
||||
+24
-2
@@ -40,6 +40,8 @@
|
||||
VARIANTI_DEFINE_INIT_SET(name, __VA_ARGS__) \
|
||||
VARIANTI_DEFINE_SET(name, __VA_ARGS__) \
|
||||
VARIANTI_DEFINE_TEST_P(name, __VA_ARGS__) \
|
||||
VARIANTI_DEFINE_INITER(name, __VA_ARGS__) \
|
||||
VARIANTI_DEFINE_INIT_SETTER(name, __VA_ARGS__) \
|
||||
VARIANTI_DEFINE_SETTER(name, __VA_ARGS__) \
|
||||
VARIANTI_DEFINE_GETTER(name, __VA_ARGS__) \
|
||||
VARIANTI_DEFINE_CLEAN_FUNC(name, __VA_ARGS__) \
|
||||
@@ -177,7 +179,28 @@
|
||||
}
|
||||
|
||||
|
||||
#define VARIANTI_DEFINE_SETTER(name, ...) \
|
||||
#define VARIANTI_DEFINE_INITER(name, ...) \
|
||||
M_MAP2(VARIANTI_DEFINE_INITER_FUNC, name, __VA_ARGS__)
|
||||
#define VARIANTI_DEFINE_INITER_FUNC(name, a) \
|
||||
static inline void M_C3(name, _init_, VARIANTI_GET_FIELD a)(M_C(name,_t) my) { \
|
||||
/* Reinit variable with the given value */ \
|
||||
my->type = M_C3(name, _, VARIANTI_GET_FIELD a); \
|
||||
VARIANTI_GET_INIT a(my -> value. VARIANTI_GET_FIELD a); \
|
||||
}
|
||||
|
||||
|
||||
#define VARIANTI_DEFINE_INIT_SETTER(name, ...) \
|
||||
M_MAP2(VARIANTI_DEFINE_INIT_SETTER_FUNC, name, __VA_ARGS__)
|
||||
#define VARIANTI_DEFINE_INIT_SETTER_FUNC(name, a) \
|
||||
static inline void M_C3(name, _init_set_, VARIANTI_GET_FIELD a)(M_C(name,_t) my, \
|
||||
VARIANTI_GET_TYPE a VARIANTI_GET_FIELD a ) { \
|
||||
my->type = M_C3(name, _, VARIANTI_GET_FIELD a); \
|
||||
VARIANTI_GET_INIT_SET a(my -> value. VARIANTI_GET_FIELD a, \
|
||||
VARIANTI_GET_FIELD a); \
|
||||
}
|
||||
|
||||
|
||||
#define VARIANTI_DEFINE_SETTER(name, ...) \
|
||||
M_MAP2(VARIANTI_DEFINE_SETTER_FUNC, name, __VA_ARGS__)
|
||||
#define VARIANTI_DEFINE_SETTER_FUNC(name, a) \
|
||||
static inline void M_C3(name, _set_, VARIANTI_GET_FIELD a)(M_C(name,_t) my, \
|
||||
@@ -194,7 +217,6 @@
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
#define VARIANTI_DEFINE_GETTER(name, ...) \
|
||||
M_MAP2(VARIANTI_DEFINE_GETTER_FUNC, name, __VA_ARGS__)
|
||||
#define VARIANTI_DEFINE_GETTER_FUNC(name, a) \
|
||||
|
||||
@@ -134,6 +134,18 @@ static void test_pair(void)
|
||||
|
||||
pair_clear(p2);
|
||||
pair_clear(p);
|
||||
|
||||
pair_init_value(p);
|
||||
assert(pair_value_p(p));
|
||||
f = pair_get_value(p);
|
||||
assert (*f == 0.0);
|
||||
pair_clear(p);
|
||||
|
||||
pair_init_set_value(p, 17.0);
|
||||
assert(pair_value_p(p));
|
||||
f = pair_get_value(p);
|
||||
assert (*f == 17.0);
|
||||
pair_clear(p);
|
||||
}
|
||||
|
||||
VARIANT_DEF2(triple,
|
||||
|
||||
Reference in new issue
Block a user