digits view rule

This commit is contained in:
Ryan Fleury
2024-10-13 16:39:16 -07:00
parent 2a44f1df60
commit ff589d2e55
3 changed files with 19 additions and 12 deletions
@@ -1449,7 +1449,7 @@ ev_string_from_hresult_code(U32 code)
}
internal String8
ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, E_Eval eval)
ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, U32 min_digits, E_Eval eval)
{
String8 result = {0};
E_TypeKey type_key = e_type_unwrap(eval.type_key);
@@ -1466,7 +1466,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix,
case E_TypeKind_Handle:
{
result = str8_from_s64(arena, eval.value.s64, radix, 0, digit_group_separator);
result = str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator);
}break;
case E_TypeKind_HResult:
@@ -1478,7 +1478,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix,
U32 is_error = !!(hresult_value & (1ull<<31));
U32 error_code = (hresult_value);
U32 facility = (hresult_value & 0x7ff0000) >> 16;
String8 value_string = str8_from_s64(scratch.arena, eval.value.u64, radix, 0, digit_group_separator);
String8 value_string = str8_from_s64(scratch.arena, eval.value.u64, radix, min_digits, digit_group_separator);
String8 facility_string = ev_string_from_hresult_facility_code(facility);
String8 error_string = ev_string_from_hresult_code(error_code);
result = push_str8f(arena, "%S%s%s%S%s%s%S%s",
@@ -1494,7 +1494,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix,
}
else
{
result = str8_from_s64(arena, eval.value.u64, radix, 0, digit_group_separator);
result = str8_from_s64(arena, eval.value.u64, radix, min_digits, digit_group_separator);
}
}break;
@@ -1510,7 +1510,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix,
{
if(flags & EV_StringFlag_ReadOnlyDisplayRules)
{
String8 imm_string = str8_from_s64(arena, eval.value.s64, radix, 0, digit_group_separator);
String8 imm_string = str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator);
result = push_str8f(arena, "'%S' (%S)", char_str, imm_string);
}
else
@@ -1520,7 +1520,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix,
}
else
{
result = str8_from_s64(arena, eval.value.s64, radix, 0, digit_group_separator);
result = str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator);
}
}break;
@@ -1529,7 +1529,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix,
case E_TypeKind_S32:
case E_TypeKind_S64:
{
result = str8_from_s64(arena, eval.value.s64, radix, 0, digit_group_separator);
result = str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator);
}break;
case E_TypeKind_U8:
@@ -1537,13 +1537,12 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix,
case E_TypeKind_U32:
case E_TypeKind_U64:
{
result = str8_from_u64(arena, eval.value.u64, radix, 0, digit_group_separator);
result = str8_from_u64(arena, eval.value.u64, radix, min_digits, digit_group_separator);
}break;
case E_TypeKind_U128:
{
Temp scratch = scratch_begin(&arena, 1);
U64 min_digits = (radix == 16) ? type_byte_size*2 : 0;
String8 upper64 = str8_from_u64(scratch.arena, eval.value.u128.u64[0], radix, min_digits, digit_group_separator);
String8 lower64 = str8_from_u64(scratch.arena, eval.value.u128.u64[1], radix, min_digits, digit_group_separator);
result = push_str8f(arena, "%S:%S", upper64, lower64);
@@ -443,7 +443,7 @@ internal B32 ev_row_is_editable(EV_Row *row);
internal String8 ev_string_from_ascii_value(Arena *arena, U8 val);
internal String8 ev_string_from_hresult_facility_code(U32 code);
internal String8 ev_string_from_hresult_code(U32 code);
internal String8 ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, E_Eval eval);
internal String8 ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, U32 min_digits, E_Eval eval);
internal String8 ev_escaped_from_raw_string(Arena *arena, String8 raw);
#endif // EVAL_VISUALIZATION_CORE_H
+10 -2
View File
@@ -9189,6 +9189,7 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
//- rjf: unpack view rules
U32 radix = default_radix;
U32 min_digits = 0;
B32 no_addr = 0;
B32 has_array = 0;
for(EV_ViewRuleNode *n = view_rules->first; n != 0; n = n->next)
@@ -9200,6 +9201,13 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
else if(str8_match(n->v.root->string, str8_lit("oct"), 0)) {radix = 8; }
else if(str8_match(n->v.root->string, str8_lit("no_addr"), 0)) {no_addr = 1;}
else if(str8_match(n->v.root->string, str8_lit("array"), 0)) {has_array = 1;}
else if(str8_match(n->v.root->string, str8_lit("digits"), 0))
{
String8 expr = md_string_from_children(scratch.arena, n->v.root);
E_Eval eval = e_eval_from_string(scratch.arena, expr);
E_Eval value_eval = e_value_eval_from_eval(eval);
min_digits = (U32)value_eval.value.u64;
}
}
if(eval.space.kind == RD_EvalSpaceKind_MetaEntity ||
eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity)
@@ -9244,7 +9252,7 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
default:
{
E_Eval value_eval = e_value_eval_from_eval(eval);
String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, value_eval);
String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, min_digits, value_eval);
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
str8_list_push(arena, out, string);
}break;
@@ -9359,7 +9367,7 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, ptr_prefix).x;
str8_list_push(arena, out, ptr_prefix);
}
String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, value_eval);
String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, min_digits, value_eval);
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
str8_list_push(arena, out, string);
if(did_content)