Add missing function for variant:

variant_init_element
variant_init_set_element
This commit is contained in:
Patrick Pelissier committed 2018-04-30 10:24:37 +02:00
1 parent ddc1c7e98f
commit 34d0f8ec81
3 files changed
+45 -3

No files matched your search

+9 -1
View File
@@ -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
View File
@@ -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) \
+12
View File
@@ -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,