This commit is contained in:
jacob 2025-02-24 09:02:06 -06:00
parent 2a93940bff
commit fca945736b
4 changed files with 18 additions and 7 deletions

View File

@ -43,7 +43,7 @@
</Type>
<Type Name = "uid">
<DisplayString>0x{hi, xb}{lo, xb}</DisplayString>
<DisplayString>[{(u32)(hi >> 32), xb}]{((u32)(hi &amp; 0xFFFFFFFF)), xb}{lo, xb}</DisplayString>
</Type>
<Type Name = "String">

View File

@ -175,6 +175,14 @@ struct string string_from_handle(struct arena *arena, u64 v0, u64 v1)
return res;
}
struct string string_from_uid(struct arena *arena, struct uid uid)
{
struct string res = ZI;
res.text = arena_dry_push(arena, u8);
res.len += string_from_uint(arena, (uid.hi >> 32), 16, 8).len;
return res;
}
/* ========================== *
* String operations
* ========================== */
@ -486,6 +494,10 @@ struct string string_formatv(struct arena *arena, struct string fmt, va_list arg
parsed_str = string_from_handle(arena, arg.value.handle.h64[0], arg.value.handle.h64[1]);
} break;
case FMT_TYPE_UID: {
parsed_str = string_from_uid(arena, arg.value.uid);
} break;
case FMT_TYPE_END: {
/* Unexpected end. Not enough FMT args passed to function. */
ASSERT(false);

View File

@ -16,6 +16,7 @@ struct string string_from_int(struct arena *arena, i64 n, u64 base, u64 zfill);
struct string string_from_ptr(struct arena *arena, void *ptr);
struct string string_from_float(struct arena *arena, f64 f, u32 precision);
struct string string_from_handle(struct arena *arena, u64 v0, u64 v1);
struct string string_from_uid(struct arena *arena, struct uid uid);
/* ========================== *
* String operations
@ -52,6 +53,7 @@ enum fmt_type {
FMT_TYPE_PTR = 0x0c4519e4,
FMT_TYPE_FLOAT = 0x04814143,
FMT_TYPE_HANDLE = 0x0f112992,
FMT_TYPE_UID = 0x0beb23dd,
FMT_TYPE_END = 0x0ecbc5ae
};
@ -70,6 +72,7 @@ struct fmt_arg {
struct {
u64 h64[2];
} handle;
struct uid uid;
} value;
};
@ -85,6 +88,7 @@ struct fmt_arg {
#define FMT_FLOAT(v) FMT_FLOAT_P(v, DEFAULT_FMT_PRECISION)
#define FMT_FLOAT_P(v, p) (struct fmt_arg) {.type = FMT_TYPE_FLOAT, .value.f = (v), .precision = (p)}
#define FMT_HANDLE(v) (struct fmt_arg) {.type = FMT_TYPE_HANDLE, .value.handle.h64[0] = (v).idx, .value.handle.h64[1] = (v).gen}
#define FMT_UID(v) (struct fmt_arg) {.type = FMT_TYPE_UID, .value.uid = (v) }
#define string_format(arena, fmt, ...) _string_format((arena), (fmt), __VA_ARGS__, FMT_END)
struct string _string_format(struct arena *arena, struct string fmt, ...);

View File

@ -349,12 +349,7 @@ INTERNAL struct string get_ent_debug_text(struct arena *arena, struct sim_ent *e
res.text = arena_dry_push(arena, u8);
res.len += string_format(arena, LIT("<%F>"), FMT_HANDLE(ent->handle)).len;
/* TODO: String fmt function */
struct uid uid = ent->uid;
res.len += string_copy(arena, LIT(" [")).len;
res.len += string_from_uint(arena, (uid.hi >> 36) & 0xFFFFFFF, 16, 7).len;
res.len += string_copy(arena, LIT("]\n")).len;
res.len += string_format(arena, LIT(" [%F]\n"), FMT_UID(ent->uid)).len;
{
res.len += string_copy(arena, LIT("net: ")).len;