X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Ftext%2Fpretty%2Fprint.c;h=5d03c5727744fb280be3adccaee84dbae095d5c5;hb=fabfe03472e26e997f9bfaec3fb075e6dbb029dd;hp=8474c43c1e2107dcb722ef0863ce43706e66191e;hpb=dd61c4ed0898feb412185cd9684faeade0e1ddeb;p=babeltrace.git diff --git a/src/plugins/text/pretty/print.c b/src/plugins/text/pretty/print.c index 8474c43c..5d03c572 100644 --- a/src/plugins/text/pretty/print.c +++ b/src/plugins/text/pretty/print.c @@ -552,7 +552,8 @@ int print_integer(struct pretty_component *pretty, bt_common_g_string_append(pretty->string, "0b"); _bt_safe_lshift(v.u, 64 - len); for (bitnr = 0; bitnr < len; bitnr++) { - bt_common_g_string_append_printf(pretty->string, "%u", (v.u & (1ULL << 63)) ? 1 : 0); + bt_common_g_string_append_c(pretty->string, + (v.u & (1ULL << 63)) ? '1' : '0'); _bt_safe_lshift(v.u, 1); } break; @@ -914,6 +915,35 @@ end: return ret; } +static +int print_option(struct pretty_component *pretty, + const bt_field *option, bool print_names) +{ + int ret = 0; + const bt_field *field = NULL; + + field = bt_field_option_borrow_field_const(option); + if (field) { + bt_common_g_string_append(pretty->string, "{ "); + pretty->depth++; + if (print_names) { + // TODO: find tag's name using field path + // print_field_name_equal(pretty, tag_choice); + } + ret = print_field(pretty, field, print_names); + if (ret != 0) { + goto end; + } + pretty->depth--; + bt_common_g_string_append(pretty->string, " }"); + } else { + bt_common_g_string_append(pretty->string, ""); + } + +end: + return ret; +} + static int print_variant(struct pretty_component *pretty, const bt_field *variant, bool print_names) @@ -948,14 +978,55 @@ int print_field(struct pretty_component *pretty, class_id = bt_field_get_class_type(field); switch (class_id) { + case BT_FIELD_CLASS_TYPE_BOOL: + { + bt_bool v; + const char *text; + + v = bt_field_bool_get_value(field); + if (pretty->use_colors) { + bt_common_g_string_append(pretty->string, COLOR_NUMBER_VALUE); + } + if (v) { + text = "true"; + } else { + text = "false"; + } + bt_common_g_string_append(pretty->string, text); + if (pretty->use_colors) { + bt_common_g_string_append(pretty->string, COLOR_RST); + } + return 0; + } + case BT_FIELD_CLASS_TYPE_BIT_ARRAY: + { + uint64_t v = bt_field_bit_array_get_value_as_integer(field); + + if (pretty->use_colors) { + bt_common_g_string_append(pretty->string, + COLOR_NUMBER_VALUE); + } + bt_common_g_string_append_printf(pretty->string, "0x%" PRIX64, + v); + if (pretty->use_colors) { + bt_common_g_string_append(pretty->string, COLOR_RST); + } + return 0; + } case BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER: case BT_FIELD_CLASS_TYPE_SIGNED_INTEGER: return print_integer(pretty, field); - case BT_FIELD_CLASS_TYPE_REAL: + case BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL: + case BT_FIELD_CLASS_TYPE_DOUBLE_PRECISION_REAL: { double v; - v = bt_field_real_get_value(field); + if (class_id == BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL) { + v = (float) bt_field_real_single_precision_get_value(field); + } else { + v = bt_field_real_double_precision_get_value(field); + } + if (pretty->use_colors) { bt_common_g_string_append(pretty->string, COLOR_NUMBER_VALUE); } @@ -988,9 +1059,14 @@ int print_field(struct pretty_component *pretty, } case BT_FIELD_CLASS_TYPE_STRUCTURE: return print_struct(pretty, field, print_names); + 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: + return print_option(pretty, field, print_names); 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: return print_variant(pretty, field, print_names); case BT_FIELD_CLASS_TYPE_STATIC_ARRAY: return print_array(pretty, field, print_names);