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(
+ if (fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR) {
+ const bt_field_class_variant_with_selector_integer_unsigned_option *spec_opt =
+ bt_field_class_variant_with_selector_integer_unsigned_borrow_option_by_index_const(
fc, index);
orig_ranges =
- bt_field_class_variant_with_selector_unsigned_option_borrow_ranges_const(
+ bt_field_class_variant_with_selector_integer_unsigned_option_borrow_ranges_const(
spec_opt);
is_signed = false;
- } else if (fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR) {
- const bt_field_class_variant_with_selector_signed_option *spec_opt =
- bt_field_class_variant_with_selector_signed_borrow_option_by_index_const(
+ } else if (fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR) {
+ const bt_field_class_variant_with_selector_integer_signed_option *spec_opt =
+ bt_field_class_variant_with_selector_integer_signed_borrow_option_by_index_const(
fc, index);
orig_ranges =
- bt_field_class_variant_with_selector_signed_option_borrow_ranges_const(
+ bt_field_class_variant_with_selector_integer_signed_option_borrow_ranges_const(
spec_opt);
is_signed = true;
}
case BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION:
type = "Signed enumeration";
break;
- case BT_FIELD_CLASS_TYPE_REAL:
- type = "Real";
+ case BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL:
+ type = "Single-precision real";
+ break;
+ case BT_FIELD_CLASS_TYPE_DOUBLE_PRECISION_REAL:
+ type = "Double-precision real";
break;
case BT_FIELD_CLASS_TYPE_STRING:
type = "String";
case BT_FIELD_CLASS_TYPE_STATIC_ARRAY:
type = "Static array";
break;
- case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY:
- type = "Dynamic array";
+ case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD:
+ type = "Dynamic array (no length field)";
+ break;
+ case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD:
+ type = "Dynamic array (with length field)";
+ break;
+ case BT_FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR:
+ type = "Option (no selector)";
break;
- case BT_FIELD_CLASS_TYPE_OPTION:
- type = "Option";
+ case BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR:
+ type = "Option (boolean selector)";
+ break;
+ case BT_FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR:
+ type = "Option (unsigned integer selector)";
+ break;
+ case BT_FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR:
+ type = "Option (signed integer selector)";
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)";
+ case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR:
+ type = "Variant (unsigned integer selector)";
break;
- case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR:
- type = "Variant (signed selector)";
+ case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR:
+ type = "Variant (signed integer selector)";
break;
default:
abort();
plural(mapping_count));
break;
}
- case BT_FIELD_CLASS_TYPE_REAL:
- if (bt_field_class_real_is_single_precision(fc)) {
- g_string_append(ctx->str, " (Single precision)");
- } else {
- g_string_append(ctx->str, " (Double precision)");
- }
-
- break;
case BT_FIELD_CLASS_TYPE_STRUCTURE:
{
uint64_t member_count =
break;
}
case BT_FIELD_CLASS_TYPE_STATIC_ARRAY:
- 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:
if (fc_type == BT_FIELD_CLASS_TYPE_STATIC_ARRAY) {
g_string_append(ctx->str, " (Length ");
write_uint_prop_value(ctx,
bt_field_class_array_static_get_length(fc));
g_string_append_c(ctx->str, ')');
- } else {
+ } else if (fc_type == BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD) {
const bt_field_path *length_field_path =
- bt_field_class_array_dynamic_borrow_length_field_path_const(
+ bt_field_class_array_dynamic_with_length_field_borrow_length_field_path_const(
fc);
- if (length_field_path) {
- g_string_append(ctx->str, " (Length field path ");
- write_field_path(ctx, length_field_path);
- g_string_append_c(ctx->str, ')');
- }
+ g_string_append(ctx->str, " (Length field path ");
+ write_field_path(ctx, length_field_path);
+ g_string_append_c(ctx->str, ')');
}
break;
- case BT_FIELD_CLASS_TYPE_OPTION:
+ 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:
{
const bt_field_path *selector_field_path =
- bt_field_class_option_borrow_selector_field_path_const(fc);
-
- 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, ')');
- }
+ bt_field_class_option_with_selector_borrow_selector_field_path_const(
+ fc);
+ g_string_append(ctx->str, " (Selector field path ");
+ write_field_path(ctx, selector_field_path);
+ g_string_append_c(ctx->str, ')');
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:
{
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 ||
- fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR) {
+ if (fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR ||
+ fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR) {
sel_field_path =
bt_field_class_variant_with_selector_borrow_selector_field_path_const(
fc);
break;
}
case BT_FIELD_CLASS_TYPE_STATIC_ARRAY:
- 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:
if (wrote_user_attrs) {
write_nl(ctx);
} else {
write_field_class(ctx,
bt_field_class_array_borrow_element_field_class_const(fc));
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:
+ {
+ const void *ranges = NULL;
+ bool selector_is_signed = false;
+
if (wrote_user_attrs) {
write_nl(ctx);
} else {
g_string_append(ctx->str, ":\n");
}
+ if (fc_type == BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR) {
+ write_bool_prop_line(ctx, "Selector is reversed",
+ bt_field_class_option_with_selector_bool_selector_is_reversed(fc));
+ } else if (fc_type == BT_FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR) {
+ ranges = bt_field_class_option_with_selector_integer_unsigned_borrow_selector_ranges_const(fc);
+ } else if (fc_type == BT_FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR) {
+ ranges = bt_field_class_option_with_selector_integer_signed_borrow_selector_ranges_const(fc);
+ selector_is_signed = true;
+ }
+
+ if (ranges) {
+ GArray *sorted_ranges = range_set_to_int_ranges(
+ ranges, selector_is_signed);
+ uint64_t i;
+
+ BT_ASSERT(sorted_ranges);
+ BT_ASSERT(sorted_ranges->len > 0);
+ write_prop_name_line(ctx, "Selector ranges");
+
+ for (i = 0; i < sorted_ranges->len; i++) {
+ write_sp(ctx);
+ write_int_range(ctx,
+ int_range_at(sorted_ranges, i),
+ selector_is_signed);
+ }
+
+ write_nl(ctx);
+ g_array_free(sorted_ranges, TRUE);
+ }
+
write_prop_name_line(ctx, "Content");
write_sp(ctx);
write_field_class(ctx,
bt_field_class_option_borrow_field_class_const(fc));
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:
{
uint64_t option_count =
bt_field_class_variant_get_option_count(fc);
* rewrite `sc`.
*/
write_trace_class(ctx, tc);
- write_nl(ctx);
/*
* Mark this trace class as written, as well as all
* classes, so we don't need to rewrite `ec`.
*/
write_stream_class(ctx, sc);
- write_nl(ctx);
/*
* Mark this stream class as written, as well as all its
}
write_event_class(ctx, ec);
- write_nl(ctx);
details_did_write_meta_object(ctx, tc, ec);
goto end;
}
break;
}
- case BT_FIELD_CLASS_TYPE_REAL:
+ case BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL:
+ write_sp(ctx);
+ write_float_prop_value(ctx, bt_field_real_single_precision_get_value(field));
+ break;
+ case BT_FIELD_CLASS_TYPE_DOUBLE_PRECISION_REAL:
write_sp(ctx);
- write_float_prop_value(ctx, bt_field_real_get_value(field));
+ write_float_prop_value(ctx, bt_field_real_double_precision_get_value(field));
break;
case BT_FIELD_CLASS_TYPE_STRING:
write_sp(ctx);
break;
}
case BT_FIELD_CLASS_TYPE_STATIC_ARRAY:
- 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:
{
uint64_t length = bt_field_array_get_length(field);
decr_indent(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:
{
const bt_field *content_field =
bt_field_option_borrow_field_const(field);
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:
write_field(ctx,
bt_field_variant_borrow_selected_option_field_const(
field), NULL);
goto end;
}
+ if (!ctx->details_comp->cfg.with_data) {
+ goto end;
+ }
+
+ if (ctx->str->len > 0) {
+ /*
+ * Output buffer contains metadata: separate blocks with
+ * newline.
+ */
+ write_nl(ctx);
+ }
+
/* Write time */
if (bt_stream_class_borrow_default_clock_class_const(sc)) {
write_time(ctx,
decr_indent(ctx);
end:
-
return ret;
}
goto end;
}
+ if (!ctx->details_comp->cfg.with_data) {
+ goto end;
+ }
+
+ if (ctx->str->len > 0) {
+ /*
+ * Output buffer contains metadata: separate blocks with
+ * newline.
+ */
+ write_nl(ctx);
+ }
+
/* Write time */
if (cc) {
const bt_clock_snapshot *cs;
const bt_clock_class *cc =
bt_stream_class_borrow_default_clock_class_const(sc);
+ if (!ctx->details_comp->cfg.with_data) {
+ goto end;
+ }
+
/* Write time */
if (cc) {
const bt_clock_snapshot *cs;
const bt_stream_class *sc = bt_stream_borrow_class_const(stream);
const bt_field *field;
+ if (!ctx->details_comp->cfg.with_data) {
+ goto end;
+ }
+
/* Write time */
if (bt_stream_class_packets_have_beginning_default_clock_snapshot(sc)) {
write_time(ctx,
}
/* Write field */
- g_string_append(ctx->str, ":\n");
- incr_indent(ctx);
field = bt_packet_borrow_context_field_const(packet);
if (field) {
+ g_string_append(ctx->str, ":\n");
+ incr_indent(ctx);
write_root_field(ctx, "Context", field);
+ decr_indent(ctx);
+ } else {
+ write_nl(ctx);
}
- decr_indent(ctx);
-
end:
return ret;
}
int write_discarded_events_message(struct details_write_ctx *ctx,
const bt_message *msg)
{
+ int ret = 0;
const bt_stream *stream = bt_message_discarded_events_borrow_stream_const(
msg);
const bt_stream_class *sc = bt_stream_borrow_class_const(stream);
const bt_clock_snapshot *end_cs = NULL;
uint64_t count;
+ if (!ctx->details_comp->cfg.with_data) {
+ goto end;
+ }
+
if (bt_stream_class_discarded_events_have_default_clock_snapshots(sc)) {
beginning_cs =
bt_message_discarded_events_borrow_beginning_default_clock_snapshot_const(
count = UINT64_C(-1);
}
- return write_discarded_items_message(ctx, "events", stream,
+ ret = write_discarded_items_message(ctx, "events", stream,
beginning_cs, end_cs, count);
+
+end:
+ return ret;
}
static
int write_discarded_packets_message(struct details_write_ctx *ctx,
const bt_message *msg)
{
+ int ret = 0;
const bt_stream *stream = bt_message_discarded_packets_borrow_stream_const(
msg);
const bt_stream_class *sc = bt_stream_borrow_class_const(stream);
const bt_clock_snapshot *end_cs = NULL;
uint64_t count;
+ if (!ctx->details_comp->cfg.with_data) {
+ goto end;
+ }
+
if (bt_stream_class_discarded_packets_have_default_clock_snapshots(sc)) {
beginning_cs =
bt_message_discarded_packets_borrow_beginning_default_clock_snapshot_const(
count = UINT64_C(-1);
}
- return write_discarded_items_message(ctx, "packets", stream,
+ ret = write_discarded_items_message(ctx, "packets", stream,
beginning_cs, end_cs, count);
+
+end:
+ return ret;
}
static
const bt_stream *stream = bt_packet_borrow_stream_const(packet);
const bt_stream_class *sc = bt_stream_borrow_class_const(stream);
+ if (!ctx->details_comp->cfg.with_data) {
+ goto end;
+ }
+
/* Write time */
if (bt_stream_class_packets_have_end_default_clock_snapshot(sc)) {
write_time(ctx,
/* Reset output buffer */
g_string_assign(details_comp->str, "");
- if (details_comp->printed_something && !details_comp->cfg.compact) {
- write_nl(&ctx);
- }
-
switch (bt_message_get_type(msg)) {
case BT_MESSAGE_TYPE_EVENT:
ret = write_event_message(&ctx, msg);
abort();
}
+ /*
+ * If this component printed at least one character so far, and
+ * we're not in compact mode, and there's something in the
+ * output buffer for this message, then prepend a newline to the
+ * output buffer to visually separate message blocks.
+ */
+ if (details_comp->printed_something && !details_comp->cfg.compact &&
+ details_comp->str->len > 0) {
+ /* TODO: Optimize this */
+ g_string_prepend_c(details_comp->str, '\n');
+ }
+
return ret;
}