reactor-c
1.0
C Runtime for Lingua Franca
Loading...
Searching...
No Matches
generics.h
Go to the documentation of this file.
1
11
12
#ifndef GENERICS_H
13
#define GENERICS_H
14
15
// If buitin are not available on target toolchain we may not be able to support generics
16
#if defined __has_builtin
17
// Auto-Deduce variable type based on assigned value
18
#define var __auto_type
19
28
#define lf_is_same_type(a, b) __builtin_types_compatible_p(__typeof__(a), __typeof__(b))
29
38
#define lf_is_same(typename, b) __builtin_types_compatible_p(typename, __typeof__(b))
39
48
#define lf_is_type_equal(typename_a, typename_b) __builtin_types_compatible_p(typename_a, typename_b)
49
57
#define lf_is_pointer_or_array(p) (__builtin_classify_type(p) == 5)
58
66
#define lf_decay(p) (&*__builtin_choose_expr(lf_is_pointer_or_array(p), p, NULL))
67
75
#define lf_is_pointer(p) lf_is_same_type(p, lf_decay(p))
76
84
#define lf_get_pointer(p) __builtin_choose_expr(lf_is_pointer(p), p, &p)
85
94
#define lf_to_left_type(left, right) \
95
__builtin_choose_expr(lf_is_pointer_or_array(left), \
96
__builtin_choose_expr(lf_is_pointer_or_array(right), (right), &(right)), \
97
__builtin_choose_expr(lf_is_pointer_or_array(right), *(right), (right)))
98
99
#else
// buitin are not available
100
101
#define var
102
#define lf_is_same_type(a, b)
103
#define lf_is_same(typename, b)
104
#define lf_is_pointer_or_array(p)
105
#define lf_decay(p)
106
#define lf_is_pointer(p)
107
#define lf_get_pointer(p)
108
#define lf_to_left_type(left, right)
109
110
#endif
// __has_builtin
111
112
#endif
// GENERICS_H
Users
runner
work
reactor-c
reactor-c
util
generics.h
Generated on
for reactor-c by
1.14.0