sink.text.details: print option field classes and fields
[babeltrace.git] / src / plugins / text / details / write.c
index 788416d89f72b648c1228bdf186c0441e7e26dd2..fa150b6abe6bfb54b438686d4aaf30bf6d1c1345 100644 (file)
@@ -230,6 +230,14 @@ void write_str_prop_value(struct details_write_ctx *ctx, const char *value)
                color_bold(ctx), value, color_reset(ctx));
 }
 
+static inline
+void write_none_prop_value(struct details_write_ctx *ctx, const char *value)
+{
+       g_string_append_printf(ctx->str, "%s%s%s%s",
+               color_bold(ctx), color_fg_magenta(ctx),
+               value, color_reset(ctx));
+}
+
 static inline
 void write_uint_str_prop_value(struct details_write_ctx *ctx, const char *value)
 {
@@ -302,14 +310,11 @@ void write_int_str_prop_value(struct details_write_ctx *ctx, const char *value)
 }
 
 static inline
-void write_bool_prop_line(struct details_write_ctx *ctx, const char *prop_name,
-               bt_bool prop_value)
+void write_bool_prop_value(struct details_write_ctx *ctx, bt_bool prop_value)
 {
        const char *str;
 
-       write_indent(ctx);
-       write_prop_name(ctx, prop_name);
-       g_string_append_printf(ctx->str, ": %s", color_bold(ctx));
+       g_string_append(ctx->str, color_bold(ctx));
 
        if (prop_value) {
                g_string_append(ctx->str, color_fg_green(ctx));
@@ -319,7 +324,18 @@ void write_bool_prop_line(struct details_write_ctx *ctx, const char *prop_name,
                str = "No";
        }
 
-       g_string_append_printf(ctx->str, "%s%s\n", str, color_reset(ctx));
+       g_string_append_printf(ctx->str, "%s%s", str, color_reset(ctx));
+}
+
+static inline
+void write_bool_prop_line(struct details_write_ctx *ctx, const char *prop_name,
+               bt_bool prop_value)
+{
+       write_indent(ctx);
+       write_prop_name(ctx, prop_name);
+       g_string_append(ctx->str, ": ");
+       write_bool_prop_value(ctx, prop_value);
+       write_nl(ctx);
 }
 
 static inline
@@ -367,7 +383,7 @@ void write_int_field_class_props(struct details_write_ctx *ctx,
        }
 }
 
-struct enum_field_class_mapping_range {
+struct int_range {
        union {
                uint64_t u;
                int64_t i;
@@ -383,7 +399,7 @@ struct enum_field_class_mapping {
        /* Weak */
        const char *label;
 
-       /* Array of `struct enum_field_class_mapping_range` */
+       /* Array of `struct int_range` */
        GArray *ranges;
 };
 
@@ -395,9 +411,7 @@ gint compare_enum_field_class_mappings(struct enum_field_class_mapping **a,
 }
 
 static
-gint compare_enum_field_class_mapping_ranges_signed(
-               struct enum_field_class_mapping_range *a,
-               struct enum_field_class_mapping_range *b)
+gint compare_int_ranges_signed(struct int_range *a, struct int_range *b)
 {
 
        if (a->lower.i < b->lower.i) {
@@ -416,9 +430,7 @@ gint compare_enum_field_class_mapping_ranges_signed(
 }
 
 static
-gint compare_enum_field_class_mapping_ranges_unsigned(
-               struct enum_field_class_mapping_range *a,
-               struct enum_field_class_mapping_range *b)
+gint compare_int_ranges_unsigned(struct int_range *a, struct int_range *b)
 {
        if (a->lower.u < b->lower.u) {
                return -1;
@@ -435,6 +447,58 @@ gint compare_enum_field_class_mapping_ranges_unsigned(
        }
 }
 
+static
+GArray *range_set_to_int_ranges(const void *spec_range_set, bool is_signed)
+{
+       uint64_t i;
+       const bt_integer_range_set *range_set;
+       GArray *ranges = g_array_new(FALSE, TRUE, sizeof(struct int_range));
+
+       if (!ranges) {
+               goto end;
+       }
+
+       if (is_signed) {
+               range_set = bt_integer_range_set_signed_as_range_set_const(
+                       spec_range_set);
+       } else {
+               range_set = bt_integer_range_set_unsigned_as_range_set_const(
+                       spec_range_set);
+       }
+
+       for (i = 0; i < bt_integer_range_set_get_range_count(range_set); i++) {
+               struct int_range range;
+
+               if (is_signed) {
+                       const bt_integer_range_signed *orig_range =
+                               bt_integer_range_set_signed_borrow_range_by_index_const(
+                                       spec_range_set, i);
+
+                       range.lower.i = bt_integer_range_signed_get_lower(orig_range);
+                       range.upper.i = bt_integer_range_signed_get_upper(orig_range);
+               } else {
+                       const bt_integer_range_unsigned *orig_range =
+                               bt_integer_range_set_unsigned_borrow_range_by_index_const(
+                                       spec_range_set, i);
+
+                       range.lower.u = bt_integer_range_unsigned_get_lower(orig_range);
+                       range.upper.u = bt_integer_range_unsigned_get_upper(orig_range);
+               }
+
+               g_array_append_val(ranges, range);
+       }
+
+       if (is_signed) {
+               g_array_sort(ranges, (GCompareFunc) compare_int_ranges_signed);
+       } else {
+               g_array_sort(ranges,
+                       (GCompareFunc) compare_int_ranges_unsigned);
+       }
+
+end:
+       return ranges;
+}
+
 static
 void destroy_enum_field_class_mapping(struct enum_field_class_mapping *mapping)
 {
@@ -447,8 +511,14 @@ void destroy_enum_field_class_mapping(struct enum_field_class_mapping *mapping)
 }
 
 static
-void write_enum_field_class_mapping_range(struct details_write_ctx *ctx,
-               struct enum_field_class_mapping_range *range, bool is_signed)
+struct int_range *int_range_at(GArray *ranges, uint64_t index)
+{
+       return &g_array_index(ranges, struct int_range, index);
+}
+
+static
+void write_int_range(struct details_write_ctx *ctx,
+               struct int_range *range, bool is_signed)
 {
        g_string_append(ctx->str, "[");
 
@@ -458,12 +528,14 @@ void write_enum_field_class_mapping_range(struct details_write_ctx *ctx,
                write_int_prop_value(ctx, range->lower.u);
        }
 
-       g_string_append(ctx->str, ", ");
+       if (range->lower.u != range->upper.u) {
+               g_string_append(ctx->str, ", ");
 
-       if (is_signed) {
-               write_int_prop_value(ctx, range->upper.i);
-       } else {
-               write_int_prop_value(ctx, range->upper.u);
+               if (is_signed) {
+                       write_int_prop_value(ctx, range->upper.i);
+               } else {
+                       write_int_prop_value(ctx, range->upper.u);
+               }
        }
 
        g_string_append(ctx->str, "]");
@@ -489,66 +561,37 @@ void write_enum_field_class_mappings(struct details_write_ctx *ctx,
         */
        for (i = 0; i < bt_field_class_enumeration_get_mapping_count(fc); i++) {
                const void *fc_mapping;
+               const void *fc_range_set;
                struct enum_field_class_mapping *mapping = g_new0(
                        struct enum_field_class_mapping, 1);
 
                BT_ASSERT(mapping);
-               mapping->ranges = g_array_new(FALSE, TRUE,
-                       sizeof(struct enum_field_class_mapping_range));
-               BT_ASSERT(mapping->ranges);
 
                if (is_signed) {
-                       fc_mapping = bt_field_class_signed_enumeration_borrow_mapping_by_index_const(
+                       fc_mapping = bt_field_class_enumeration_signed_borrow_mapping_by_index_const(
                                fc, i);
+                       fc_range_set = bt_field_class_enumeration_signed_mapping_borrow_ranges_const(
+                               fc_mapping);
                } else {
-                       fc_mapping = bt_field_class_unsigned_enumeration_borrow_mapping_by_index_const(
+                       fc_mapping = bt_field_class_enumeration_unsigned_borrow_mapping_by_index_const(
                                fc, i);
+                       fc_range_set = bt_field_class_enumeration_unsigned_mapping_borrow_ranges_const(
+                               fc_mapping);
                }
 
                mapping->label = bt_field_class_enumeration_mapping_get_label(
-                       bt_field_class_signed_enumeration_mapping_as_mapping_const(
+                       bt_field_class_enumeration_signed_mapping_as_mapping_const(
                                fc_mapping));
-
-               for (range_i = 0;
-                               range_i < bt_field_class_enumeration_mapping_get_range_count(
-                                       bt_field_class_signed_enumeration_mapping_as_mapping_const(fc_mapping));
-                               range_i++) {
-                       struct enum_field_class_mapping_range range;
-
-                       if (is_signed) {
-                               bt_field_class_signed_enumeration_mapping_get_range_by_index(
-                                       fc_mapping, range_i,
-                                       &range.lower.i, &range.upper.i);
-                       } else {
-                               bt_field_class_unsigned_enumeration_mapping_get_range_by_index(
-                                       fc_mapping, range_i,
-                                       &range.lower.u, &range.upper.u);
-                       }
-
-                       g_array_append_val(mapping->ranges, range);
-               }
-
+               mapping->ranges = range_set_to_int_ranges(fc_range_set,
+                       is_signed);
+               BT_ASSERT(mapping->ranges);
                g_ptr_array_add(mappings, mapping);
        }
 
-       /* Sort mappings, and for each mapping, sort ranges */
+       /* Sort mappings (ranges are already sorted within mappings) */
        g_ptr_array_sort(mappings,
                (GCompareFunc) compare_enum_field_class_mappings);
 
-       for (i = 0; i < mappings->len; i++) {
-               struct enum_field_class_mapping *mapping = mappings->pdata[i];
-
-               if (is_signed) {
-                       g_array_sort(mapping->ranges,
-                               (GCompareFunc)
-                                       compare_enum_field_class_mapping_ranges_signed);
-               } else {
-                       g_array_sort(mapping->ranges,
-                               (GCompareFunc)
-                                       compare_enum_field_class_mapping_ranges_unsigned);
-               }
-       }
-
        /* Write mappings */
        for (i = 0; i < mappings->len; i++) {
                struct enum_field_class_mapping *mapping = mappings->pdata[i];
@@ -556,28 +599,12 @@ void write_enum_field_class_mappings(struct details_write_ctx *ctx,
                write_nl(ctx);
                write_compound_member_name(ctx, mapping->label);
 
-               if (mapping->ranges->len == 1) {
-                       /* Single one: write on same line */
-                       write_sp(ctx);
-                       write_enum_field_class_mapping_range(ctx,
-                               &g_array_index(mapping->ranges,
-                                       struct enum_field_class_mapping_range,
-                                       0), is_signed);
-                       continue;
-               }
-
-               incr_indent(ctx);
-
                for (range_i = 0; range_i < mapping->ranges->len; range_i++) {
-                       write_nl(ctx);
-                       write_indent(ctx);
-                       write_enum_field_class_mapping_range(ctx,
-                               &g_array_index(mapping->ranges,
-                                       struct enum_field_class_mapping_range,
-                                       range_i), is_signed);
+                       write_sp(ctx);
+                       write_int_range(ctx,
+                               int_range_at(mapping->ranges, range_i),
+                               is_signed);
                }
-
-               decr_indent(ctx);
        }
 
        g_ptr_array_free(mappings, TRUE);
@@ -592,16 +619,16 @@ void write_field_path(struct details_write_ctx *ctx,
        g_string_append_c(ctx->str, '[');
 
        switch (bt_field_path_get_root_scope(field_path)) {
-       case BT_SCOPE_PACKET_CONTEXT:
+       case BT_FIELD_PATH_SCOPE_PACKET_CONTEXT:
                write_str_prop_value(ctx, "Packet context");
                break;
-       case BT_SCOPE_EVENT_COMMON_CONTEXT:
+       case BT_FIELD_PATH_SCOPE_EVENT_COMMON_CONTEXT:
                write_str_prop_value(ctx, "Event common context");
                break;
-       case BT_SCOPE_EVENT_SPECIFIC_CONTEXT:
+       case BT_FIELD_PATH_SCOPE_EVENT_SPECIFIC_CONTEXT:
                write_str_prop_value(ctx, "Event specific context");
                break;
-       case BT_SCOPE_EVENT_PAYLOAD:
+       case BT_FIELD_PATH_SCOPE_EVENT_PAYLOAD:
                write_str_prop_value(ctx, "Event payload");
                break;
        default:
@@ -635,21 +662,124 @@ void write_field_path(struct details_write_ctx *ctx,
 }
 
 static
-void write_field_class(struct details_write_ctx *ctx, const bt_field_class *fc,
-               const char *name)
+void write_field_class(struct details_write_ctx *ctx, const bt_field_class *fc);
+
+static
+void write_variant_field_class_option(struct details_write_ctx *ctx,
+               const bt_field_class *fc, uint64_t index)
 {
-       uint64_t i;
-       const char *type;
        bt_field_class_type fc_type = bt_field_class_get_type(fc);
+       const bt_field_class_variant_option *option =
+               bt_field_class_variant_borrow_option_by_index_const(
+                       fc, index);
+       const void *orig_ranges;
+       GArray *int_ranges = NULL;
+       bool is_signed;
 
-       /* Write field class's name */
-       if (name) {
-               write_compound_member_name(ctx, name);
+       write_nl(ctx);
+       write_compound_member_name(ctx,
+               bt_field_class_variant_option_get_name(option));
+
+       if (fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR) {
+               const bt_field_class_variant_with_selector_unsigned_option *spec_opt =
+                       bt_field_class_variant_with_selector_unsigned_borrow_option_by_index_const(
+                               fc, index);
+
+               orig_ranges =
+                       bt_field_class_variant_with_selector_unsigned_option_borrow_ranges_const(
+                               spec_opt);
+               is_signed = false;
+       } else {
+               const bt_field_class_variant_with_selector_signed_option *spec_opt =
+                       bt_field_class_variant_with_selector_signed_borrow_option_by_index_const(
+                               fc, index);
+
+               orig_ranges =
+                       bt_field_class_variant_with_selector_signed_option_borrow_ranges_const(
+                               spec_opt);
+               is_signed = true;
+       }
+
+       if (orig_ranges) {
+               uint64_t i;
+
+               int_ranges = range_set_to_int_ranges(orig_ranges, is_signed);
+               BT_ASSERT(int_ranges);
+
+               for (i = 0; i < int_ranges->len; i++) {
+                       struct int_range *range = int_range_at(int_ranges, i);
+
+                       write_sp(ctx);
+                       write_int_range(ctx, range, is_signed);
+               }
+
+               g_string_append(ctx->str, ": ");
+       } else {
                write_sp(ctx);
        }
 
+       write_field_class(ctx,
+               bt_field_class_variant_option_borrow_field_class_const(option));
+
+       if (int_ranges) {
+               g_array_free(int_ranges, TRUE);
+       }
+}
+
+static
+void write_variant_field_class(struct details_write_ctx *ctx,
+               const bt_field_class *fc)
+{
+       bt_field_class_type fc_type = bt_field_class_get_type(fc);
+       uint64_t option_count =
+               bt_field_class_variant_get_option_count(fc);
+       const bt_field_path *sel_field_path = NULL;
+
+       if (fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR) {
+               sel_field_path =
+                       bt_field_class_variant_with_selector_borrow_selector_field_path_const(
+                               fc);
+               BT_ASSERT(sel_field_path);
+       }
+
+       g_string_append(ctx->str, " (");
+       write_uint_prop_value(ctx, option_count);
+       g_string_append_printf(ctx->str, " option%s, ",
+               plural(option_count));
+
+       if (sel_field_path) {
+               g_string_append(ctx->str, "Selector field path ");
+               write_field_path(ctx, sel_field_path);
+       }
+
+       g_string_append_c(ctx->str, ')');
+
+       if (option_count > 0) {
+               uint64_t i;
+
+               g_string_append_c(ctx->str, ':');
+               incr_indent(ctx);
+
+               for (i = 0; i < option_count; i++) {
+                       write_variant_field_class_option(ctx, fc, i);
+               }
+
+               decr_indent(ctx);
+       }
+}
+
+static
+void write_field_class(struct details_write_ctx *ctx, const bt_field_class *fc)
+{
+       uint64_t i;
+       const char *type;
+       bt_field_class_type fc_type = bt_field_class_get_type(fc);
+
        /* Write field class's type */
        switch (fc_type) {
+       case BT_FIELD_CLASS_TYPE_BOOL:
+               type = "Boolean";
+               break;
        case BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER:
                type = "Unsigned integer";
                break;
@@ -677,8 +807,17 @@ void write_field_class(struct details_write_ctx *ctx, const bt_field_class *fc,
        case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY:
                type = "Dynamic array";
                break;
-       case BT_FIELD_CLASS_TYPE_VARIANT:
-               type = "Variant";
+       case BT_FIELD_CLASS_TYPE_OPTION:
+               type = "Option";
+               break;
+       case BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR:
+               type = "Variant (no selector)";
+               break;
+       case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR:
+               type = "Variant (unsigned selector)";
+               break;
+       case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR:
+               type = "Variant (signed selector)";
                break;
        default:
                abort();
@@ -744,9 +883,11 @@ void write_field_class(struct details_write_ctx *ctx, const bt_field_class *fc,
                                                fc, i);
 
                                write_nl(ctx);
-                               write_field_class(ctx,
-                                       bt_field_class_structure_member_borrow_field_class_const(member),
+                               write_compound_member_name(ctx,
                                        bt_field_class_structure_member_get_name(member));
+                               write_sp(ctx);
+                               write_field_class(ctx,
+                                       bt_field_class_structure_member_borrow_field_class_const(member));
                        }
 
                        decr_indent(ctx);
@@ -759,11 +900,11 @@ void write_field_class(struct details_write_ctx *ctx, const bt_field_class *fc,
                if (fc_type == BT_FIELD_CLASS_TYPE_STATIC_ARRAY) {
                        g_string_append(ctx->str, " (Length ");
                        write_uint_prop_value(ctx,
-                               bt_field_class_static_array_get_length(fc));
+                               bt_field_class_array_static_get_length(fc));
                        g_string_append_c(ctx->str, ')');
                } else {
                        const bt_field_path *length_field_path =
-                               bt_field_class_dynamic_array_borrow_length_field_path_const(
+                               bt_field_class_array_dynamic_borrow_length_field_path_const(
                                        fc);
 
                        if (length_field_path) {
@@ -776,51 +917,38 @@ void write_field_class(struct details_write_ctx *ctx, const bt_field_class *fc,
                g_string_append_c(ctx->str, ':');
                write_nl(ctx);
                incr_indent(ctx);
+               write_compound_member_name(ctx, "Element");
+               write_sp(ctx);
                write_field_class(ctx,
-                       bt_field_class_array_borrow_element_field_class_const(fc),
-                       "Element");
+                       bt_field_class_array_borrow_element_field_class_const(fc));
                decr_indent(ctx);
                break;
-       case BT_FIELD_CLASS_TYPE_VARIANT:
+       case BT_FIELD_CLASS_TYPE_OPTION:
        {
-               uint64_t option_count =
-                       bt_field_class_variant_get_option_count(fc);
-               const bt_field_path *sel_field_path =
-                       bt_field_class_variant_borrow_selector_field_path_const(
-                               fc);
-
-               g_string_append(ctx->str, " (");
-               write_uint_prop_value(ctx, option_count);
-               g_string_append_printf(ctx->str, " option%s, ",
-                       plural(option_count));
-
-               if (sel_field_path) {
-                       g_string_append(ctx->str, "Selector field path ");
-                       write_field_path(ctx, sel_field_path);
-               }
-
-               g_string_append_c(ctx->str, ')');
-
-               if (option_count > 0) {
-                       g_string_append_c(ctx->str, ':');
-                       incr_indent(ctx);
-
-                       for (i = 0; i < option_count; i++) {
-                               const bt_field_class_variant_option *option =
-                                       bt_field_class_variant_borrow_option_by_index_const(
-                                               fc, i);
+               const bt_field_path *selector_field_path =
+                       bt_field_class_option_borrow_selector_field_path_const(fc);
 
-                               write_nl(ctx);
-                               write_field_class(ctx,
-                                       bt_field_class_variant_option_borrow_field_class_const(option),
-                                       bt_field_class_variant_option_get_name(option));
-                       }
-
-                       decr_indent(ctx);
+               if (selector_field_path) {
+                       g_string_append(ctx->str, " (Selector field path ");
+                       write_field_path(ctx, selector_field_path);
+                       g_string_append_c(ctx->str, ')');
                }
 
+               g_string_append_c(ctx->str, ':');
+               write_nl(ctx);
+               incr_indent(ctx);
+               write_compound_member_name(ctx, "Content");
+               write_sp(ctx);
+               write_field_class(ctx,
+                       bt_field_class_option_borrow_field_class_const(fc));
+               decr_indent(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:
+               write_variant_field_class(ctx, fc);
+               break;
        default:
                break;
        }
@@ -835,7 +963,7 @@ void write_root_field_class(struct details_write_ctx *ctx, const char *name,
        write_indent(ctx);
        write_prop_name(ctx, name);
        g_string_append(ctx->str, ": ");
-       write_field_class(ctx, fc, NULL);
+       write_field_class(ctx, fc);
        write_nl(ctx);
 }
 
@@ -1025,23 +1153,36 @@ void write_stream_class(struct details_write_ctx *ctx,
 
        /* Write configuration */
        write_bool_prop_line(ctx,
-               "Packets have beginning default clock snapshot",
-               bt_stream_class_packets_have_beginning_default_clock_snapshot(sc));
-       write_bool_prop_line(ctx,
-               "Packets have end default clock snapshot",
-               bt_stream_class_packets_have_end_default_clock_snapshot(sc));
+               "Supports packets", bt_stream_class_supports_packets(sc));
+
+       if (bt_stream_class_supports_packets(sc)) {
+               write_bool_prop_line(ctx,
+                       "Packets have beginning default clock snapshot",
+                       bt_stream_class_packets_have_beginning_default_clock_snapshot(sc));
+               write_bool_prop_line(ctx,
+                       "Packets have end default clock snapshot",
+                       bt_stream_class_packets_have_end_default_clock_snapshot(sc));
+       }
+
        write_bool_prop_line(ctx,
                "Supports discarded events",
                bt_stream_class_supports_discarded_events(sc));
-       write_bool_prop_line(ctx,
-               "Discarded events have default clock snapshots",
-               bt_stream_class_discarded_events_have_default_clock_snapshots(sc));
+
+       if (bt_stream_class_supports_discarded_events(sc)) {
+               write_bool_prop_line(ctx,
+                       "Discarded events have default clock snapshots",
+                       bt_stream_class_discarded_events_have_default_clock_snapshots(sc));
+       }
+
        write_bool_prop_line(ctx,
                "Supports discarded packets",
                bt_stream_class_supports_discarded_packets(sc));
-       write_bool_prop_line(ctx,
-               "Discarded packets have default clock snapshots",
-               bt_stream_class_discarded_packets_have_default_clock_snapshots(sc));
+
+       if (bt_stream_class_supports_discarded_packets(sc)) {
+               write_bool_prop_line(ctx,
+                       "Discarded packets have default clock snapshots",
+                       bt_stream_class_discarded_packets_have_default_clock_snapshots(sc));
+       }
 
        /* Write default clock class */
        if (bt_stream_class_borrow_default_clock_class_const(sc)) {
@@ -1375,6 +1516,10 @@ void write_field(struct details_write_ctx *ctx, const bt_field *field,
 
        /* Write field's value */
        switch (fc_type) {
+       case BT_FIELD_CLASS_TYPE_BOOL:
+               write_sp(ctx);
+               write_bool_prop_value(ctx, bt_field_bool_get_value(field));
+               break;
        case BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER:
        case BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION:
        case BT_FIELD_CLASS_TYPE_SIGNED_INTEGER:
@@ -1406,13 +1551,13 @@ void write_field(struct details_write_ctx *ctx, const bt_field *field,
                if (fc_type == BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER ||
                                fc_type == BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION) {
                        format_uint(buf,
-                               bt_field_unsigned_integer_get_value(field),
+                               bt_field_integer_unsigned_get_value(field),
                                fmt_base);
                        write_sp(ctx);
                        write_uint_str_prop_value(ctx, buf);
                } else {
                        format_int(buf,
-                               bt_field_signed_integer_get_value(field),
+                               bt_field_integer_signed_get_value(field),
                                fmt_base);
                        write_sp(ctx);
                        write_int_str_prop_value(ctx, buf);
@@ -1486,7 +1631,23 @@ void write_field(struct details_write_ctx *ctx, const bt_field *field,
                decr_indent(ctx);
                break;
        }
-       case BT_FIELD_CLASS_TYPE_VARIANT:
+       case BT_FIELD_CLASS_TYPE_OPTION:
+       {
+               const bt_field *content_field =
+                       bt_field_option_borrow_field_const(field);
+
+               if (!content_field) {
+                       write_sp(ctx);
+                       write_none_prop_value(ctx, "None");
+               } else {
+                       write_field(ctx, content_field, NULL);
+               }
+
+               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:
                write_field(ctx,
                        bt_field_variant_borrow_selected_option_field_const(
                                field), NULL);
@@ -1694,7 +1855,7 @@ void write_trace(struct details_write_ctx *ctx, const bt_trace *trace)
                        if (bt_value_get_type(value) ==
                                        BT_VALUE_TYPE_SIGNED_INTEGER) {
                                write_int_prop_value(ctx,
-                                       bt_value_signed_integer_get(value));
+                                       bt_value_integer_signed_get(value));
                        } else if (bt_value_get_type(value) ==
                                        BT_VALUE_TYPE_STRING) {
                                write_str_prop_value(ctx,
This page took 0.033157 seconds and 4 git commands to generate.