+#ifdef BT_DEV_MODE
+# define bt_field_type_freeze _bt_field_type_freeze
+# define bt_field_type_common_freeze _bt_field_type_common_freeze
+#else
+# define bt_field_type_freeze(_ft)
+# define bt_field_type_common_freeze(_ft)
+#endif
+
+typedef struct bt_field_common *(* bt_field_common_create_func)(
+ struct bt_field_type_common *);
+
+BT_HIDDEN
+void bt_field_type_common_initialize(struct bt_field_type_common *ft,
+ bool init_bo, bt_object_release_func release_func,
+ struct bt_field_type_common_methods *methods);
+
+BT_HIDDEN
+void bt_field_type_common_integer_initialize(
+ struct bt_field_type_common *ft,
+ unsigned int size, bt_object_release_func release_func,
+ struct bt_field_type_common_methods *methods);
+
+BT_HIDDEN
+void bt_field_type_common_floating_point_initialize(
+ struct bt_field_type_common *ft,
+ bt_object_release_func release_func,
+ struct bt_field_type_common_methods *methods);
+
+BT_HIDDEN
+void bt_field_type_common_enumeration_initialize(
+ struct bt_field_type_common *ft,
+ struct bt_field_type_common *container_ft,
+ bt_object_release_func release_func,
+ struct bt_field_type_common_methods *methods);
+
+BT_HIDDEN
+void bt_field_type_common_string_initialize(
+ struct bt_field_type_common *ft,
+ bt_object_release_func release_func,
+ struct bt_field_type_common_methods *methods);
+
+BT_HIDDEN
+void bt_field_type_common_structure_initialize(
+ struct bt_field_type_common *ft,
+ bt_object_release_func release_func,
+ struct bt_field_type_common_methods *methods);
+
+BT_HIDDEN
+void bt_field_type_common_array_initialize(
+ struct bt_field_type_common *ft,
+ struct bt_field_type_common *element_ft,
+ unsigned int length, bt_object_release_func release_func,
+ struct bt_field_type_common_methods *methods);
+
+BT_HIDDEN
+void bt_field_type_common_sequence_initialize(
+ struct bt_field_type_common *ft,
+ struct bt_field_type_common *element_ft,
+ const char *length_field_name,
+ bt_object_release_func release_func,
+ struct bt_field_type_common_methods *methods);
+
+BT_HIDDEN
+void bt_field_type_common_variant_initialize(
+ struct bt_field_type_common *ft,
+ struct bt_field_type_common *tag_ft,
+ const char *tag_name,
+ bt_object_release_func release_func,
+ struct bt_field_type_common_methods *methods);
+
+BT_HIDDEN
+void bt_field_type_common_integer_destroy(struct bt_object *obj);
+
+BT_HIDDEN
+void bt_field_type_common_floating_point_destroy(struct bt_object *obj);
+
+BT_HIDDEN
+void bt_field_type_common_enumeration_destroy_recursive(struct bt_object *obj);
+
+BT_HIDDEN
+void bt_field_type_common_string_destroy(struct bt_object *obj);
+
+BT_HIDDEN
+void bt_field_type_common_structure_destroy_recursive(struct bt_object *obj);
+
+BT_HIDDEN
+void bt_field_type_common_array_destroy_recursive(struct bt_object *obj);
+
+BT_HIDDEN
+void bt_field_type_common_sequence_destroy_recursive(struct bt_object *obj);
+
+BT_HIDDEN
+void bt_field_type_common_variant_destroy_recursive(struct bt_object *obj);
+
+BT_HIDDEN
+int bt_field_type_common_integer_validate(struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_enumeration_validate_recursive(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_sequence_validate_recursive(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_array_validate_recursive(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_structure_validate_recursive(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_variant_validate_recursive(
+ struct bt_field_type_common *type);
+
+BT_HIDDEN
+int bt_field_type_common_validate(struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_integer_get_size(struct bt_field_type_common *ft);
+
+BT_HIDDEN
+bt_bool bt_field_type_common_integer_is_signed(struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_integer_set_is_signed(struct bt_field_type_common *ft,
+ bt_bool is_signed);
+
+BT_HIDDEN
+int bt_field_type_common_integer_set_size(struct bt_field_type_common *ft,
+ unsigned int size);
+
+BT_HIDDEN
+enum bt_integer_base bt_field_type_common_integer_get_base(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_integer_set_base(struct bt_field_type_common *ft,
+ enum bt_integer_base base);
+
+BT_HIDDEN
+enum bt_string_encoding bt_field_type_common_integer_get_encoding(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_integer_set_encoding(struct bt_field_type_common *ft,
+ enum bt_string_encoding encoding);
+
+BT_HIDDEN
+struct bt_clock_class *bt_field_type_common_integer_borrow_mapped_clock_class(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_integer_set_mapped_clock_class_no_check_frozen(
+ struct bt_field_type_common *ft,
+ struct bt_clock_class *clock_class);
+
+BT_HIDDEN
+int bt_field_type_common_integer_set_mapped_clock_class(
+ struct bt_field_type_common *ft,
+ struct bt_clock_class *clock_class);
+
+BT_HIDDEN
+struct bt_field_type_enumeration_mapping_iterator *
+bt_field_type_common_enumeration_find_mappings_by_name(
+ struct bt_field_type_common *ft, const char *name);
+
+BT_HIDDEN
+struct bt_field_type_enumeration_mapping_iterator *
+bt_field_type_common_enumeration_signed_find_mappings_by_value(
+ struct bt_field_type_common *ft, int64_t value);
+
+BT_HIDDEN
+struct bt_field_type_enumeration_mapping_iterator *
+bt_field_type_common_enumeration_unsigned_find_mappings_by_value(
+ struct bt_field_type_common *ft, uint64_t value);
+
+BT_HIDDEN
+int bt_field_type_common_enumeration_signed_get_mapping_by_index(
+ struct bt_field_type_common *ft, uint64_t index,
+ const char **mapping_name, int64_t *range_begin,
+ int64_t *range_end);
+
+BT_HIDDEN
+int bt_field_type_common_enumeration_unsigned_get_mapping_by_index(
+ struct bt_field_type_common *ft, uint64_t index,
+ const char **mapping_name, uint64_t *range_begin,
+ uint64_t *range_end);
+
+BT_HIDDEN
+struct bt_field_type_common *
+bt_field_type_common_enumeration_borrow_container_field_type(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_enumeration_signed_add_mapping(
+ struct bt_field_type_common *ft, const char *string,
+ int64_t range_start, int64_t range_end);
+
+BT_HIDDEN
+int bt_field_type_common_enumeration_unsigned_add_mapping(
+ struct bt_field_type_common *ft, const char *string,
+ uint64_t range_start, uint64_t range_end);
+
+BT_HIDDEN
+int64_t bt_field_type_common_enumeration_get_mapping_count(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_floating_point_get_exponent_digits(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_floating_point_set_exponent_digits(
+ struct bt_field_type_common *ft,
+ unsigned int exponent_digits);
+
+BT_HIDDEN
+int bt_field_type_common_floating_point_get_mantissa_digits(
+ struct bt_field_type_common *type);
+
+BT_HIDDEN
+int bt_field_type_common_floating_point_set_mantissa_digits(
+ struct bt_field_type_common *ft, unsigned int mantissa_digits);
+
+BT_HIDDEN
+int bt_field_type_common_structure_replace_field(
+ struct bt_field_type_common *ft,
+ const char *field_name,
+ struct bt_field_type_common *field_type);
+
+BT_HIDDEN
+int bt_field_type_common_structure_add_field(struct bt_field_type_common *ft,
+ struct bt_field_type_common *field_type,
+ const char *field_name);
+
+BT_HIDDEN
+int64_t bt_field_type_common_structure_get_field_count(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_structure_borrow_field_by_index(
+ struct bt_field_type_common *ft,
+ const char **field_name,
+ struct bt_field_type_common **field_type, uint64_t index);
+
+BT_HIDDEN
+struct bt_field_type_common *
+bt_field_type_common_structure_borrow_field_type_by_name(
+ struct bt_field_type_common *ft, const char *name);
+
+BT_HIDDEN
+struct bt_field_type_common *
+bt_field_type_common_variant_borrow_tag_field_type(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+const char *bt_field_type_common_variant_get_tag_name(
+ struct bt_field_type_common *ft);
+
+BT_HIDDEN
+int bt_field_type_common_variant_set_tag_name(
+ struct bt_field_type_common *ft, const char *name);
+