Add compile time assertion that array and sequence have integer elements
[lttng-ust.git] / include / lttng / ust-tracer.h
index ec30db7446a52608b6d5b0a9267f3184f33b516f..c04d6247f57e0a3af082bed1ff1799594871ed4b 100644 (file)
  * SOFTWARE.
  */
 
+#include <stdint.h>
+
+#if defined (__cplusplus)
+#include <type_traits>
+#endif
+
+#include <lttng/ust-compiler.h>
 #include <lttng/ust-config.h>
 #include <lttng/ust-version.h>
 
 
 #define lttng_is_signed_type(type)           ((type) -1 < (type) 0)
 
+/*
+ * This macro adds a compilation assertion that CTF arrays and sequences
+ * declared by the users are of an integral type.
+ */
+
+#if defined(__cplusplus)
+#define _lttng_is_integer(type) (std::is_integral<type>::value)
+#else
+#define _lttng_is_integer(type) (__builtin_types_compatible_p(type, _Bool) || \
+               __builtin_types_compatible_p(type, char) || \
+               __builtin_types_compatible_p(type, int8_t) || \
+               __builtin_types_compatible_p(type, uint8_t) || \
+               __builtin_types_compatible_p(type, int16_t) || \
+               __builtin_types_compatible_p(type, uint16_t) || \
+               __builtin_types_compatible_p(type, int32_t) || \
+               __builtin_types_compatible_p(type, uint32_t) || \
+               __builtin_types_compatible_p(type, int64_t) || \
+               __builtin_types_compatible_p(type, uint64_t))
+#endif
+
+#define _lttng_array_element_type_is_supported(_type, _item) \
+               lttng_static_assert(_lttng_is_integer(_type), \
+                       "Non-integer type `" #_item "` not supported as element of CTF_ARRAY or CTF_SEQUENCE", \
+                       Non_integer_type__##_item##__not_supported_as_element_of_CTF_ARRAY_or_CTF_SEQUENCE);
+
 #endif /* _LTTNG_UST_TRACER_H */
This page took 0.023729 seconds and 4 git commands to generate.