/*
+ * SPDX-License-Identifier: MIT
+ *
* Copyright 2017-2018 Philippe Proulx <pproulx@efficios.com>
* Copyright 2013, 2014 Jérémie Galarneau <jeremie.galarneau@efficios.com>
- *
- * 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 <babeltrace2/trace-ir/field-class.h>
-#include <babeltrace2/trace-ir/field-class-const.h>
-#include <babeltrace2/trace-ir/field-const.h>
#include <babeltrace2/trace-ir/field.h>
#include <babeltrace2/trace-ir/clock-class.h>
#include "lib/object.h"
#include "compat/glib.h"
#include <float.h>
#include <inttypes.h>
+#include <stdbool.h>
#include <stdlib.h>
#include "clock-class.h"
{
struct bt_field_class_bit_array *ba_fc = NULL;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class");
BT_ASSERT_PRE(length > 0 && length <= 64,
"Unsupported length for bit array field class "
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,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_BIT_ARRAY,
"Field class");
return ba_fc->length;
}
{
struct bt_field_class_bool *bool_fc = NULL;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class");
BT_LOGD("Creating default boolean field class object.");
bool_fc = g_new0(struct bt_field_class_bool, 1);
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);
}
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_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(size >= 1 && size <= 64,
"Unsupported size for integer field class's field value range "
- "(maximum is 64): size=%" PRIu64, size);
+ "(minimum is 1, 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 ||
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);
}
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_ASSERT_PRE_DEV_NON_NULL(fc, "Field class");
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,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION,
"Field class");
return (const void *) BT_FIELD_CLASS_ENUM_MAPPING_AT_INDEX(fc, index);
}
BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class");
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,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION,
"Field class");
return (const void *) BT_FIELD_CLASS_ENUM_MAPPING_AT_INDEX(fc, index);
}
struct bt_field_class_enumeration_mapping *mapping = NULL;
uint64_t i;
- BT_ASSERT(fc);
+ BT_ASSERT_DBG(fc);
BT_ASSERT_PRE_DEV_NON_NULL(label, "Label");
for (i = 0; i < fc->mappings->len; i++) {
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,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION,
"Field class");
return (const void *) borrow_enumeration_field_class_mapping_by_label(
(const void *) fc, label);
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_HAS_TYPE(fc,
BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION, "Field class");
return (const void *) borrow_enumeration_field_class_mapping_by_label(
(const void *) fc, label);
const struct bt_field_class_enumeration *enum_fc = (const void *) fc;
uint64_t i;
+ BT_ASSERT_PRE_DEV_NO_ERROR();
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,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION,
"Field class");
g_ptr_array_set_size(enum_fc->label_buf, 0);
const struct bt_field_class_enumeration *enum_fc = (const void *) fc;
uint64_t i;
+ BT_ASSERT_PRE_DEV_NO_ERROR();
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,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION,
"Field class");
g_ptr_array_set_size(enum_fc->label_buf, 0);
struct bt_field_class_enumeration *enum_fc = (void *) fc;
struct bt_field_class_enumeration_mapping mapping = { 0 };
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT(fc);
BT_ASSERT_PRE_NON_NULL(label, "Label");
BT_ASSERT_PRE_NON_NULL(range_set, "Integer range set");
struct bt_field_class *fc, const char *label,
const struct bt_integer_range_set_unsigned *range_set)
{
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(fc, "Field class");
- BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION,
+ BT_ASSERT_PRE_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION,
"Field class");
return add_mapping_to_enumeration_field_class(fc, label,
(const void *) range_set);
struct bt_field_class *fc, const char *label,
const struct bt_integer_range_set_signed *range_set)
{
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(fc, "Field class");
- BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION,
+ BT_ASSERT_PRE_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION,
"Field class");
return add_mapping_to_enumeration_field_class(fc, label,
(const void *) range_set);
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);
}
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);
}
int ret;
struct bt_field_class_structure *struct_fc = NULL;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class");
BT_LOGD_STR("Creating default structure field class object.");
struct_fc = g_new0(struct bt_field_class_structure, 1);
enum bt_field_class_structure_append_member_status status;
struct bt_named_field_class *named_fc = NULL;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(fc, "Field class");
- BT_ASSERT_PRE_FC_HAS_ID(fc, BT_FIELD_CLASS_TYPE_STRUCTURE,
+ BT_ASSERT_PRE_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_STRUCTURE,
"Field class");
named_fc = create_named_field_class(name, member_fc);
if (!named_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,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_STRUCTURE,
"Field class");
return (uint64_t) struct_fc->common.named_fcs->len;
}
struct bt_field_class_named_field_class_container *fc,
uint64_t index)
{
- BT_ASSERT(fc);
+ BT_ASSERT_DBG(fc);
BT_ASSERT_PRE_DEV_VALID_INDEX(index, fc->named_fcs->len);
return fc->named_fcs->pdata[index];
}
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,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_STRUCTURE,
"Field class");
return (const void *)
borrow_named_field_class_from_container_field_class_at_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,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_STRUCTURE,
"Field class");
return (void *)
borrow_named_field_class_from_container_field_class_at_index(
gpointer orig_key;
gpointer value;
- BT_ASSERT(fc);
+ BT_ASSERT_DBG(fc);
BT_ASSERT_PRE_DEV_NON_NULL(name, "Name");
if (!g_hash_table_lookup_extended(fc->name_to_index, name, &orig_key,
&value)) {
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,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_STRUCTURE,
"Field class");
return (const void *)
borrow_named_field_class_from_container_field_class_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,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_STRUCTURE,
"Field class");
return (void *)
borrow_named_field_class_from_container_field_class_by_name(
BT_ASSERT_PRE_NON_NULL(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_ASSERT_PRE_FC_HAS_TYPE(selector_fc,
BT_FIELD_CLASS_TYPE_BOOL,
"Selector field class");
opt_with_sel_fc = (void *) g_new0(
struct bt_trace_class *trace_class,
struct bt_field_class *content_fc)
{
+ BT_ASSERT_PRE_NO_ERROR();
+
return create_option_field_class(trace_class,
BT_FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR_FIELD,
content_fc, NULL);
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);
+ BT_ASSERT_PRE_NO_ERROR();
- if (!fc) {
- goto end;
- }
-
-end:
- return (void *) fc;
+ return create_option_field_class(trace_class,
+ BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD,
+ content_fc, selector_fc);
}
struct bt_field_class *
const struct bt_integer_range_set *range_set =
(const void *) u_range_set;
+ BT_ASSERT_PRE_NO_ERROR();
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);
const struct bt_integer_range_set *range_set =
(const void *) i_range_set;
+ BT_ASSERT_PRE_NO_ERROR();
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);
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_ASSERT_PRE_FC_HAS_TYPE(fc,
BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD, "Field class");
BT_ASSERT_PRE_DEV_FC_HOT(fc, "Field class");
opt_fc->sel_is_reversed = 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_ASSERT_PRE_FC_HAS_TYPE(fc,
BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD, "Field class");
return opt_fc->sel_is_reversed;
}
struct bt_field_class_variant_with_selector_field *var_with_sel_fc = NULL;
enum bt_field_class_type fc_type;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class");
if (selector_fc) {
goto error;
}
- if (selector_fc->type == BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER ||
- selector_fc->type == BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION) {
+ if (bt_field_class_type_is(selector_fc->type,
+ BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER)) {
fc_type = BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD;
} else {
fc_type = BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD;
enum bt_field_class_variant_without_selector_append_option_status status;
struct bt_named_field_class *named_fc = NULL;
+ BT_ASSERT_PRE_NO_ERROR();
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_ASSERT_PRE_FC_HAS_TYPE(fc,
BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR_FIELD, "Field class");
named_fc = create_named_field_class(name, option_fc);
if (!named_fc) {
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_FC_HAS_TYPE(fc, expected_type, "Field class");
BT_ASSERT_PRE(range_set->ranges->len > 0,
"Integer range set is empty: %!+R", range_set);
status = ranges_overlap(var_fc->common.common.named_fcs, range_set,
struct bt_field_class *option_fc,
const struct bt_integer_range_set_unsigned *range_set)
{
+ BT_ASSERT_PRE_NO_ERROR();
+
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);
struct bt_field_class *option_fc,
const struct bt_integer_range_set_signed *range_set)
{
+ BT_ASSERT_PRE_NO_ERROR();
+
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);
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_HAS_TYPE(fc,
BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD,
"Field class");
return (const void *)
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_HAS_TYPE(fc,
BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD,
"Field class");
return (const void *)
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_HAS_TYPE(fc,
BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD,
"Field class");
return (const void *)
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_HAS_TYPE(fc,
BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD,
"Field class");
return (const void *)
{
struct bt_field_class_array_static *array_fc = NULL;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class");
BT_ASSERT_PRE_NON_NULL(element_fc, "Element field class");
BT_LOGD_STR("Creating default static array field class object.");
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_HAS_TYPE(fc, BT_FIELD_CLASS_TYPE_STATIC_ARRAY,
"Field class");
return (uint64_t) array_fc->length;
}
{
struct bt_field_class_array_dynamic *array_fc = NULL;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class");
BT_ASSERT_PRE_NON_NULL(element_fc, "Element field class");
BT_LOGD_STR("Creating default dynamic array field class object.");
{
const struct bt_field_class_array_dynamic *seq_fc = (const void *) fc;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_DEV_NON_NULL(fc, "Field class");
- BT_ASSERT_PRE_DEV_FC_HAS_ID(fc,
+ BT_ASSERT_PRE_DEV_FC_HAS_TYPE(fc,
BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD,
"Field class");
return seq_fc->length_field_path;
{
struct bt_field_class_string *string_fc = NULL;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(trace_class, "Trace class");
BT_LOGD_STR("Creating default string field class object.");
string_fc = g_new0(struct bt_field_class_string, 1);
bt_value_freeze(fc->user_attributes);
fc->frozen = true;
- switch (fc->type) {
- case BT_FIELD_CLASS_TYPE_STRUCTURE:
- case BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR_FIELD:
- case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD:
- case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD:
- {
+ if (fc->type == BT_FIELD_CLASS_TYPE_STRUCTURE ||
+ bt_field_class_type_is(fc->type,
+ BT_FIELD_CLASS_TYPE_VARIANT)) {
struct bt_field_class_named_field_class_container *container_fc =
(void *) fc;
uint64_t i;
bt_named_field_class_freeze(
container_fc->named_fcs->pdata[i]);
}
-
- break;
- }
- default:
- break;
}
}
"Field class is already part of a trace: %!+F", fc);
fc->part_of_trace_class = true;
- switch (fc->type) {
- case BT_FIELD_CLASS_TYPE_STRUCTURE:
- case BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR_FIELD:
- case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD:
- case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD:
- {
+ if (fc->type == BT_FIELD_CLASS_TYPE_STRUCTURE ||
+ bt_field_class_type_is(fc->type,
+ BT_FIELD_CLASS_TYPE_VARIANT)) {
struct bt_field_class_named_field_class_container *container_fc =
(void *) fc;
uint64_t i;
bt_field_class_make_part_of_trace_class(named_fc->fc);
}
-
- break;
- }
- case BT_FIELD_CLASS_TYPE_STATIC_ARRAY:
- case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD:
- case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD:
- {
+ } else if (bt_field_class_type_is(fc->type,
+ BT_FIELD_CLASS_TYPE_ARRAY)) {
struct bt_field_class_array *array_fc = (void *) fc;
bt_field_class_make_part_of_trace_class(array_fc->element_fc);
- break;
- }
- default:
- break;
}
}