24#define XRT_FUTURE_VALUE_TYPES_WITH(_, P) \
25 _(UINT64, uint64_t, uint64_, P) \
26 _(INT64, int64_t, int64_, P)
28#define XRT_FUTURE_VALUE_WRAP_MACRO(N, T, M, X) X(N, T, M)
30#define XRT_FUTURE_VALUE_TYPES(X) XRT_FUTURE_VALUE_TYPES_WITH(XRT_FUTURE_VALUE_WRAP_MACRO, X)
32typedef enum xrt_future_value_type
34 XRT_FUTURE_VALUE_TYPE_NONE,
36#define X_ENUM_ENTRY(TYPE_NAME, T, M) XRT_FUTURE_VALUE_TYPE_##TYPE_NAME,
37 XRT_FUTURE_VALUE_TYPES(X_ENUM_ENTRY)
41 XRT_FUTURE_VALUE_TYPE_LIST_END,
43 XRT_FUTURE_VALUE_TYPE_COUNT = XRT_FUTURE_VALUE_TYPE_LIST_END - 1,
44} xrt_future_value_type_t;
49#define X_MEMBER_ENTRY(N, TYPE, MEMBER) TYPE MEMBER;
50 XRT_FUTURE_VALUE_TYPES(X_MEMBER_ENTRY)
53 XRT_ALIGNAS(8) xrt_future_value_type_t type;
59 return xfv && xfv->type != XRT_FUTURE_VALUE_TYPE_NONE;
62#define XRT_FUTURE_VALUE_MAKE(TYPE_NAME, MEMBER, VALUE) \
63 XRT_C11_COMPOUND(struct xrt_future_value) \
65 .MEMBER = VALUE, .type = XRT_FUTURE_VALUE_TYPE_##TYPE_NAME, \
68#define XRT_NULL_FUTURE_VALUE XRT_FUTURE_VALUE_MAKE(NONE, uint64_, 0)
71xrt_future_value_make_none(const void *ignore)
74 return XRT_NULL_FUTURE_VALUE;
77#define X_MAKE_CONS_FN(TYPE_NAME, TYPE, MEMBER) \
78 static inline struct xrt_future_value xrt_future_value_make_##MEMBER(TYPE value) \
80 return XRT_FUTURE_VALUE_MAKE(TYPE_NAME, MEMBER, value); \
83 static inline struct xrt_future_value xrt_future_value_make_##MEMBER##_ptr(const TYPE *value) \
85 assert(value != NULL); \
86 return XRT_FUTURE_VALUE_MAKE(TYPE_NAME, MEMBER, (*value)); \
88XRT_FUTURE_VALUE_TYPES(X_MAKE_CONS_FN)
96#define X_MAKE_CONS_FN(TYPE_NAME, TYPE, MEMBER) \
97 inline struct xrt_future_value xrt_future_value_make(const TYPE &value) \
99 return XRT_FUTURE_VALUE_MAKE(TYPE_NAME, MEMBER, value); \
101XRT_FUTURE_VALUE_TYPES(X_MAKE_CONS_FN)
106#define XRT_FUTURE_VALUE_TYPECASE(TYPE_NAME, TYPE, MEMBER, P) \
107 TYPE: xrt_future_value_make_##MEMBER, \
108 const TYPE*: xrt_future_value_make_##MEMBER##_ptr,
110#define xrt_future_value_make(VALUE) \
112 XRT_FUTURE_VALUE_TYPES_WITH(XRT_FUTURE_VALUE_TYPECASE, _) \
113 default: xrt_future_value_make_none \
Definition: xrt_future_value.h:46
Header holding common defines.
Common defines and enums for XRT.