X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Ftrace-ir%2Ffield-classes.c;h=a219ddc0bb2def11acc89ef7876a8e21a3b2cd06;hb=40f4ba76dd6f9508ca51b6220eaed57632281a07;hp=4aa36f1af5e74e64b0f260ac775f65d5ba042278;hpb=65300d60e4b4f167e5fc8f584677757ce09a3844;p=babeltrace.git diff --git a/lib/trace-ir/field-classes.c b/lib/trace-ir/field-classes.c index 4aa36f1a..a219ddc0 100644 --- a/lib/trace-ir/field-classes.c +++ b/lib/trace-ir/field-classes.c @@ -1,8 +1,4 @@ /* - * field-classes.c - * - * Babeltrace trace IR - Event Types - * * Copyright 2013, 2014 Jérémie Galarneau * * Author: Jérémie Galarneau @@ -30,9 +26,12 @@ #include #include +#include +#include #include #include #include +#include #include #include #include @@ -48,7 +47,8 @@ #include #include -enum bt_field_class_type bt_field_class_get_type(struct bt_field_class *fc) +enum bt_field_class_type bt_field_class_get_type( + const struct bt_field_class *fc) { BT_ASSERT_PRE_NON_NULL(fc, "Field class"); return fc->type; @@ -79,7 +79,7 @@ static void destroy_integer_field_class(struct bt_object *obj) { BT_ASSERT(obj); - BT_LIB_LOGD("Destroying integer field classe object: %!+F", obj); + BT_LIB_LOGD("Destroying integer field class object: %!+F", obj); g_free(obj); } @@ -88,16 +88,16 @@ struct bt_field_class *create_integer_field_class(enum bt_field_class_type type) { struct bt_field_class_integer *int_fc = NULL; - BT_LOGD("Creating default integer field classe object: type=%s", + 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); if (!int_fc) { - BT_LOGE_STR("Failed to allocate one integer field classe."); + BT_LOGE_STR("Failed to allocate one integer field class."); goto error; } init_integer_field_class(int_fc, type, destroy_integer_field_class); - BT_LIB_LOGD("Created integer field classe object: %!+F", int_fc); + BT_LIB_LOGD("Created integer field class object: %!+F", int_fc); goto end; error: @@ -107,20 +107,23 @@ end: return (void *) int_fc; } -struct bt_field_class *bt_field_class_unsigned_integer_create(void) +struct bt_field_class * +bt_field_class_unsigned_integer_create(void) { - return create_integer_field_class(BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER); + return create_integer_field_class( + BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER); } struct bt_field_class *bt_field_class_signed_integer_create(void) { - return create_integer_field_class(BT_FIELD_CLASS_TYPE_SIGNED_INTEGER); + return create_integer_field_class( + BT_FIELD_CLASS_TYPE_SIGNED_INTEGER); } uint64_t bt_field_class_integer_get_field_value_range( - struct bt_field_class *fc) + const struct bt_field_class *fc) { - struct bt_field_class_integer *int_fc = (void *) fc; + const struct bt_field_class_integer *int_fc = (const void *) fc; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_IS_INT(fc, "Field class"); @@ -136,7 +139,7 @@ bool size_is_valid_for_enumeration_field_class(struct bt_field_class *fc, return true; } -int bt_field_class_integer_set_field_value_range( +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; @@ -145,31 +148,31 @@ int bt_field_class_integer_set_field_value_range( BT_ASSERT_PRE_FC_IS_INT(fc, "Field class"); BT_ASSERT_PRE_FC_HOT(fc, "Field class"); BT_ASSERT_PRE(size <= 64, - "Unsupported size for integer field classe's field value range " + "Unsupported size for integer field class's field value range " "(maximum is 64): size=%" PRIu64, size); BT_ASSERT_PRE( 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), - "Invalid field value range for enumeration field classe: " + "Invalid field value range for enumeration field class: " "at least one of the current mapping ranges contains values " "which are outside this range: %!+F, size=%" PRIu64, fc, size); int_fc->range = size; - BT_LIB_LOGV("Set integer field classe's field value range: %!+F", fc); - return 0; + BT_LIB_LOGV("Set integer field class's field value range: %!+F", fc); } enum bt_field_class_integer_preferred_display_base -bt_field_class_integer_get_preferred_display_base(struct bt_field_class *fc) +bt_field_class_integer_get_preferred_display_base(const struct bt_field_class *fc) { - struct bt_field_class_integer *int_fc = (void *) fc; + const struct bt_field_class_integer *int_fc = (const void *) fc; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_IS_INT(fc, "Field class"); return int_fc->base; } -int bt_field_class_integer_set_preferred_display_base(struct bt_field_class *fc, +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; @@ -178,8 +181,7 @@ int bt_field_class_integer_set_preferred_display_base(struct bt_field_class *fc, BT_ASSERT_PRE_FC_IS_INT(fc, "Field class"); BT_ASSERT_PRE_FC_HOT(fc, "Field class"); int_fc->base = base; - BT_LIB_LOGV("Set integer field classe's preferred display base: %!+F", fc); - return 0; + BT_LIB_LOGV("Set integer field class's preferred display base: %!+F", fc); } static @@ -203,7 +205,7 @@ void destroy_enumeration_field_class(struct bt_object *obj) struct bt_field_class_enumeration *fc = (void *) obj; BT_ASSERT(fc); - BT_LIB_LOGD("Destroying enumeration field classe object: %!+F", fc); + BT_LIB_LOGD("Destroying enumeration field class object: %!+F", fc); if (fc->mappings) { uint64_t i; @@ -214,25 +216,28 @@ void destroy_enumeration_field_class(struct bt_object *obj) } g_array_free(fc->mappings, TRUE); + fc->mappings = NULL; } if (fc->label_buf) { g_ptr_array_free(fc->label_buf, TRUE); + fc->label_buf = NULL; } g_free(fc); } static -struct bt_field_class *create_enumeration_field_class(enum bt_field_class_type type) +struct bt_field_class *create_enumeration_field_class( + enum bt_field_class_type type) { struct bt_field_class_enumeration *enum_fc = NULL; - BT_LOGD("Creating default enumeration field classe object: type=%s", + 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); if (!enum_fc) { - BT_LOGE_STR("Failed to allocate one enumeration field classe."); + BT_LOGE_STR("Failed to allocate one enumeration field class."); goto error; } @@ -251,7 +256,7 @@ struct bt_field_class *create_enumeration_field_class(enum bt_field_class_type t goto error; } - BT_LIB_LOGD("Created enumeration field classe object: %!+F", enum_fc); + BT_LIB_LOGD("Created enumeration field class object: %!+F", enum_fc); goto end; error: @@ -273,22 +278,23 @@ struct bt_field_class *bt_field_class_signed_enumeration_create(void) BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION); } -uint64_t bt_field_class_enumeration_get_mapping_count(struct bt_field_class *fc) +uint64_t bt_field_class_enumeration_get_mapping_count( + const struct bt_field_class *fc) { - struct bt_field_class_enumeration *enum_fc = (void *) fc; + const struct bt_field_class_enumeration *enum_fc = (const void *) fc; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_IS_ENUM(fc, "Field class"); return (uint64_t) enum_fc->mappings->len; } -void bt_field_class_unsigned_enumeration_borrow_mapping_by_index( - struct bt_field_class *fc, uint64_t index, +void bt_field_class_unsigned_enumeration_borrow_mapping_by_index_const( + const struct bt_field_class *fc, uint64_t index, const char **name, - struct bt_field_class_unsigned_enumeration_mapping_ranges **ranges) + const struct bt_field_class_unsigned_enumeration_mapping_ranges **ranges) { - struct bt_field_class_enumeration *enum_fc = (void *) fc; - struct bt_field_class_enumeration_mapping *mapping; + const struct bt_field_class_enumeration *enum_fc = (const void *) fc; + const struct bt_field_class_enumeration_mapping *mapping; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_NON_NULL(name, "Name (output)"); @@ -301,13 +307,13 @@ void bt_field_class_unsigned_enumeration_borrow_mapping_by_index( *ranges = (void *) mapping; } -void bt_field_class_signed_enumeration_borrow_mapping_by_index( - struct bt_field_class *fc, uint64_t index, +void bt_field_class_signed_enumeration_borrow_mapping_by_index_const( + const struct bt_field_class *fc, uint64_t index, const char **name, - struct bt_field_class_signed_enumeration_mapping_ranges **ranges) + const struct bt_field_class_signed_enumeration_mapping_ranges **ranges) { - struct bt_field_class_enumeration *enum_fc = (void *) fc; - struct bt_field_class_enumeration_mapping *mapping; + const struct bt_field_class_enumeration *enum_fc = (const void *) fc; + const struct bt_field_class_enumeration_mapping *mapping; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_NON_NULL(name, "Name (output)"); @@ -322,30 +328,32 @@ void bt_field_class_signed_enumeration_borrow_mapping_by_index( static inline uint64_t get_enumeration_field_class_mapping_range_count( - struct bt_field_class_enumeration_mapping *mapping) + const struct bt_field_class_enumeration_mapping *mapping) { BT_ASSERT_PRE_NON_NULL(mapping, "Ranges"); return (uint64_t) mapping->ranges->len; } uint64_t bt_field_class_unsigned_enumeration_mapping_ranges_get_range_count( - struct bt_field_class_unsigned_enumeration_mapping_ranges *ranges) + const struct bt_field_class_unsigned_enumeration_mapping_ranges *ranges) { - return get_enumeration_field_class_mapping_range_count((void *) ranges); + return get_enumeration_field_class_mapping_range_count( + (const void *) ranges); } uint64_t bt_field_class_signed_enumeration_mapping_ranges_get_range_count( - struct bt_field_class_signed_enumeration_mapping_ranges *ranges) + const struct bt_field_class_signed_enumeration_mapping_ranges *ranges) { - return get_enumeration_field_class_mapping_range_count((void *) ranges); + return get_enumeration_field_class_mapping_range_count( + (const void *) ranges); } static inline void get_enumeration_field_class_mapping_range_at_index( - struct bt_field_class_enumeration_mapping *mapping, + const struct bt_field_class_enumeration_mapping *mapping, uint64_t index, uint64_t *lower, uint64_t *upper) { - struct bt_field_class_enumeration_mapping_range *range; + const struct bt_field_class_enumeration_mapping_range *range; BT_ASSERT_PRE_NON_NULL(mapping, "Ranges"); BT_ASSERT_PRE_NON_NULL(lower, "Range's lower (output)"); @@ -357,29 +365,30 @@ void get_enumeration_field_class_mapping_range_at_index( } void bt_field_class_unsigned_enumeration_mapping_ranges_get_range_by_index( - struct bt_field_class_unsigned_enumeration_mapping_ranges *ranges, + const struct bt_field_class_unsigned_enumeration_mapping_ranges *ranges, uint64_t index, uint64_t *lower, uint64_t *upper) { - get_enumeration_field_class_mapping_range_at_index((void *) ranges, - index, lower, upper); + get_enumeration_field_class_mapping_range_at_index( + (const void *) ranges, index, lower, upper); } void bt_field_class_signed_enumeration_mapping_ranges_get_range_by_index( - struct bt_field_class_unsigned_enumeration_mapping_ranges *ranges, + const struct bt_field_class_unsigned_enumeration_mapping_ranges *ranges, uint64_t index, int64_t *lower, int64_t *upper) { - get_enumeration_field_class_mapping_range_at_index((void *) ranges, - index, (uint64_t *) lower, (uint64_t *) upper); + get_enumeration_field_class_mapping_range_at_index( + (const void *) ranges, index, + (uint64_t *) lower, (uint64_t *) upper); } int bt_field_class_unsigned_enumeration_get_mapping_labels_by_value( - struct bt_field_class *fc, uint64_t value, + const struct bt_field_class *fc, uint64_t value, bt_field_class_enumeration_mapping_label_array *label_array, uint64_t *count) { - struct bt_field_class_enumeration *enum_fc = (void *) fc; + const struct bt_field_class_enumeration *enum_fc = (const void *) fc; uint64_t i; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); @@ -391,11 +400,11 @@ int bt_field_class_unsigned_enumeration_get_mapping_labels_by_value( for (i = 0; i < enum_fc->mappings->len; i++) { uint64_t j; - struct bt_field_class_enumeration_mapping *mapping = + const struct bt_field_class_enumeration_mapping *mapping = BT_FIELD_CLASS_ENUM_MAPPING_AT_INDEX(enum_fc, i); for (j = 0; j < mapping->ranges->len; j++) { - struct bt_field_class_enumeration_mapping_range *range = + const struct bt_field_class_enumeration_mapping_range *range = BT_FIELD_CLASS_ENUM_MAPPING_RANGE_AT_INDEX( mapping, j); @@ -414,11 +423,11 @@ int bt_field_class_unsigned_enumeration_get_mapping_labels_by_value( } int bt_field_class_signed_enumeration_get_mapping_labels_by_value( - struct bt_field_class *fc, int64_t value, + const struct bt_field_class *fc, int64_t value, bt_field_class_enumeration_mapping_label_array *label_array, uint64_t *count) { - struct bt_field_class_enumeration *enum_fc = (void *) fc; + const struct bt_field_class_enumeration *enum_fc = (const void *) fc; uint64_t i; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); @@ -430,11 +439,11 @@ int bt_field_class_signed_enumeration_get_mapping_labels_by_value( for (i = 0; i < enum_fc->mappings->len; i++) { uint64_t j; - struct bt_field_class_enumeration_mapping *mapping = + const struct bt_field_class_enumeration_mapping *mapping = BT_FIELD_CLASS_ENUM_MAPPING_AT_INDEX(enum_fc, i); for (j = 0; j < mapping->ranges->len; j++) { - struct bt_field_class_enumeration_mapping_range *range = + const struct bt_field_class_enumeration_mapping_range *range = BT_FIELD_CLASS_ENUM_MAPPING_RANGE_AT_INDEX( mapping, j); @@ -508,7 +517,7 @@ int add_mapping_to_enumeration_field_class(struct bt_field_class *fc, mapping->ranges->len - 1); range->lower.u = lower; range->upper.u = upper; - BT_LIB_LOGV("Added mapping to enumeration field classe: " + BT_LIB_LOGV("Added mapping to enumeration field class: " "%![fc-]+F, label=\"%s\", lower-unsigned=%" PRIu64 ", " "upper-unsigned=%" PRIu64, fc, label, lower, upper); @@ -531,11 +540,11 @@ int bt_field_class_unsigned_enumeration_map_range( range_lower, range_upper); BT_ASSERT_PRE(bt_util_value_is_in_range_unsigned(enum_fc->common.range, range_lower), - "Range's lower bound is outside the enumeration field classe's value range: " + "Range's lower bound is outside the enumeration field class's value range: " "%![fc-]+F, lower=%" PRIu64, fc, range_lower); BT_ASSERT_PRE(bt_util_value_is_in_range_unsigned(enum_fc->common.range, range_upper), - "Range's upper bound is outside the enumeration field classe's value range: " + "Range's upper bound is outside the enumeration field class's value range: " "%![fc-]+F, upper=%" PRIu64, fc, range_upper); return add_mapping_to_enumeration_field_class(fc, label, range_lower, range_upper); @@ -556,11 +565,11 @@ int bt_field_class_signed_enumeration_map_range( range_lower, range_upper); BT_ASSERT_PRE(bt_util_value_is_in_range_signed(enum_fc->common.range, range_lower), - "Range's lower bound is outside the enumeration field classe's value range: " + "Range's lower bound is outside the enumeration field class's value range: " "%![fc-]+F, lower=%" PRId64, fc, range_lower); BT_ASSERT_PRE(bt_util_value_is_in_range_signed(enum_fc->common.range, range_upper), - "Range's upper bound is outside the enumeration field classe's value range: " + "Range's upper bound is outside the enumeration field class's value range: " "%![fc-]+F, upper=%" PRId64, fc, range_upper); return add_mapping_to_enumeration_field_class(fc, label, range_lower, range_upper); @@ -570,7 +579,7 @@ static void destroy_real_field_class(struct bt_object *obj) { BT_ASSERT(obj); - BT_LIB_LOGD("Destroying real field classe object: %!+F", obj); + BT_LIB_LOGD("Destroying real field class object: %!+F", obj); g_free(obj); } @@ -578,16 +587,16 @@ struct bt_field_class *bt_field_class_real_create(void) { struct bt_field_class_real *real_fc = NULL; - BT_LOGD_STR("Creating default real field classe object."); + BT_LOGD_STR("Creating default real field class object."); real_fc = g_new0(struct bt_field_class_real, 1); if (!real_fc) { - BT_LOGE_STR("Failed to allocate one real field classe."); + BT_LOGE_STR("Failed to allocate one real field class."); goto error; } init_field_class((void *) real_fc, BT_FIELD_CLASS_TYPE_REAL, destroy_real_field_class); - BT_LIB_LOGD("Created real field classe object: %!+F", real_fc); + BT_LIB_LOGD("Created real field class object: %!+F", real_fc); goto end; error: @@ -597,16 +606,16 @@ end: return (void *) real_fc; } -bt_bool bt_field_class_real_is_single_precision(struct bt_field_class *fc) +bt_bool bt_field_class_real_is_single_precision(const struct bt_field_class *fc) { - struct bt_field_class_real *real_fc = (void *) fc; + const struct bt_field_class_real *real_fc = (const void *) fc; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_REAL, "Field class"); return real_fc->is_single_precision; } -int bt_field_class_real_set_is_single_precision(struct bt_field_class *fc, +void bt_field_class_real_set_is_single_precision(struct bt_field_class *fc, bt_bool is_single_precision) { struct bt_field_class_real *real_fc = (void *) fc; @@ -615,15 +624,15 @@ int bt_field_class_real_set_is_single_precision(struct bt_field_class *fc, BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_REAL, "Field class"); BT_ASSERT_PRE_FC_HOT(fc, "Field class"); real_fc->is_single_precision = (bool) is_single_precision; - BT_LIB_LOGV("Set real field classe's \"is single precision\" property: " + BT_LIB_LOGV("Set real field class's \"is single precision\" property: " "%!+F", fc); - return 0; } static int init_named_field_classes_container( struct bt_field_class_named_field_class_container *fc, - enum bt_field_class_type type, bt_object_release_func release_func) + enum bt_field_class_type type, + bt_object_release_func release_func) { int ret = 0; @@ -651,7 +660,7 @@ static void finalize_named_field_class(struct bt_named_field_class *named_fc) { BT_ASSERT(named_fc); - BT_LIB_LOGD("Finalizing named field classe: " + BT_LIB_LOGD("Finalizing named field class: " "addr=%p, name=\"%s\", %![fc-]+F", named_fc, named_fc->name ? named_fc->name->str : NULL, named_fc->fc); @@ -660,8 +669,8 @@ void finalize_named_field_class(struct bt_named_field_class *named_fc) g_string_free(named_fc->name, TRUE); } - BT_LOGD_STR("Putting named field classe's field classe."); - bt_object_put_ref(named_fc->fc); + BT_LOGD_STR("Putting named field class's field class."); + BT_OBJECT_PUT_REF_AND_RESET(named_fc->fc); } static @@ -691,7 +700,7 @@ static void destroy_structure_field_class(struct bt_object *obj) { BT_ASSERT(obj); - BT_LIB_LOGD("Destroying string field classe object: %!+F", obj); + BT_LIB_LOGD("Destroying string field class object: %!+F", obj); finalize_named_field_classes_container((void *) obj); g_free(obj); } @@ -701,10 +710,10 @@ struct bt_field_class *bt_field_class_structure_create(void) int ret; struct bt_field_class_structure *struct_fc = NULL; - BT_LOGD_STR("Creating default structure field classe object."); + BT_LOGD_STR("Creating default structure field class object."); struct_fc = g_new0(struct bt_field_class_structure, 1); if (!struct_fc) { - BT_LOGE_STR("Failed to allocate one structure field classe."); + BT_LOGE_STR("Failed to allocate one structure field class."); goto error; } @@ -714,7 +723,7 @@ struct bt_field_class *bt_field_class_structure_create(void) goto error; } - BT_LIB_LOGD("Created structure field classe object: %!+F", struct_fc); + BT_LIB_LOGD("Created structure field class object: %!+F", struct_fc); goto end; error: @@ -739,7 +748,7 @@ int append_named_field_class_to_container_field_class( BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE(!bt_g_hash_table_contains(container_fc->name_to_index, name), - "Duplicate member/option name in structure/variant field classe: " + "Duplicate member/option name in structure/variant field class: " "%![container-fc-]+F, name=\"%s\"", container_fc, name); name_str = g_string_new(name); if (!name_str) { @@ -753,7 +762,8 @@ int append_named_field_class_to_container_field_class( named_fc = &g_array_index(container_fc->named_fcs, struct bt_named_field_class, container_fc->named_fcs->len - 1); named_fc->name = name_str; - named_fc->fc = bt_object_get_ref(fc); + named_fc->fc = fc; + bt_object_get_no_null_check(fc); g_hash_table_insert(container_fc->name_to_index, named_fc->name->str, GUINT_TO_POINTER(container_fc->named_fcs->len - 1)); bt_field_class_freeze(fc); @@ -765,13 +775,15 @@ end: int bt_field_class_structure_append_member(struct bt_field_class *fc, const char *name, struct bt_field_class *member_fc) { + BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STRUCTURE, "Field class"); return append_named_field_class_to_container_field_class((void *) fc, name, member_fc); } -uint64_t bt_field_class_structure_get_member_count(struct bt_field_class *fc) +uint64_t bt_field_class_structure_get_member_count( + const struct bt_field_class *fc) { struct bt_field_class_structure *struct_fc = (void *) fc; @@ -781,12 +793,12 @@ uint64_t bt_field_class_structure_get_member_count(struct bt_field_class *fc) } static -void borrow_named_field_class_from_container_field_class_at_index( - struct bt_field_class_named_field_class_container *fc, +void borrow_named_field_class_from_container_field_class_at_index_const( + const struct bt_field_class_named_field_class_container *fc, uint64_t index, const char **name, - struct bt_field_class **out_fc) + const struct bt_field_class **out_fc) { - struct bt_named_field_class *named_fc; + const struct bt_named_field_class *named_fc; BT_ASSERT(fc); BT_ASSERT_PRE_NON_NULL(name, "Name"); @@ -797,23 +809,24 @@ void borrow_named_field_class_from_container_field_class_at_index( *out_fc = named_fc->fc; } -void bt_field_class_structure_borrow_member_by_index( - struct bt_field_class *fc, uint64_t index, - const char **name, struct bt_field_class **out_fc) +void bt_field_class_structure_borrow_member_by_index_const( + const struct bt_field_class *fc, uint64_t index, + const char **name, const struct bt_field_class **out_fc) { BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STRUCTURE, "Field class"); - borrow_named_field_class_from_container_field_class_at_index((void *) fc, - index, name, out_fc); + borrow_named_field_class_from_container_field_class_at_index_const( + (void *) fc, index, name, out_fc); } static -struct bt_field_class *borrow_field_class_from_container_field_class_by_name( - struct bt_field_class_named_field_class_container *fc, +const struct bt_field_class * +borrow_field_class_from_container_field_class_by_name_const( + const struct bt_field_class_named_field_class_container *fc, const char *name) { - struct bt_field_class *ret_fc = NULL; - struct bt_named_field_class *named_fc; + const struct bt_field_class *ret_fc = NULL; + const struct bt_named_field_class *named_fc; gpointer orig_key; gpointer value; @@ -832,13 +845,14 @@ end: return ret_fc; } -struct bt_field_class *bt_field_class_structure_borrow_member_field_class_by_name( - struct bt_field_class *fc, const char *name) +const struct bt_field_class * +bt_field_class_structure_borrow_member_field_class_by_name( + const struct bt_field_class *fc, const char *name) { BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STRUCTURE, "Field class"); - return borrow_field_class_from_container_field_class_by_name((void *) fc, - name); + return borrow_field_class_from_container_field_class_by_name_const( + (void *) fc, name); } static @@ -847,10 +861,12 @@ void destroy_variant_field_class(struct bt_object *obj) struct bt_field_class_variant *fc = (void *) obj; BT_ASSERT(fc); - BT_LIB_LOGD("Destroying variant field classe object: %!+F", fc); + BT_LIB_LOGD("Destroying variant field class object: %!+F", fc); finalize_named_field_classes_container((void *) fc); BT_LOGD_STR("Putting selector field path."); - bt_object_put_ref(fc->selector_field_path); + BT_OBJECT_PUT_REF_AND_RESET(fc->selector_field_path); + BT_LOGD_STR("Putting selector field class."); + BT_OBJECT_PUT_REF_AND_RESET(fc->selector_fc); g_free(fc); } @@ -859,10 +875,10 @@ struct bt_field_class *bt_field_class_variant_create(void) int ret; struct bt_field_class_variant *var_fc = NULL; - BT_LOGD_STR("Creating default variant field classe object."); + BT_LOGD_STR("Creating default variant field class object."); var_fc = g_new0(struct bt_field_class_variant, 1); if (!var_fc) { - BT_LOGE_STR("Failed to allocate one variant field classe."); + BT_LOGE_STR("Failed to allocate one variant field class."); goto error; } @@ -872,7 +888,7 @@ struct bt_field_class *bt_field_class_variant_create(void) goto error; } - BT_LIB_LOGD("Created variant field classe object: %!+F", var_fc); + BT_LIB_LOGD("Created variant field class object: %!+F", var_fc); goto end; error: @@ -883,61 +899,67 @@ end: } int bt_field_class_variant_set_selector_field_class( - struct bt_field_class *fc, struct bt_field_class *selector_fc) + struct bt_field_class *fc, + struct bt_field_class *selector_fc) { struct bt_field_class_variant *var_fc = (void *) fc; - BT_ASSERT_PRE_NON_NULL(fc, "Variant field classe"); - BT_ASSERT_PRE_NON_NULL(selector_fc, "Selector field classe"); + BT_ASSERT_PRE_NON_NULL(fc, "Variant field class"); + BT_ASSERT_PRE_NON_NULL(selector_fc, "Selector field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_VARIANT, "Field class"); - BT_ASSERT_PRE_FC_IS_ENUM(selector_fc, "Selector field classe"); - BT_ASSERT_PRE_FC_HOT(fc, "Variant field classe"); + BT_ASSERT_PRE_FC_IS_ENUM(selector_fc, "Selector field class"); + BT_ASSERT_PRE_FC_HOT(fc, "Variant field class"); var_fc->selector_fc = selector_fc; + bt_object_get_no_null_check(selector_fc); bt_field_class_freeze(selector_fc); return 0; } -int bt_field_class_variant_append_option(struct bt_field_class *fc, +int bt_field_class_variant_append_option( + struct bt_field_class *fc, const char *name, struct bt_field_class *option_fc) { + BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_VARIANT, "Field class"); return append_named_field_class_to_container_field_class((void *) fc, name, option_fc); } -struct bt_field_class *bt_field_class_variant_borrow_option_field_class_by_name( - struct bt_field_class *fc, const char *name) +const struct bt_field_class * +bt_field_class_variant_borrow_option_field_class_by_name_const( + const struct bt_field_class *fc, const char *name) { BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_VARIANT, "Field class"); - return borrow_field_class_from_container_field_class_by_name((void *) fc, - name); + return borrow_field_class_from_container_field_class_by_name_const( + (void *) fc, name); } -uint64_t bt_field_class_variant_get_option_count(struct bt_field_class *fc) +uint64_t bt_field_class_variant_get_option_count(const struct bt_field_class *fc) { - struct bt_field_class_variant *var_fc = (void *) fc; + const struct bt_field_class_variant *var_fc = (const void *) fc; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_VARIANT, "Field class"); return (uint64_t) var_fc->common.named_fcs->len; } -void bt_field_class_variant_borrow_option_by_index( - struct bt_field_class *fc, uint64_t index, - const char **name, struct bt_field_class **out_fc) +void bt_field_class_variant_borrow_option_by_index_const( + const struct bt_field_class *fc, uint64_t index, + const char **name, const struct bt_field_class **out_fc) { BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_VARIANT, "Field class"); - borrow_named_field_class_from_container_field_class_at_index((void *) fc, - index, name, out_fc); + borrow_named_field_class_from_container_field_class_at_index_const( + (void *) fc, index, name, out_fc); } -struct bt_field_path *bt_field_class_variant_borrow_selector_field_path( - struct bt_field_class *fc) +const struct bt_field_path * +bt_field_class_variant_borrow_selector_field_path_const( + const struct bt_field_class *fc) { - struct bt_field_class_variant *var_fc = (void *) fc; + const struct bt_field_class_variant *var_fc = (const void *) fc; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_VARIANT, @@ -952,7 +974,8 @@ void init_array_field_class(struct bt_field_class_array *fc, { BT_ASSERT(element_fc); init_field_class((void *) fc, type, release_func); - fc->element_fc = bt_object_get_ref(element_fc); + fc->element_fc = element_fc; + bt_object_get_no_null_check(element_fc); bt_field_class_freeze(element_fc); } @@ -960,36 +983,37 @@ static void finalize_array_field_class(struct bt_field_class_array *array_fc) { BT_ASSERT(array_fc); - BT_LOGD_STR("Putting element field classe."); - bt_object_put_ref(array_fc->element_fc); + BT_LOGD_STR("Putting element field class."); + BT_OBJECT_PUT_REF_AND_RESET(array_fc->element_fc); } static void destroy_static_array_field_class(struct bt_object *obj) { BT_ASSERT(obj); - BT_LIB_LOGD("Destroying static array field classe object: %!+F", obj); + BT_LIB_LOGD("Destroying static array field class object: %!+F", obj); finalize_array_field_class((void *) obj); g_free(obj); } -struct bt_field_class *bt_field_class_static_array_create( - struct bt_field_class *element_fc, uint64_t length) +struct bt_field_class * +bt_field_class_static_array_create(struct bt_field_class *element_fc, + uint64_t length) { struct bt_field_class_static_array *array_fc = NULL; - BT_ASSERT_PRE_NON_NULL(element_fc, "Element field classe"); - BT_LOGD_STR("Creating default static array field classe object."); + BT_ASSERT_PRE_NON_NULL(element_fc, "Element field class"); + BT_LOGD_STR("Creating default static array field class object."); array_fc = g_new0(struct bt_field_class_static_array, 1); if (!array_fc) { - BT_LOGE_STR("Failed to allocate one static array field classe."); + BT_LOGE_STR("Failed to allocate one static array field class."); goto error; } init_array_field_class((void *) array_fc, BT_FIELD_CLASS_TYPE_STATIC_ARRAY, destroy_static_array_field_class, element_fc); array_fc->length = length; - BT_LIB_LOGD("Created static array field classe object: %!+F", array_fc); + BT_LIB_LOGD("Created static array field class object: %!+F", array_fc); goto end; error: @@ -999,19 +1023,20 @@ end: return (void *) array_fc; } -struct bt_field_class *bt_field_class_array_borrow_element_field_class( - struct bt_field_class *fc) +const struct bt_field_class * +bt_field_class_array_borrow_element_field_class_const( + const struct bt_field_class *fc) { - struct bt_field_class_array *array_fc = (void *) fc; + const struct bt_field_class_array *array_fc = (const void *) fc; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_IS_ARRAY(fc, "Field class"); return array_fc->element_fc; } -uint64_t bt_field_class_static_array_get_length(struct bt_field_class *fc) +uint64_t bt_field_class_static_array_get_length(const struct bt_field_class *fc) { - struct bt_field_class_static_array *array_fc = (void *) fc; + const struct bt_field_class_static_array *array_fc = (const void *) fc; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STATIC_ARRAY, @@ -1025,10 +1050,12 @@ void destroy_dynamic_array_field_class(struct bt_object *obj) struct bt_field_class_dynamic_array *fc = (void *) obj; BT_ASSERT(fc); - BT_LIB_LOGD("Destroying dynamic array field classe object: %!+F", fc); + BT_LIB_LOGD("Destroying dynamic array field class object: %!+F", fc); finalize_array_field_class((void *) fc); BT_LOGD_STR("Putting length field path."); - bt_object_put_ref(fc->length_field_path); + BT_OBJECT_PUT_REF_AND_RESET(fc->length_field_path); + BT_LOGD_STR("Putting length field class."); + BT_OBJECT_PUT_REF_AND_RESET(fc->length_fc); g_free(fc); } @@ -1037,17 +1064,18 @@ struct bt_field_class *bt_field_class_dynamic_array_create( { struct bt_field_class_dynamic_array *array_fc = NULL; - BT_ASSERT_PRE_NON_NULL(element_fc, "Element field classe"); - BT_LOGD_STR("Creating default dynamic array field classe object."); + BT_ASSERT_PRE_NON_NULL(element_fc, "Element field class"); + BT_LOGD_STR("Creating default dynamic array field class object."); array_fc = g_new0(struct bt_field_class_dynamic_array, 1); if (!array_fc) { - BT_LOGE_STR("Failed to allocate one dynamic array field classe."); + BT_LOGE_STR("Failed to allocate one dynamic array field class."); goto error; } - init_array_field_class((void *) array_fc, BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY, + init_array_field_class((void *) array_fc, + BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY, destroy_dynamic_array_field_class, element_fc); - BT_LIB_LOGD("Created dynamic array field classe object: %!+F", array_fc); + BT_LIB_LOGD("Created dynamic array field class object: %!+F", array_fc); goto end; error: @@ -1057,26 +1085,29 @@ end: return (void *) array_fc; } -int bt_field_class_dynamic_array_set_length_field_class(struct bt_field_class *fc, +int bt_field_class_dynamic_array_set_length_field_class( + struct bt_field_class *fc, struct bt_field_class *length_fc) { struct bt_field_class_dynamic_array *array_fc = (void *) fc; - BT_ASSERT_PRE_NON_NULL(fc, "Dynamic array field classe"); - BT_ASSERT_PRE_NON_NULL(length_fc, "Length field classe"); + BT_ASSERT_PRE_NON_NULL(fc, "Dynamic array field class"); + BT_ASSERT_PRE_NON_NULL(length_fc, "Length field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY, "Field class"); - BT_ASSERT_PRE_FC_IS_UNSIGNED_INT(length_fc, "Length field classe"); - BT_ASSERT_PRE_FC_HOT(fc, "Dynamic array field classe"); + BT_ASSERT_PRE_FC_IS_UNSIGNED_INT(length_fc, "Length field class"); + BT_ASSERT_PRE_FC_HOT(fc, "Dynamic array field class"); array_fc->length_fc = length_fc; + bt_object_get_no_null_check(length_fc); bt_field_class_freeze(length_fc); return 0; } -struct bt_field_path *bt_field_class_dynamic_array_borrow_length_field_path( - struct bt_field_class *fc) +const struct bt_field_path * +bt_field_class_dynamic_array_borrow_length_field_path_const( + const struct bt_field_class *fc) { - struct bt_field_class_dynamic_array *seq_fc = (void *) fc; + const struct bt_field_class_dynamic_array *seq_fc = (const void *) fc; BT_ASSERT_PRE_NON_NULL(fc, "Field class"); BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY, @@ -1088,7 +1119,7 @@ static void destroy_string_field_class(struct bt_object *obj) { BT_ASSERT(obj); - BT_LIB_LOGD("Destroying string field classe object: %!+F", obj); + BT_LIB_LOGD("Destroying string field class object: %!+F", obj); g_free(obj); } @@ -1096,16 +1127,16 @@ struct bt_field_class *bt_field_class_string_create(void) { struct bt_field_class_string *string_fc = NULL; - BT_LOGD_STR("Creating default string field classe object."); + BT_LOGD_STR("Creating default string field class object."); string_fc = g_new0(struct bt_field_class_string, 1); if (!string_fc) { - BT_LOGE_STR("Failed to allocate one string field classe."); + BT_LOGE_STR("Failed to allocate one string field class."); goto error; } init_field_class((void *) string_fc, BT_FIELD_CLASS_TYPE_STRING, destroy_string_field_class); - BT_LIB_LOGD("Created string field classe object: %!+F", string_fc); + BT_LIB_LOGD("Created string field class object: %!+F", string_fc); goto end; error: @@ -1116,19 +1147,21 @@ end: } BT_HIDDEN -void _bt_field_class_freeze(struct bt_field_class *fc) +void _bt_field_class_freeze(const struct bt_field_class *fc) { /* * Element/member/option field classes are frozen when added to * their owner. */ BT_ASSERT(fc); - fc->frozen = true; + ((struct bt_field_class *) fc)->frozen = true; } BT_HIDDEN -void _bt_field_class_make_part_of_trace(struct bt_field_class *fc) +void _bt_field_class_make_part_of_trace(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, "Field class is already part of a trace: %!+F", fc);