+#define BT_ASSERT_PRE_FIELD_HAS_TYPE_ID(_field, _type_id, _name) \
+ BT_ASSERT_PRE((_field)->type->id == ((int) (_type_id)), \
+ _name " has the wrong type ID: expected-type-id=%s, " \
+ "%![field-]+f", \
+ bt_common_field_type_id_string((int) (_type_id)), (_field))
+
+#define BT_ASSERT_PRE_FIELD_IS_SET(_field, _name) \
+ BT_ASSERT_PRE(bt_field_is_set_recursive(_field), \
+ _name " is not set: %!+f", (_field))
+
+#define BT_ASSERT_PRE_FIELD_HOT(_field, _name) \
+ BT_ASSERT_PRE_HOT((_field), (_name), ": %!+f", (_field))
+
+struct bt_field;
+
+typedef void (*bt_field_method_set_is_frozen)(struct bt_field *,
+ bool);
+typedef int (*bt_field_method_validate)(struct bt_field *);
+typedef bt_bool (*bt_field_method_is_set)(struct bt_field *);
+typedef void (*bt_field_method_reset)(struct bt_field *);
+
+struct bt_field_methods {
+ bt_field_method_set_is_frozen set_is_frozen;
+ bt_field_method_validate validate;
+ bt_field_method_is_set is_set;
+ bt_field_method_reset reset;
+};