X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=src%2Flib%2Ftrace-ir%2Ffield.h;h=e56f0d2fc348775cf35f44e7bc17a713b4c2504e;hb=b602018bfbd512fd2f8f41778f6560e9fb607bcb;hp=ce595f9726a100c263c38db2aac6dfb161b1a8e9;hpb=02b61fe03bc4519c74169f997c93a80b16039272;p=babeltrace.git diff --git a/src/lib/trace-ir/field.h b/src/lib/trace-ir/field.h index ce595f97..e56f0d2f 100644 --- a/src/lib/trace-ir/field.h +++ b/src/lib/trace-ir/field.h @@ -61,14 +61,29 @@ #define BT_ASSERT_PRE_DEV_FIELD_IS_ARRAY(_field, _name) \ BT_ASSERT_PRE_DEV( \ ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_STATIC_ARRAY || \ - ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY, \ + ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD || \ + ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD, \ _name " is not an array field: %![field-]+f", (_field)) +#define BT_ASSERT_PRE_DEV_FIELD_IS_DYNAMIC_ARRAY(_field, _name) \ + BT_ASSERT_PRE_DEV( \ + ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD || \ + ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD, \ + _name " is not a dynamic array field: %![field-]+f", (_field)) + +#define BT_ASSERT_PRE_DEV_FIELD_IS_OPTION(_field, _name) \ + BT_ASSERT_PRE_DEV( \ + ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR_FIELD || \ + ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD || \ + ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD || \ + ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR_FIELD, \ + _name " is not an option field: %![field-]+f", (_field)) + #define BT_ASSERT_PRE_DEV_FIELD_IS_VARIANT(_field, _name) \ BT_ASSERT_PRE_DEV( \ - ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR || \ - ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR || \ - ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR, \ + ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR_FIELD || \ + ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD || \ + ((const struct bt_field *) (_field))->class->type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD, \ _name " is not a variant field: %![field-]+f", (_field)) #define BT_ASSERT_PRE_DEV_FIELD_IS_SET(_field, _name) \ @@ -105,6 +120,16 @@ struct bt_field { bool frozen; }; +struct bt_field_bool { + struct bt_field common; + bool value; +}; + +struct bt_field_bit_array { + struct bt_field common; + uint64_t value_as_int; +}; + struct bt_field_integer { struct bt_field common; @@ -126,6 +151,16 @@ struct bt_field_structure { GPtrArray *fields; }; +struct bt_field_option { + struct bt_field common; + + /* Owned by this */ + struct bt_field *content_field; + + /* Weak: equal to `content_field` above or `NULL` */ + struct bt_field *selected_field; +}; + struct bt_field_variant { struct bt_field common; @@ -173,15 +208,15 @@ void _bt_field_set_is_frozen(const struct bt_field *field, bool is_frozen); static inline void _bt_field_reset(const struct bt_field *field) { - BT_ASSERT(field); - BT_ASSERT(field->methods->reset); + BT_ASSERT_DBG(field); + BT_ASSERT_DBG(field->methods->reset); field->methods->reset((void *) field); } static inline void _bt_field_set_single(struct bt_field *field, bool value) { - BT_ASSERT(field); + BT_ASSERT_DBG(field); field->is_set = value; } @@ -194,7 +229,7 @@ bt_bool _bt_field_is_set(const struct bt_field *field) goto end; } - BT_ASSERT(field->methods->is_set); + BT_ASSERT_DBG(field->methods->is_set); is_set = field->methods->is_set(field); end: