X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Flib%2Ftrace-ir%2Ffield-class.c;h=1990a690dc2d367ab0f74a523c0d44cc7839937c;hb=ecd7492f21a492b70569d5ecc1d3a808241b63f0;hp=a282c9bcee4c314abab889a409a0a3df526e8732;hpb=c4f23e30bf67d2523163614bc9461d84cbe1ae80;p=babeltrace.git diff --git a/src/lib/trace-ir/field-class.c b/src/lib/trace-ir/field-class.c index a282c9bc..1990a690 100644 --- a/src/lib/trace-ir/field-class.c +++ b/src/lib/trace-ir/field-class.c @@ -1,33 +1,15 @@ /* + * SPDX-License-Identifier: MIT + * * Copyright 2017-2018 Philippe Proulx * Copyright 2013, 2014 Jérémie Galarneau - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. */ #define BT_LOG_TAG "LIB/FIELD-CLASS" #include "lib/logging.h" -#include "lib/assert-pre.h" +#include "lib/assert-cond.h" #include -#include -#include #include #include #include "lib/object.h" @@ -49,10 +31,11 @@ #include "lib/integer-range-set.h" #include "lib/value.h" +BT_EXPORT enum bt_field_class_type bt_field_class_get_type( const struct bt_field_class *fc) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); return fc->type; } @@ -93,13 +76,15 @@ void destroy_bit_array_field_class(struct bt_object *obj) g_free(obj); } +BT_EXPORT struct bt_field_class *bt_field_class_bit_array_create( struct bt_trace_class *trace_class, uint64_t length) { struct bt_field_class_bit_array *ba_fc = NULL; - BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class"); - BT_ASSERT_PRE(length > 0 && length <= 64, + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_TC_NON_NULL(trace_class); + BT_ASSERT_PRE("valid-length", length > 0 && length <= 64, "Unsupported length for bit array field class " "(minimum is 1, maximum is 64): length=%" PRIu64, length); BT_LOGD("Creating default bit array field class object."); @@ -126,13 +111,14 @@ end: return (void *) ba_fc; } +BT_EXPORT uint64_t bt_field_class_bit_array_get_length(const struct bt_field_class *fc) { const struct bt_field_class_bit_array *ba_fc = (const void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_BIT_ARRAY, - "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, "bit-array", + BT_FIELD_CLASS_TYPE_BIT_ARRAY, "Field class"); return ba_fc->length; } @@ -145,12 +131,14 @@ void destroy_bool_field_class(struct bt_object *obj) g_free(obj); } +BT_EXPORT struct bt_field_class *bt_field_class_bool_create( bt_trace_class *trace_class) { struct bt_field_class_bool *bool_fc = NULL; - BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class"); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_TC_NON_NULL(trace_class); BT_LOGD("Creating default boolean field class object."); bool_fc = g_new0(struct bt_field_class_bool, 1); if (!bool_fc) { @@ -208,7 +196,7 @@ struct bt_field_class *create_integer_field_class(bt_trace_class *trace_class, { struct bt_field_class_integer *int_fc = NULL; - BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class"); + BT_ASSERT_PRE_TC_NON_NULL(trace_class); BT_LOGD("Creating default integer field class object: type=%s", bt_common_field_class_type_string(type)); int_fc = g_new0(struct bt_field_class_integer, 1); @@ -233,50 +221,60 @@ end: return (void *) int_fc; } +BT_EXPORT struct bt_field_class *bt_field_class_integer_unsigned_create( bt_trace_class *trace_class) { + BT_ASSERT_PRE_NO_ERROR(); + return create_integer_field_class(trace_class, BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER); } +BT_EXPORT struct bt_field_class *bt_field_class_integer_signed_create( bt_trace_class *trace_class) { + BT_ASSERT_PRE_NO_ERROR(); + return create_integer_field_class(trace_class, BT_FIELD_CLASS_TYPE_SIGNED_INTEGER); } +BT_EXPORT uint64_t bt_field_class_integer_get_field_value_range( const struct bt_field_class *fc) { const struct bt_field_class_integer *int_fc = (const void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_IS_INT(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_INT("field-class", fc, "Field class"); return int_fc->range; } static -bool size_is_valid_for_enumeration_field_class(struct bt_field_class *fc, - uint64_t size) +bool size_is_valid_for_enumeration_field_class( + struct bt_field_class *fc __attribute__((unused)), + uint64_t size __attribute__((unused))) { // TODO return true; } +BT_EXPORT void bt_field_class_integer_set_field_value_range( struct bt_field_class *fc, uint64_t size) { struct bt_field_class_integer *int_fc = (void *) fc; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_IS_INT(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HOT(fc, "Field class"); - BT_ASSERT_PRE(size <= 64, + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_IS_INT("field-class", fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_HOT(fc); + BT_ASSERT_PRE("valid-n", + size >= 1 && size <= 64, "Unsupported size for integer field class's field value range " - "(maximum is 64): size=%" PRIu64, size); - BT_ASSERT_PRE( + "(minimum is 1, maximum is 64): size=%" PRIu64, size); + BT_ASSERT_PRE("valid-n-for-enumeration-field-class", int_fc->common.type == BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER || int_fc->common.type == BT_FIELD_CLASS_TYPE_SIGNED_INTEGER || size_is_valid_for_enumeration_field_class(fc, size), @@ -287,25 +285,27 @@ void bt_field_class_integer_set_field_value_range( BT_LIB_LOGD("Set integer field class's field value range: %!+F", fc); } +BT_EXPORT enum bt_field_class_integer_preferred_display_base bt_field_class_integer_get_preferred_display_base(const struct bt_field_class *fc) { const struct bt_field_class_integer *int_fc = (const void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_IS_INT(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_INT("field-class", fc, "Field class"); return int_fc->base; } +BT_EXPORT void bt_field_class_integer_set_preferred_display_base( struct bt_field_class *fc, enum bt_field_class_integer_preferred_display_base base) { struct bt_field_class_integer *int_fc = (void *) fc; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_IS_INT(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HOT(fc, "Field class"); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_IS_INT("field-class", fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_HOT(fc); int_fc->base = base; BT_LIB_LOGD("Set integer field class's preferred display base: %!+F", fc); } @@ -359,7 +359,7 @@ struct bt_field_class *create_enumeration_field_class( { struct bt_field_class_enumeration *enum_fc = NULL; - BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class"); + BT_ASSERT_PRE_TC_NON_NULL(trace_class); BT_LOGD("Creating default enumeration field class object: type=%s", bt_common_field_class_type_string(type)); enum_fc = g_new0(struct bt_field_class_enumeration, 1); @@ -397,66 +397,77 @@ end: return (void *) enum_fc; } +BT_EXPORT struct bt_field_class *bt_field_class_enumeration_unsigned_create( bt_trace_class *trace_class) { + BT_ASSERT_PRE_NO_ERROR(); + return create_enumeration_field_class(trace_class, BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION); } +BT_EXPORT struct bt_field_class *bt_field_class_enumeration_signed_create( bt_trace_class *trace_class) { + BT_ASSERT_PRE_NO_ERROR(); + return create_enumeration_field_class(trace_class, BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION); } +BT_EXPORT uint64_t bt_field_class_enumeration_get_mapping_count( const struct bt_field_class *fc) { const struct bt_field_class_enumeration *enum_fc = (const void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_IS_ENUM(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_ENUM("field-class", fc, "Field class"); return (uint64_t) enum_fc->mappings->len; } +BT_EXPORT const struct bt_field_class_enumeration_unsigned_mapping * bt_field_class_enumeration_unsigned_borrow_mapping_by_index_const( const struct bt_field_class *fc, uint64_t index) { const struct bt_field_class_enumeration *enum_fc = (const void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); BT_ASSERT_PRE_DEV_VALID_INDEX(index, enum_fc->mappings->len); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION, - "Field class"); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, "unsigned-enumeration", + BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION, "Field class"); return (const void *) BT_FIELD_CLASS_ENUM_MAPPING_AT_INDEX(fc, index); } +BT_EXPORT const struct bt_field_class_enumeration_signed_mapping * bt_field_class_enumeration_signed_borrow_mapping_by_index_const( const struct bt_field_class *fc, uint64_t index) { const struct bt_field_class_enumeration *enum_fc = (const void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); BT_ASSERT_PRE_DEV_VALID_INDEX(index, enum_fc->mappings->len); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION, - "Field class"); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, "signed-enumeration", + BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION, "Field class"); return (const void *) BT_FIELD_CLASS_ENUM_MAPPING_AT_INDEX(fc, index); } static const struct bt_field_class_enumeration_mapping * borrow_enumeration_field_class_mapping_by_label( - const struct bt_field_class_enumeration *fc, const char *label) + const struct bt_field_class_enumeration *fc, const char *label, + const char *api_func) { struct bt_field_class_enumeration_mapping *mapping = NULL; uint64_t i; BT_ASSERT_DBG(fc); - BT_ASSERT_PRE_DEV_NON_NULL(label, "Label"); + BT_ASSERT_PRE_DEV_NON_NULL_FROM_FUNC(api_func, "label", label, + "Label"); for (i = 0; i < fc->mappings->len; i++) { struct bt_field_class_enumeration_mapping *this_mapping = @@ -472,35 +483,40 @@ end: return mapping; } +BT_EXPORT const struct bt_field_class_enumeration_signed_mapping * bt_field_class_enumeration_signed_borrow_mapping_by_label_const( const struct bt_field_class *fc, const char *label) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION, - "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, "signed-enumeration", + BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION, "Field class"); return (const void *) borrow_enumeration_field_class_mapping_by_label( - (const void *) fc, label); + (const void *) fc, label, __func__); } +BT_EXPORT const struct bt_field_class_enumeration_unsigned_mapping * bt_field_class_enumeration_unsigned_borrow_mapping_by_label_const( const struct bt_field_class *fc, const char *label) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, "unsigned-enumeration", BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION, "Field class"); return (const void *) borrow_enumeration_field_class_mapping_by_label( - (const void *) fc, label); + (const void *) fc, label, __func__); } +BT_EXPORT const char *bt_field_class_enumeration_mapping_get_label( const struct bt_field_class_enumeration_mapping *mapping) { - BT_ASSERT_PRE_DEV_NON_NULL(mapping, "Enumeration field class mapping"); + BT_ASSERT_PRE_DEV_NON_NULL("enumeration-field-class-mapping", + mapping, "Enumeration field class mapping"); return mapping->label->str; } +BT_EXPORT const struct bt_integer_range_set_unsigned * bt_field_class_enumeration_unsigned_mapping_borrow_ranges_const( const struct bt_field_class_enumeration_unsigned_mapping *u_mapping) @@ -508,10 +524,12 @@ bt_field_class_enumeration_unsigned_mapping_borrow_ranges_const( const struct bt_field_class_enumeration_mapping *mapping = (const void *) u_mapping; - BT_ASSERT_PRE_DEV_NON_NULL(mapping, "Enumeration field class mapping"); + BT_ASSERT_PRE_DEV_NON_NULL("enumeration-field-class-mapping", + mapping, "Enumeration field class mapping"); return (const void *) mapping->range_set; } +BT_EXPORT const struct bt_integer_range_set_signed * bt_field_class_enumeration_signed_mapping_borrow_ranges_const( const struct bt_field_class_enumeration_signed_mapping *s_mapping) @@ -519,10 +537,12 @@ bt_field_class_enumeration_signed_mapping_borrow_ranges_const( const struct bt_field_class_enumeration_mapping *mapping = (const void *) s_mapping; - BT_ASSERT_PRE_DEV_NON_NULL(mapping, "Enumeration field class mapping"); + BT_ASSERT_PRE_DEV_NON_NULL("enumeration-field-class-mapping", + mapping, "Enumeration field class mapping"); return (const void *) mapping->range_set; } +BT_EXPORT enum bt_field_class_enumeration_get_mapping_labels_for_value_status bt_field_class_enumeration_unsigned_get_mapping_labels_for_value( const struct bt_field_class *fc, uint64_t value, @@ -532,11 +552,13 @@ bt_field_class_enumeration_unsigned_get_mapping_labels_for_value( const struct bt_field_class_enumeration *enum_fc = (const void *) fc; uint64_t i; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_NON_NULL(label_array, "Label array (output)"); - BT_ASSERT_PRE_DEV_NON_NULL(count, "Count (output)"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION, - "Field class"); + BT_ASSERT_PRE_DEV_NO_ERROR(); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_NON_NULL("label-array-output", label_array, + "Label array (output)"); + BT_ASSERT_PRE_DEV_NON_NULL("count-output", count, "Count (output)"); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, "unsigned-enumeration", + BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION, "Field class"); g_ptr_array_set_size(enum_fc->label_buf, 0); for (i = 0; i < enum_fc->mappings->len; i++) { @@ -563,6 +585,7 @@ bt_field_class_enumeration_unsigned_get_mapping_labels_for_value( return BT_FUNC_STATUS_OK; } +BT_EXPORT enum bt_field_class_enumeration_get_mapping_labels_for_value_status bt_field_class_enumeration_signed_get_mapping_labels_for_value( const struct bt_field_class *fc, int64_t value, @@ -572,11 +595,13 @@ bt_field_class_enumeration_signed_get_mapping_labels_for_value( const struct bt_field_class_enumeration *enum_fc = (const void *) fc; uint64_t i; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_NON_NULL(label_array, "Label array (output)"); - BT_ASSERT_PRE_DEV_NON_NULL(count, "Count (output)"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION, - "Field class"); + BT_ASSERT_PRE_DEV_NO_ERROR(); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_NON_NULL("label-array-output", label_array, + "Label array (output)"); + BT_ASSERT_PRE_DEV_NON_NULL("count-output", count, "Count (output)"); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, "signed-enumeration", + BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION, "Field class"); g_ptr_array_set_size(enum_fc->label_buf, 0); for (i = 0; i < enum_fc->mappings->len; i++) { @@ -631,18 +656,22 @@ end: static inline enum bt_field_class_enumeration_add_mapping_status add_mapping_to_enumeration_field_class(struct bt_field_class *fc, - const char *label, const struct bt_integer_range_set *range_set) + const char *label, const struct bt_integer_range_set *range_set, + const char *api_func) { enum bt_field_class_enumeration_add_mapping_status status = BT_FUNC_STATUS_OK; struct bt_field_class_enumeration *enum_fc = (void *) fc; struct bt_field_class_enumeration_mapping mapping = { 0 }; + BT_ASSERT_PRE_NO_ERROR_FROM_FUNC(api_func); BT_ASSERT(fc); - BT_ASSERT_PRE_NON_NULL(label, "Label"); - BT_ASSERT_PRE_NON_NULL(range_set, "Integer range set"); - BT_ASSERT_PRE(!enumeration_field_class_has_mapping_with_label( - enum_fc, label), + BT_ASSERT_PRE_NON_NULL_FROM_FUNC(api_func, "label", label, "Label"); + BT_ASSERT_PRE_INT_RANGE_SET_NON_NULL_FROM_FUNC(api_func, range_set); + BT_ASSERT_PRE_FROM_FUNC(api_func, + "enumeration-field-class-mapping-label-is-unique", + !enumeration_field_class_has_mapping_with_label( + enum_fc, label), "Duplicate mapping name in enumeration field class: " "%![enum-fc-]+F, label=\"%s\"", fc, label); mapping.range_set = range_set; @@ -662,28 +691,34 @@ end: return status; } +BT_EXPORT enum bt_field_class_enumeration_add_mapping_status bt_field_class_enumeration_unsigned_add_mapping( struct bt_field_class *fc, const char *label, const struct bt_integer_range_set_unsigned *range_set) { - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION, - "Field class"); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_HAS_TYPE("field-class", fc, + "unsigned-enumeration-field-class", + BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION, "Field class"); return add_mapping_to_enumeration_field_class(fc, label, - (const void *) range_set); + (const void *) range_set, __func__); } +BT_EXPORT enum bt_field_class_enumeration_add_mapping_status bt_field_class_enumeration_signed_add_mapping( struct bt_field_class *fc, const char *label, const struct bt_integer_range_set_signed *range_set) { - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION, - "Field class"); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_HAS_TYPE("field-class", fc, + "signed-enumeration-field-class", + BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION, "Field class"); return add_mapping_to_enumeration_field_class(fc, label, - (const void *) range_set); + (const void *) range_set, __func__); } static @@ -701,7 +736,7 @@ struct bt_field_class *create_real_field_class(bt_trace_class *trace_class, { struct bt_field_class_real *real_fc = NULL; - BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class"); + BT_ASSERT_PRE_TC_NON_NULL(trace_class); BT_LOGD("Creating default real field class object: type=%s", bt_common_field_class_type_string(type)); real_fc = g_new0(struct bt_field_class_real, 1); @@ -724,16 +759,22 @@ end: return (void *) real_fc; } +BT_EXPORT struct bt_field_class *bt_field_class_real_single_precision_create( bt_trace_class *trace_class) { + BT_ASSERT_PRE_NO_ERROR(); + return create_real_field_class(trace_class, BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL); } +BT_EXPORT struct bt_field_class *bt_field_class_real_double_precision_create( bt_trace_class *trace_class) { + BT_ASSERT_PRE_NO_ERROR(); + return create_real_field_class(trace_class, BT_FIELD_CLASS_TYPE_DOUBLE_PRECISION_REAL); } @@ -841,13 +882,15 @@ void destroy_structure_field_class(struct bt_object *obj) g_free(obj); } +BT_EXPORT struct bt_field_class *bt_field_class_structure_create( bt_trace_class *trace_class) { int ret; struct bt_field_class_structure *struct_fc = NULL; - BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class"); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_TC_NON_NULL(trace_class); BT_LOGD_STR("Creating default structure field class object."); struct_fc = g_new0(struct bt_field_class_structure, 1); if (!struct_fc) { @@ -970,13 +1013,15 @@ end: static int append_named_field_class_to_container_field_class( struct bt_field_class_named_field_class_container *container_fc, - struct bt_named_field_class *named_fc) + struct bt_named_field_class *named_fc, const char *api_func, + const char *unique_entry_precond_id) { BT_ASSERT(container_fc); BT_ASSERT(named_fc); - BT_ASSERT_PRE_DEV_FC_HOT(container_fc, "Field class"); - BT_ASSERT_PRE(!bt_g_hash_table_contains(container_fc->name_to_index, - named_fc->name->str), + BT_ASSERT_PRE_DEV_FC_HOT_FROM_FUNC(api_func, container_fc); + BT_ASSERT_PRE_FROM_FUNC(api_func, unique_entry_precond_id, + !bt_g_hash_table_contains(container_fc->name_to_index, + named_fc->name->str), "Duplicate member/option name in structure/variant field class: " "%![container-fc-]+F, name=\"%s\"", container_fc, named_fc->name->str); @@ -993,6 +1038,7 @@ int append_named_field_class_to_container_field_class( return BT_FUNC_STATUS_OK; } +BT_EXPORT enum bt_field_class_structure_append_member_status bt_field_class_structure_append_member( struct bt_field_class *fc, const char *name, @@ -1001,9 +1047,9 @@ bt_field_class_structure_append_member( enum bt_field_class_structure_append_member_status status; struct bt_named_field_class *named_fc = NULL; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STRUCTURE, - "Field class"); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_IS_STRUCT("field-class", fc, "Field class"); named_fc = create_named_field_class(name, member_fc); if (!named_fc) { /* create_named_field_class() logs errors */ @@ -1012,7 +1058,8 @@ bt_field_class_structure_append_member( } status = append_named_field_class_to_container_field_class((void *) fc, - named_fc); + named_fc, __func__, + "structure-field-class-member-name-is-unique"); if (status == BT_FUNC_STATUS_OK) { /* Moved to the container */ named_fc = NULL; @@ -1022,14 +1069,14 @@ end: return status; } +BT_EXPORT uint64_t bt_field_class_structure_get_member_count( const struct bt_field_class *fc) { struct bt_field_class_structure *struct_fc = (void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STRUCTURE, - "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_STRUCT("field-class", fc, "Field class"); return (uint64_t) struct_fc->common.named_fcs->len; } @@ -1037,49 +1084,50 @@ static struct bt_named_field_class * borrow_named_field_class_from_container_field_class_at_index( struct bt_field_class_named_field_class_container *fc, - uint64_t index) + uint64_t index, const char *api_func) { BT_ASSERT_DBG(fc); - BT_ASSERT_PRE_DEV_VALID_INDEX(index, fc->named_fcs->len); + BT_ASSERT_PRE_DEV_VALID_INDEX_FROM_FUNC(api_func, index, + fc->named_fcs->len); return fc->named_fcs->pdata[index]; } +BT_EXPORT const struct bt_field_class_structure_member * bt_field_class_structure_borrow_member_by_index_const( const struct bt_field_class *fc, uint64_t index) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STRUCTURE, - "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_STRUCT("field-class", fc, "Field class"); return (const void *) borrow_named_field_class_from_container_field_class_at_index( - (void *) fc, index); + (void *) fc, index, __func__); } +BT_EXPORT struct bt_field_class_structure_member * bt_field_class_structure_borrow_member_by_index( struct bt_field_class *fc, uint64_t index) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STRUCTURE, - "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_STRUCT("field-class", fc, "Field class"); return (void *) borrow_named_field_class_from_container_field_class_at_index( - (void *) fc, index); + (void *) fc, index, __func__); } static struct bt_named_field_class * borrow_named_field_class_from_container_field_class_by_name( struct bt_field_class_named_field_class_container *fc, - const char *name) + const char *name, const char *api_func) { struct bt_named_field_class *named_fc = NULL; gpointer orig_key; gpointer value; BT_ASSERT_DBG(fc); - BT_ASSERT_PRE_DEV_NON_NULL(name, "Name"); + BT_ASSERT_PRE_DEV_NAME_NON_NULL_FROM_FUNC(api_func, name); if (!g_hash_table_lookup_extended(fc->name_to_index, name, &orig_key, &value)) { goto end; @@ -1091,56 +1139,59 @@ end: return named_fc; } +BT_EXPORT const struct bt_field_class_structure_member * bt_field_class_structure_borrow_member_by_name_const( const struct bt_field_class *fc, const char *name) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STRUCTURE, - "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_STRUCT("field-class", fc, "Field class"); return (const void *) borrow_named_field_class_from_container_field_class_by_name( - (void *) fc, name); + (void *) fc, name, __func__); } +BT_EXPORT struct bt_field_class_structure_member * bt_field_class_structure_borrow_member_by_name( struct bt_field_class *fc, const char *name) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STRUCTURE, - "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_STRUCT("field-class", fc, "Field class"); return (void *) borrow_named_field_class_from_container_field_class_by_name( - (void *) fc, name); + (void *) fc, name, __func__); } +BT_EXPORT const char *bt_field_class_structure_member_get_name( const struct bt_field_class_structure_member *member) { const struct bt_named_field_class *named_fc = (const void *) member; - BT_ASSERT_PRE_DEV_NON_NULL(member, "Structure field class member"); + BT_ASSERT_PRE_DEV_STRUCT_FC_MEMBER_NON_NULL(member); return named_fc->name->str; } +BT_EXPORT const struct bt_field_class * bt_field_class_structure_member_borrow_field_class_const( const struct bt_field_class_structure_member *member) { const struct bt_named_field_class *named_fc = (const void *) member; - BT_ASSERT_PRE_DEV_NON_NULL(member, "Structure field class member"); + BT_ASSERT_PRE_DEV_STRUCT_FC_MEMBER_NON_NULL(member); return named_fc->fc; } +BT_EXPORT struct bt_field_class * bt_field_class_structure_member_borrow_field_class( struct bt_field_class_structure_member *member) { struct bt_named_field_class *named_fc = (void *) member; - BT_ASSERT_PRE_DEV_NON_NULL(member, "Structure field class member"); + BT_ASSERT_PRE_DEV_STRUCT_FC_MEMBER_NON_NULL(member); return named_fc->fc; } @@ -1181,12 +1232,15 @@ struct bt_field_class *create_option_field_class( struct bt_trace_class *trace_class, enum bt_field_class_type fc_type, struct bt_field_class *content_fc, - struct bt_field_class *selector_fc) + struct bt_field_class *selector_fc, + const char *api_func) { struct bt_field_class_option *opt_fc = NULL; - BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class"); - BT_ASSERT_PRE_NON_NULL(content_fc, "Content field class"); + BT_ASSERT_PRE_NO_ERROR_FROM_FUNC(api_func); + BT_ASSERT_PRE_TC_NON_NULL_FROM_FUNC(api_func, trace_class); + BT_ASSERT_PRE_NON_NULL_FROM_FUNC(api_func, "content-field-class", + content_fc, "Content field class"); BT_LIB_LOGD("Creating option field class: " "type=%s, %![content-fc-]+F, %![sel-fc-]+F", bt_common_field_class_type_string(fc_type), @@ -1195,17 +1249,21 @@ struct bt_field_class *create_option_field_class( if (fc_type != BT_FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR_FIELD) { struct bt_field_class_option_with_selector_field *opt_with_sel_fc = NULL; - BT_ASSERT_PRE_NON_NULL(selector_fc, "Selector field class"); + BT_ASSERT_PRE_NON_NULL_FROM_FUNC(api_func, + "selector-field-class", selector_fc, + "Selector field class"); if (fc_type == BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD) { - BT_ASSERT_PRE_FC_HAS_ID(selector_fc, - BT_FIELD_CLASS_TYPE_BOOL, + BT_ASSERT_PRE_FC_HAS_TYPE_FROM_FUNC(api_func, + "selector-field-class", selector_fc, + "boolean-field-class", BT_FIELD_CLASS_TYPE_BOOL, "Selector field class"); opt_with_sel_fc = (void *) g_new0( struct bt_field_class_option_with_selector_field_bool, 1); } else { - BT_ASSERT_PRE_FC_IS_INT(selector_fc, - "Selector field class"); + BT_ASSERT_PRE_FC_IS_INT_FROM_FUNC(api_func, + "selector-field-class", + selector_fc, "Selector field class"); opt_with_sel_fc = (void *) g_new0( struct bt_field_class_option_with_selector_field_integer, 1); } @@ -1254,33 +1312,30 @@ end: return (void *) opt_fc; } +BT_EXPORT struct bt_field_class *bt_field_class_option_without_selector_create( struct bt_trace_class *trace_class, struct bt_field_class *content_fc) { return create_option_field_class(trace_class, BT_FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR_FIELD, - content_fc, NULL); + content_fc, NULL, __func__); } +BT_EXPORT struct bt_field_class *bt_field_class_option_with_selector_field_bool_create( struct bt_trace_class *trace_class, struct bt_field_class *content_fc, struct bt_field_class *selector_fc) { - struct bt_field_class_option_with_selector_field_bool *fc = - (void *) create_option_field_class(trace_class, - BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD, - content_fc, selector_fc); - - if (!fc) { - goto end; - } + BT_ASSERT_PRE_NO_ERROR(); -end: - return (void *) fc; + return create_option_field_class(trace_class, + BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD, + content_fc, selector_fc, __func__); } +BT_EXPORT struct bt_field_class * bt_field_class_option_with_selector_field_integer_unsigned_create( struct bt_trace_class *trace_class, @@ -1292,12 +1347,12 @@ bt_field_class_option_with_selector_field_integer_unsigned_create( const struct bt_integer_range_set *range_set = (const void *) u_range_set; - BT_ASSERT_PRE_NON_NULL(range_set, "Integer range set"); - BT_ASSERT_PRE(range_set->ranges->len > 0, - "Integer range set is empty: %!+R", range_set); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_INT_RANGE_SET_NON_NULL(range_set); + BT_ASSERT_PRE_INT_RANGE_SET_NOT_EMPTY(range_set); fc = (void *) create_option_field_class(trace_class, BT_FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD, - content_fc, selector_fc); + content_fc, selector_fc, __func__); if (!fc) { goto end; @@ -1311,6 +1366,7 @@ end: return (void *) fc; } +BT_EXPORT struct bt_field_class * bt_field_class_option_with_selector_field_integer_signed_create( struct bt_trace_class *trace_class, @@ -1322,12 +1378,12 @@ bt_field_class_option_with_selector_field_integer_signed_create( const struct bt_integer_range_set *range_set = (const void *) i_range_set; - BT_ASSERT_PRE_NON_NULL(range_set, "Integer range set"); - BT_ASSERT_PRE(range_set->ranges->len > 0, - "Integer range set is empty: %!+R", range_set); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_INT_RANGE_SET_NON_NULL(range_set); + BT_ASSERT_PRE_INT_RANGE_SET_NOT_EMPTY(range_set); fc = (void *) create_option_field_class(trace_class, BT_FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR_FIELD, - content_fc, selector_fc); + content_fc, selector_fc, __func__); if (!fc) { goto end; @@ -1341,26 +1397,29 @@ end: return (void *) fc; } +BT_EXPORT const struct bt_field_class *bt_field_class_option_borrow_field_class_const( const struct bt_field_class *fc) { struct bt_field_class_option *opt_fc = (void *) fc; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_IS_OPTION(fc, "Field class"); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_IS_OPTION("field-class", fc, "Field class"); return opt_fc->content_fc; } +BT_EXPORT struct bt_field_class *bt_field_class_option_borrow_field_class( struct bt_field_class *fc) { struct bt_field_class_option *opt_fc = (void *) fc; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_IS_OPTION(fc, "Field class"); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_IS_OPTION("field-class", fc, "Field class"); return opt_fc->content_fc; } +BT_EXPORT const struct bt_field_path * bt_field_class_option_with_selector_field_borrow_selector_field_path_const( const struct bt_field_class *fc) @@ -1368,34 +1427,41 @@ bt_field_class_option_with_selector_field_borrow_selector_field_path_const( const struct bt_field_class_option_with_selector_field *opt_fc = (const void *) fc; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_IS_OPTION_WITH_SEL(fc, "Field class"); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_IS_OPTION_WITH_SEL("field-class", fc, "Field class"); return opt_fc->selector_field_path; } +BT_EXPORT void bt_field_class_option_with_selector_field_bool_set_selector_is_reversed( struct bt_field_class *fc, bt_bool sel_is_reversed) { struct bt_field_class_option_with_selector_field_bool *opt_fc = (void *) fc; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_HAS_ID(fc, - BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD, "Field class"); - BT_ASSERT_PRE_DEV_FC_HOT(fc, "Field class"); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_HAS_TYPE("field-class", fc, + "option-field-class-with-boolean-selector-field", + BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD, + "Field class"); + BT_ASSERT_PRE_DEV_FC_HOT(fc); opt_fc->sel_is_reversed = sel_is_reversed; } +BT_EXPORT bt_bool bt_field_class_option_with_selector_field_bool_selector_is_reversed( const struct bt_field_class *fc) { struct bt_field_class_option_with_selector_field_bool *opt_fc = (void *) fc; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_HAS_ID(fc, - BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD, "Field class"); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_HAS_TYPE("field-class", fc, + "option-field-class-with-boolean-selector-field", + BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD, + "Field class"); return opt_fc->sel_is_reversed; } +BT_EXPORT const struct bt_integer_range_set_unsigned * bt_field_class_option_with_selector_field_integer_unsigned_borrow_selector_ranges_const( const struct bt_field_class *fc) @@ -1403,11 +1469,13 @@ bt_field_class_option_with_selector_field_integer_unsigned_borrow_selector_range struct bt_field_class_option_with_selector_field_integer *opt_fc = (void *) fc; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_IS_OPTION_WITH_INT_SEL(fc, "Field class"); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_IS_OPTION_WITH_INT_SEL("field-class", fc, + "Field class"); return (const void *) opt_fc->range_set; } +BT_EXPORT const struct bt_integer_range_set_signed * bt_field_class_option_with_selector_field_integer_signed_borrow_selector_ranges_const( const struct bt_field_class *fc) @@ -1415,8 +1483,9 @@ bt_field_class_option_with_selector_field_integer_signed_borrow_selector_ranges_ struct bt_field_class_option_with_selector_field_integer *opt_fc = (void *) fc; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_FC_IS_OPTION_WITH_INT_SEL(fc, "Field class"); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_IS_OPTION_WITH_INT_SEL("field-class", fc, + "Field class"); return (const void *) opt_fc->range_set; } @@ -1453,6 +1522,7 @@ void destroy_variant_with_selector_field_field_class(struct bt_object *obj) g_free(fc); } +BT_EXPORT struct bt_field_class *bt_field_class_variant_create( bt_trace_class *trace_class, bt_field_class *selector_fc) { @@ -1461,10 +1531,12 @@ struct bt_field_class *bt_field_class_variant_create( struct bt_field_class_variant_with_selector_field *var_with_sel_fc = NULL; enum bt_field_class_type fc_type; - BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class"); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_TC_NON_NULL(trace_class); if (selector_fc) { - BT_ASSERT_PRE_FC_IS_INT(selector_fc, "Selector field class"); + BT_ASSERT_PRE_FC_IS_INT("selector-field-class", selector_fc, + "Selector field class"); } BT_LIB_LOGD("Creating default variant field class: %![sel-fc-]+F", @@ -1531,6 +1603,10 @@ end: return (void *) var_fc; } +#define VAR_FC_OPT_NAME_IS_UNIQUE_ID \ + "variant-field-class-option-name-is-unique" + +BT_EXPORT enum bt_field_class_variant_without_selector_append_option_status bt_field_class_variant_without_selector_append_option(struct bt_field_class *fc, const char *name, struct bt_field_class *option_fc) @@ -1538,11 +1614,15 @@ bt_field_class_variant_without_selector_append_option(struct bt_field_class *fc, enum bt_field_class_variant_without_selector_append_option_status status; struct bt_named_field_class *named_fc = NULL; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_NON_NULL(name, "Name"); - BT_ASSERT_PRE_NON_NULL(option_fc, "Option field class"); - BT_ASSERT_PRE_FC_HAS_ID(fc, - BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR_FIELD, "Field class"); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_NAME_NON_NULL(name); + BT_ASSERT_PRE_NON_NULL("option-field-class", option_fc, + "Option field class"); + BT_ASSERT_PRE_FC_HAS_TYPE("field-class", fc, + "variant-field-class-without-selector-field", + BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR_FIELD, + "Field class"); named_fc = create_named_field_class(name, option_fc); if (!named_fc) { /* create_named_field_class() logs errors */ @@ -1551,7 +1631,7 @@ bt_field_class_variant_without_selector_append_option(struct bt_field_class *fc, } status = append_named_field_class_to_container_field_class((void *) fc, - named_fc); + named_fc, __func__, VAR_FC_OPT_NAME_IS_UNIQUE_ID); if (status == BT_FUNC_STATUS_OK) { /* Moved to the container */ named_fc = NULL; @@ -1655,20 +1735,20 @@ int append_option_to_variant_with_selector_field_field_class( struct bt_field_class *fc, const char *name, struct bt_field_class *option_fc, const struct bt_integer_range_set *range_set, - enum bt_field_class_type expected_type) + enum bt_field_class_type expected_type, + const char *api_func) { int status; struct bt_field_class_variant_with_selector_field *var_fc = (void *) fc; struct bt_field_class_variant_with_selector_field_option *opt = NULL; bool has_overlap; - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_NON_NULL(name, "Name"); - BT_ASSERT_PRE_NON_NULL(option_fc, "Option field class"); - BT_ASSERT_PRE_NON_NULL(range_set, "Integer range set"); - BT_ASSERT_PRE_FC_HAS_ID(fc, expected_type, "Field class"); - BT_ASSERT_PRE(range_set->ranges->len > 0, - "Integer range set is empty: %!+R", range_set); + BT_ASSERT(fc); + BT_ASSERT_PRE_NAME_NON_NULL_FROM_FUNC(api_func, name); + BT_ASSERT_PRE_NON_NULL_FROM_FUNC(api_func, "option-field-class", + option_fc, "Option field class"); + BT_ASSERT_PRE_INT_RANGE_SET_NON_NULL_FROM_FUNC(api_func, range_set); + BT_ASSERT_PRE_INT_RANGE_SET_NOT_EMPTY_FROM_FUNC(api_func, range_set); status = ranges_overlap(var_fc->common.common.named_fcs, range_set, expected_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD, &has_overlap); @@ -1677,7 +1757,8 @@ int append_option_to_variant_with_selector_field_field_class( goto end; } - BT_ASSERT_PRE(!has_overlap, + BT_ASSERT_PRE_FROM_FUNC(api_func, "ranges-do-not-overlap", + !has_overlap, "Integer range set's ranges and existing ranges have an overlap: " "%!+R", range_set); opt = create_variant_with_selector_field_option(name, option_fc, range_set); @@ -1688,7 +1769,7 @@ int append_option_to_variant_with_selector_field_field_class( } status = append_named_field_class_to_container_field_class((void *) fc, - &opt->common); + &opt->common, __func__, VAR_FC_OPT_NAME_IS_UNIQUE_ID); if (status == BT_FUNC_STATUS_OK) { /* Moved to the container */ opt = NULL; @@ -1702,162 +1783,195 @@ end: return status; } +BT_EXPORT enum bt_field_class_variant_with_selector_field_integer_append_option_status bt_field_class_variant_with_selector_field_integer_unsigned_append_option( struct bt_field_class *fc, const char *name, struct bt_field_class *option_fc, const struct bt_integer_range_set_unsigned *range_set) { + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_HAS_TYPE("field-class", fc, + "variant-field-class-with-unsigned-integer-selector-field", + BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD, + "Field class"); return append_option_to_variant_with_selector_field_field_class(fc, name, option_fc, (const void *) range_set, - BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD); + BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD, + __func__); } +BT_EXPORT enum bt_field_class_variant_with_selector_field_integer_append_option_status bt_field_class_variant_with_selector_field_integer_signed_append_option( struct bt_field_class *fc, const char *name, struct bt_field_class *option_fc, const struct bt_integer_range_set_signed *range_set) { + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_HAS_TYPE("field-class", fc, + "variant-field-class-with-signed-integer-selector-field", + BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD, + "Field class"); return append_option_to_variant_with_selector_field_field_class(fc, name, option_fc, (const void *) range_set, - BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD); + BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD, + __func__); } +BT_EXPORT uint64_t bt_field_class_variant_get_option_count(const struct bt_field_class *fc) { const struct bt_field_class_variant *var_fc = (const void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_IS_VARIANT(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_VARIANT("field-class", fc, "Field class"); return (uint64_t) var_fc->common.named_fcs->len; } +BT_EXPORT const struct bt_field_class_variant_option * bt_field_class_variant_borrow_option_by_name_const( const struct bt_field_class *fc, const char *name) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_IS_VARIANT(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_VARIANT("field-class", fc, "Field class"); return (const void *) borrow_named_field_class_from_container_field_class_by_name( - (void *) fc, name); + (void *) fc, name, __func__); } +BT_EXPORT const struct bt_field_class_variant_option * bt_field_class_variant_borrow_option_by_index_const( const struct bt_field_class *fc, uint64_t index) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_IS_VARIANT(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_VARIANT("field-class", fc, "Field class"); return (const void *) borrow_named_field_class_from_container_field_class_at_index( - (void *) fc, index); + (void *) fc, index, __func__); } +BT_EXPORT struct bt_field_class_variant_option * bt_field_class_variant_borrow_option_by_name( struct bt_field_class *fc, const char *name) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_IS_VARIANT(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_VARIANT("field-class", fc, "Field class"); return (void *) borrow_named_field_class_from_container_field_class_by_name( - (void *) fc, name); + (void *) fc, name, __func__); } +BT_EXPORT struct bt_field_class_variant_option * bt_field_class_variant_borrow_option_by_index( struct bt_field_class *fc, uint64_t index) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_IS_VARIANT(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_VARIANT("field-class", fc, "Field class"); return (void *) borrow_named_field_class_from_container_field_class_at_index( - (void *) fc, index); + (void *) fc, index, __func__); } +BT_EXPORT const struct bt_field_class_variant_with_selector_field_integer_unsigned_option * bt_field_class_variant_with_selector_field_integer_unsigned_borrow_option_by_name_const( const struct bt_field_class *fc, const char *name) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, + "variant-field-class-with-unsigned-integer-selector-field", BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD, "Field class"); return (const void *) borrow_named_field_class_from_container_field_class_by_name( - (void *) fc, name); + (void *) fc, name, __func__); } +BT_EXPORT const struct bt_field_class_variant_with_selector_field_integer_unsigned_option * bt_field_class_variant_with_selector_field_integer_unsigned_borrow_option_by_index_const( const struct bt_field_class *fc, uint64_t index) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, + "variant-field-class-with-unsigned-integer-selector-field", BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD, "Field class"); return (const void *) borrow_named_field_class_from_container_field_class_at_index( - (void *) fc, index); + (void *) fc, index, __func__); } +BT_EXPORT const struct bt_field_class_variant_with_selector_field_integer_signed_option * bt_field_class_variant_with_selector_field_integer_signed_borrow_option_by_name_const( const struct bt_field_class *fc, const char *name) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, + "variant-field-class-with-signed-integer-selector-field", BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD, "Field class"); return (const void *) borrow_named_field_class_from_container_field_class_by_name( - (void *) fc, name); + (void *) fc, name, __func__); } +BT_EXPORT const struct bt_field_class_variant_with_selector_field_integer_signed_option * bt_field_class_variant_with_selector_field_integer_signed_borrow_option_by_index_const( const struct bt_field_class *fc, uint64_t index) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, + "variant-field-class-with-signed-integer-selector-field", BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD, "Field class"); return (const void *) borrow_named_field_class_from_container_field_class_at_index( - (void *) fc, index); + (void *) fc, index, __func__); } +BT_EXPORT const char *bt_field_class_variant_option_get_name( const struct bt_field_class_variant_option *option) { const struct bt_named_field_class *named_fc = (const void *) option; - BT_ASSERT_PRE_DEV_NON_NULL(option, "Variant field class option"); + BT_ASSERT_PRE_DEV_VAR_FC_OPT_NON_NULL(option); return named_fc->name->str; } +BT_EXPORT const struct bt_field_class * bt_field_class_variant_option_borrow_field_class_const( const struct bt_field_class_variant_option *option) { const struct bt_named_field_class *named_fc = (const void *) option; - BT_ASSERT_PRE_DEV_NON_NULL(option, "Variant field class option"); + BT_ASSERT_PRE_DEV_VAR_FC_OPT_NON_NULL(option); return named_fc->fc; } +BT_EXPORT struct bt_field_class * bt_field_class_variant_option_borrow_field_class( struct bt_field_class_variant_option *option) { struct bt_named_field_class *named_fc = (void *) option; - BT_ASSERT_PRE_DEV_NON_NULL(option, "Variant field class option"); + BT_ASSERT_PRE_DEV_VAR_FC_OPT_NON_NULL(option); return named_fc->fc; } +BT_EXPORT const struct bt_integer_range_set_unsigned * bt_field_class_variant_with_selector_field_integer_unsigned_option_borrow_ranges_const( const struct bt_field_class_variant_with_selector_field_integer_unsigned_option *option) @@ -1865,10 +1979,11 @@ bt_field_class_variant_with_selector_field_integer_unsigned_option_borrow_ranges const struct bt_field_class_variant_with_selector_field_option *opt = (const void *) option; - BT_ASSERT_PRE_DEV_NON_NULL(option, "Variant field class option"); + BT_ASSERT_PRE_DEV_VAR_FC_OPT_NON_NULL(option); return (const void *) opt->range_set; } +BT_EXPORT const struct bt_integer_range_set_signed * bt_field_class_variant_with_selector_field_integer_signed_option_borrow_ranges_const( const struct bt_field_class_variant_with_selector_field_integer_signed_option *option) @@ -1876,10 +1991,11 @@ bt_field_class_variant_with_selector_field_integer_signed_option_borrow_ranges_c const struct bt_field_class_variant_with_selector_field_option *opt = (const void *) option; - BT_ASSERT_PRE_DEV_NON_NULL(option, "Variant field class option"); + BT_ASSERT_PRE_DEV_VAR_FC_OPT_NON_NULL(option); return (const void *) opt->range_set; } +BT_EXPORT const struct bt_field_path * bt_field_class_variant_with_selector_field_borrow_selector_field_path_const( const struct bt_field_class *fc) @@ -1887,8 +2003,9 @@ bt_field_class_variant_with_selector_field_borrow_selector_field_path_const( const struct bt_field_class_variant_with_selector_field *var_fc = (const void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_IS_VARIANT_WITH_SEL(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_VARIANT_WITH_SEL("field-class", fc, + "Field class"); return var_fc->selector_field_path; } @@ -1931,14 +2048,17 @@ void destroy_static_array_field_class(struct bt_object *obj) g_free(obj); } +BT_EXPORT struct bt_field_class * bt_field_class_array_static_create(bt_trace_class *trace_class, struct bt_field_class *element_fc, uint64_t length) { struct bt_field_class_array_static *array_fc = NULL; - BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class"); - BT_ASSERT_PRE_NON_NULL(element_fc, "Element field class"); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_TC_NON_NULL(trace_class); + BT_ASSERT_PRE_NON_NULL("element-field-class", element_fc, + "Element field class"); BT_LOGD_STR("Creating default static array field class object."); array_fc = g_new0(struct bt_field_class_array_static, 1); if (!array_fc) { @@ -1964,33 +2084,37 @@ end: return (void *) array_fc; } +BT_EXPORT const struct bt_field_class * bt_field_class_array_borrow_element_field_class_const( const struct bt_field_class *fc) { const struct bt_field_class_array *array_fc = (const void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_IS_ARRAY(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_ARRAY("field-class", fc, "Field class"); return array_fc->element_fc; } +BT_EXPORT struct bt_field_class * bt_field_class_array_borrow_element_field_class(struct bt_field_class *fc) { struct bt_field_class_array *array_fc = (void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_IS_ARRAY(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_IS_ARRAY("field-class", fc, "Field class"); return array_fc->element_fc; } +BT_EXPORT uint64_t bt_field_class_array_static_get_length(const struct bt_field_class *fc) { const struct bt_field_class_array_static *array_fc = (const void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STATIC_ARRAY, + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_DEV_FC_HAS_TYPE("field-class", fc, + "static-array-field-class", BT_FIELD_CLASS_TYPE_STATIC_ARRAY, "Field class"); return (uint64_t) array_fc->length; } @@ -2010,6 +2134,7 @@ void destroy_dynamic_array_field_class(struct bt_object *obj) g_free(fc); } +BT_EXPORT struct bt_field_class *bt_field_class_array_dynamic_create( struct bt_trace_class *trace_class, struct bt_field_class *element_fc, @@ -2017,8 +2142,10 @@ struct bt_field_class *bt_field_class_array_dynamic_create( { struct bt_field_class_array_dynamic *array_fc = NULL; - BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class"); - BT_ASSERT_PRE_NON_NULL(element_fc, "Element field class"); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_TC_NON_NULL(trace_class); + BT_ASSERT_PRE_NON_NULL("element-field-class", element_fc, + "Element field class"); BT_LOGD_STR("Creating default dynamic array field class object."); array_fc = g_new0(struct bt_field_class_array_dynamic, 1); if (!array_fc) { @@ -2036,8 +2163,8 @@ struct bt_field_class *bt_field_class_array_dynamic_create( } if (length_fc) { - BT_ASSERT_PRE_FC_IS_UNSIGNED_INT(length_fc, - "Length field class"); + BT_ASSERT_PRE_FC_IS_UNSIGNED_INT("length-field-class", + length_fc, "Length field class"); array_fc->length_fc = length_fc; bt_object_get_ref_no_null_check(array_fc->length_fc); bt_field_class_freeze(length_fc); @@ -2053,14 +2180,17 @@ end: return (void *) array_fc; } +BT_EXPORT const struct bt_field_path * bt_field_class_array_dynamic_with_length_field_borrow_length_field_path_const( const struct bt_field_class *fc) { const struct bt_field_class_array_dynamic *seq_fc = (const void *) fc; - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_DEV_FC_HAS_ID(fc, + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); + BT_ASSERT_PRE_FC_HAS_TYPE("field-class", fc, + "dynamic-array-field-class-with-length-field", BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD, "Field class"); return seq_fc->length_field_path; @@ -2075,11 +2205,13 @@ void destroy_string_field_class(struct bt_object *obj) g_free(obj); } +BT_EXPORT struct bt_field_class *bt_field_class_string_create(bt_trace_class *trace_class) { struct bt_field_class_string *string_fc = NULL; - BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class"); + BT_ASSERT_PRE_NO_ERROR(); + BT_ASSERT_PRE_TC_NON_NULL(trace_class); BT_LOGD_STR("Creating default string field class object."); string_fc = g_new0(struct bt_field_class_string, 1); if (!string_fc) { @@ -2103,7 +2235,6 @@ end: return (void *) string_fc; } -BT_HIDDEN void _bt_field_class_freeze(const struct bt_field_class *c_fc) { struct bt_field_class *fc = (void *) c_fc; @@ -2130,7 +2261,6 @@ void _bt_field_class_freeze(const struct bt_field_class *c_fc) } } -BT_HIDDEN void _bt_named_field_class_freeze(const struct bt_named_field_class *named_fc) { BT_ASSERT(named_fc); @@ -2141,14 +2271,14 @@ void _bt_named_field_class_freeze(const struct bt_named_field_class *named_fc) ((struct bt_named_field_class *) named_fc)->frozen = true; } -BT_HIDDEN void bt_field_class_make_part_of_trace_class(const struct bt_field_class *c_fc) { struct bt_field_class *fc = (void *) c_fc; BT_ASSERT(fc); - BT_ASSERT_PRE(!fc->part_of_trace_class, - "Field class is already part of a trace: %!+F", fc); + BT_ASSERT_PRE("field-class-is-not-part-of-trace-class", + !fc->part_of_trace_class, + "Field class is already part of a trace class: %!+F", fc); fc->part_of_trace_class = true; if (fc->type == BT_FIELD_CLASS_TYPE_STRUCTURE || @@ -2172,13 +2302,15 @@ void bt_field_class_make_part_of_trace_class(const struct bt_field_class *c_fc) } } +BT_EXPORT const struct bt_value *bt_field_class_borrow_user_attributes_const( const struct bt_field_class *fc) { - BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class"); + BT_ASSERT_PRE_DEV_FC_NON_NULL(fc); return fc->user_attributes; } +BT_EXPORT struct bt_value *bt_field_class_borrow_user_attributes( struct bt_field_class *field_class) { @@ -2187,15 +2319,15 @@ struct bt_value *bt_field_class_borrow_user_attributes( } +BT_EXPORT void bt_field_class_set_user_attributes( struct bt_field_class *fc, const struct bt_value *user_attributes) { - BT_ASSERT_PRE_NON_NULL(fc, "Field class"); - BT_ASSERT_PRE_NON_NULL(user_attributes, "User attributes"); - BT_ASSERT_PRE(user_attributes->type == BT_VALUE_TYPE_MAP, - "User attributes object is not a map value object."); - BT_ASSERT_PRE_DEV_FC_HOT(fc, "Field class"); + BT_ASSERT_PRE_FC_NON_NULL(fc); + BT_ASSERT_PRE_USER_ATTRS_NON_NULL(user_attributes); + BT_ASSERT_PRE_USER_ATTRS_IS_MAP(user_attributes); + BT_ASSERT_PRE_DEV_FC_HOT(fc); bt_object_put_ref_no_null_check(fc->user_attributes); fc->user_attributes = (void *) user_attributes; bt_object_get_ref_no_null_check(fc->user_attributes); @@ -2209,78 +2341,88 @@ const struct bt_value *bt_named_field_class_borrow_user_attributes_const( } static -void bt_named_field_class_set_user_attributes( +void set_named_field_class_user_attributes( struct bt_named_field_class *named_fc, - const struct bt_value *user_attributes) + const struct bt_value *user_attributes, const char *api_func) { - BT_ASSERT_PRE_NON_NULL(user_attributes, "User attributes"); - BT_ASSERT_PRE(user_attributes->type == BT_VALUE_TYPE_MAP, - "User attributes object is not a map value object."); - BT_ASSERT_PRE_DEV_HOT(named_fc, - "Structure field class member or variant field class option", - "."); + BT_ASSERT_PRE_USER_ATTRS_NON_NULL_FROM_FUNC(api_func, user_attributes); + BT_ASSERT_PRE_USER_ATTRS_NON_NULL_FROM_FUNC(api_func, user_attributes); bt_object_put_ref_no_null_check(named_fc->user_attributes); named_fc->user_attributes = (void *) user_attributes; bt_object_get_ref_no_null_check(named_fc->user_attributes); } +BT_EXPORT const struct bt_value * bt_field_class_structure_member_borrow_user_attributes_const( const struct bt_field_class_structure_member *member) { - BT_ASSERT_PRE_NON_NULL(member, "Structure field class member"); + BT_ASSERT_PRE_STRUCT_FC_MEMBER_NON_NULL(member); return bt_named_field_class_borrow_user_attributes_const( (const void *) member); } +BT_EXPORT struct bt_value * bt_field_class_structure_member_borrow_user_attributes( struct bt_field_class_structure_member *member) { - BT_ASSERT_PRE_NON_NULL(member, "Structure field class member"); + BT_ASSERT_PRE_STRUCT_FC_MEMBER_NON_NULL(member); return (void *) bt_named_field_class_borrow_user_attributes_const( (void *) member); } +BT_EXPORT void bt_field_class_structure_member_set_user_attributes( struct bt_field_class_structure_member *member, const struct bt_value *user_attributes) { - BT_ASSERT_PRE_NON_NULL(member, "Structure field class member"); - bt_named_field_class_set_user_attributes((void *) member, - user_attributes); + BT_ASSERT_PRE_STRUCT_FC_MEMBER_NON_NULL(member); + BT_ASSERT_PRE_DEV_HOT("structure-field-class-member", + (struct bt_named_field_class *) member, + "Structure field class member", "."); + set_named_field_class_user_attributes((void *) member, + user_attributes, __func__); } +BT_EXPORT const struct bt_value *bt_field_class_variant_option_borrow_user_attributes_const( const struct bt_field_class_variant_option *option) { - BT_ASSERT_PRE_NON_NULL(option, "Variant field class option"); + BT_ASSERT_PRE_VAR_FC_OPT_NON_NULL(option); return bt_named_field_class_borrow_user_attributes_const( (const void *) option); } +BT_EXPORT struct bt_value *bt_field_class_variant_option_borrow_user_attributes( struct bt_field_class_variant_option *option) { - BT_ASSERT_PRE_NON_NULL(option, "Variant field class option"); + BT_ASSERT_PRE_VAR_FC_OPT_NON_NULL(option); return (void *) bt_named_field_class_borrow_user_attributes_const( (void *) option); } +BT_EXPORT void bt_field_class_variant_option_set_user_attributes( struct bt_field_class_variant_option *option, const struct bt_value *user_attributes) { - BT_ASSERT_PRE_NON_NULL(option, "Variant field class option"); - bt_named_field_class_set_user_attributes((void *) option, - user_attributes); + BT_ASSERT_PRE_VAR_FC_OPT_NON_NULL(option); + BT_ASSERT_PRE_DEV_HOT("variant-field-class-option", + (struct bt_named_field_class *) option, + "Variant field class option", "."); + set_named_field_class_user_attributes((void *) option, + user_attributes, __func__); } +BT_EXPORT void bt_field_class_get_ref(const struct bt_field_class *field_class) { bt_object_get_ref(field_class); } +BT_EXPORT void bt_field_class_put_ref(const struct bt_field_class *field_class) { bt_object_put_ref(field_class);