lib: have dedicated "dynamic array FC with/without length field" types
[babeltrace.git] / src / plugins / ctf / fs-sink / translate-trace-ir-to-ctf-ir.c
index 96455e7014ba7a4e76fd37b30f5f71ef08edbde8..ce38ef64528572ec9aee095160324952ec740ab5 100644 (file)
@@ -370,8 +370,8 @@ int create_relative_field_ref(struct ctx *ctx,
        /* Find target field class having this name in current context */
        for (si = ctx->cur_path->len - 1; si >= 0; si--) {
                struct fs_sink_ctf_field_class *fc;
-               struct fs_sink_ctf_field_class_struct *struct_fc;
-               struct fs_sink_ctf_field_class_variant *var_fc;
+               struct fs_sink_ctf_field_class_struct *struct_fc = NULL;
+               struct fs_sink_ctf_field_class_variant *var_fc = NULL;
                struct fs_sink_ctf_named_field_class *named_fc;
                uint64_t len;
 
@@ -833,26 +833,26 @@ int maybe_protect_variant_option_name(const bt_field_class *ir_var_fc,
        if (ir_var_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR) {
                /* No ranges: we're done */
                goto end;
-       } if (ir_var_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR) {
-               const bt_field_class_variant_with_selector_unsigned_option *var_opt =
-                       bt_field_class_variant_with_selector_unsigned_borrow_option_by_index_const(
+       } if (ir_var_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR) {
+               const bt_field_class_variant_with_selector_integer_unsigned_option *var_opt =
+                       bt_field_class_variant_with_selector_integer_unsigned_borrow_option_by_index_const(
                                ir_var_fc, opt_i);
                opt_ranges =
-                       bt_field_class_variant_with_selector_unsigned_option_borrow_ranges_const(
+                       bt_field_class_variant_with_selector_integer_unsigned_option_borrow_ranges_const(
                                var_opt);
        } else {
-               const bt_field_class_variant_with_selector_signed_option *var_opt =
-                       bt_field_class_variant_with_selector_signed_borrow_option_by_index_const(
+               const bt_field_class_variant_with_selector_integer_signed_option *var_opt =
+                       bt_field_class_variant_with_selector_integer_signed_borrow_option_by_index_const(
                                ir_var_fc, opt_i);
                opt_ranges =
-                       bt_field_class_variant_with_selector_signed_option_borrow_ranges_const(
+                       bt_field_class_variant_with_selector_integer_signed_option_borrow_ranges_const(
                                var_opt);
        }
 
        /* Find corresponding mapping by range set in selector FC */
        for (i = 0; i < bt_field_class_enumeration_get_mapping_count(ir_tag_fc);
                        i++) {
-               if (ir_var_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR) {
+               if (ir_var_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR) {
                        const bt_field_class_enumeration_mapping *mapping_base;
                        const bt_field_class_enumeration_unsigned_mapping *mapping;
                        const bt_integer_range_set_unsigned *mapping_ranges;
@@ -862,7 +862,7 @@ int maybe_protect_variant_option_name(const bt_field_class *ir_var_fc,
                        mapping_ranges = bt_field_class_enumeration_unsigned_mapping_borrow_ranges_const(
                                mapping);
 
-                       if (bt_integer_range_set_unsigned_compare(opt_ranges,
+                       if (bt_integer_range_set_unsigned_is_equal(opt_ranges,
                                        mapping_ranges)) {
                                /* We have a winner */
                                mapping_base =
@@ -883,7 +883,7 @@ int maybe_protect_variant_option_name(const bt_field_class *ir_var_fc,
                        mapping_ranges = bt_field_class_enumeration_signed_mapping_borrow_ranges_const(
                                mapping);
 
-                       if (bt_integer_range_set_signed_compare(opt_ranges,
+                       if (bt_integer_range_set_signed_is_equal(opt_ranges,
                                        mapping_ranges)) {
                                /* We have a winner */
                                mapping_base =
@@ -999,8 +999,8 @@ int translate_variant_field_class(struct ctx *ctx)
        ir_fc_type = bt_field_class_get_type(fc->base.ir_fc);
        opt_count = bt_field_class_variant_get_option_count(fc->base.ir_fc);
 
-       if (ir_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR ||
-                       ir_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR) {
+       if (ir_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR ||
+                       ir_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR) {
                ir_selector_field_path = bt_field_class_variant_with_selector_borrow_selector_field_path_const(
                        fc->base.ir_fc);
                BT_ASSERT(ir_selector_field_path);
@@ -1092,7 +1092,7 @@ validate_opts:
                        opt_name_b =
                                bt_value_array_borrow_element_by_index_const(
                                        prot_opt_names, j);
-                       if (bt_value_compare(opt_name_a, opt_name_b)) {
+                       if (bt_value_is_equal(opt_name_a, opt_name_b)) {
                                /*
                                 * Variant FC option names are not
                                 * unique when protected.
@@ -1202,10 +1202,13 @@ int translate_dynamic_array_field_class(struct ctx *ctx)
        BT_ASSERT(fc);
 
        /* Resolve length field class before appending to parent */
-       resolve_field_class(ctx,
-               bt_field_class_array_dynamic_borrow_length_field_path_const(
-                       fc->base.base.ir_fc),
-               fc->length_ref, &fc->length_is_before, NULL);
+       if (bt_field_class_get_type(cur_path_stack_top(ctx)->ir_fc) ==
+                       BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD) {
+               resolve_field_class(ctx,
+                       bt_field_class_array_dynamic_with_length_field_borrow_length_field_path_const(
+                               fc->base.base.ir_fc),
+                       fc->length_ref, &fc->length_is_before, NULL);
+       }
 
        append_to_parent_field_class(ctx, (void *) fc);
        ret = cur_path_stack_push(ctx, UINT64_C(-1), NULL, false, elem_ir_fc,
@@ -1241,6 +1244,19 @@ int translate_bool_field_class(struct ctx *ctx)
        return 0;
 }
 
+static inline
+int translate_bit_array_field_class(struct ctx *ctx)
+{
+       struct fs_sink_ctf_field_class_bit_array *fc =
+               fs_sink_ctf_field_class_bit_array_create(
+                       cur_path_stack_top(ctx)->ir_fc,
+                       cur_path_stack_top(ctx)->index_in_parent);
+
+       BT_ASSERT(fc);
+       append_to_parent_field_class(ctx, (void *) fc);
+       return 0;
+}
+
 static inline
 int translate_integer_field_class(struct ctx *ctx)
 {
@@ -1296,13 +1312,17 @@ int translate_field_class(struct ctx *ctx)
        case BT_FIELD_CLASS_TYPE_BOOL:
                ret = translate_bool_field_class(ctx);
                break;
+       case BT_FIELD_CLASS_TYPE_BIT_ARRAY:
+               ret = translate_bit_array_field_class(ctx);
+               break;
        case BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER:
        case BT_FIELD_CLASS_TYPE_SIGNED_INTEGER:
        case BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION:
        case BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION:
                ret = translate_integer_field_class(ctx);
                break;
-       case BT_FIELD_CLASS_TYPE_REAL:
+       case BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL:
+       case BT_FIELD_CLASS_TYPE_DOUBLE_PRECISION_REAL:
                ret = translate_real_field_class(ctx);
                break;
        case BT_FIELD_CLASS_TYPE_STRING:
@@ -1314,15 +1334,19 @@ int translate_field_class(struct ctx *ctx)
        case BT_FIELD_CLASS_TYPE_STATIC_ARRAY:
                ret = translate_static_array_field_class(ctx);
                break;
-       case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY:
+       case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD:
+       case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD:
                ret = translate_dynamic_array_field_class(ctx);
                break;
-       case BT_FIELD_CLASS_TYPE_OPTION:
+       case BT_FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR:
+       case BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR:
+       case BT_FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR:
+       case BT_FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR:
                ret = translate_option_field_class(ctx);
                break;
        case BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR:
-       case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR:
-       case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR:
+       case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR:
+       case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR:
                ret = translate_variant_field_class(ctx);
                break;
        default:
@@ -1485,7 +1509,7 @@ int set_field_refs(struct fs_sink_ctf_field_class * const fc,
        {
                uint64_t i;
                uint64_t len;
-               struct fs_sink_ctf_field_class_struct *struct_fc;
+               struct fs_sink_ctf_field_class_struct *struct_fc = NULL;
                struct fs_sink_ctf_field_class_variant *var_fc = NULL;
                struct fs_sink_ctf_named_field_class *named_fc;
 
This page took 0.02711 seconds and 4 git commands to generate.