From fca945736bd2582af0d258bae8ab33a42f227095 Mon Sep 17 00:00:00 2001 From: jacob Date: Mon, 24 Feb 2025 09:02:06 -0600 Subject: [PATCH] uid fmt --- .natvis | 2 +- src/string.c | 12 ++++++++++++ src/string.h | 4 ++++ src/user.c | 7 +------ 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/.natvis b/.natvis index 4eb7585c..4429a90a 100644 --- a/.natvis +++ b/.natvis @@ -43,7 +43,7 @@ - 0x{hi, xb}{lo, xb} + [{(u32)(hi >> 32), xb}]{((u32)(hi & 0xFFFFFFFF)), xb}{lo, xb} diff --git a/src/string.c b/src/string.c index a0ac41be..68cb99c2 100644 --- a/src/string.c +++ b/src/string.c @@ -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); diff --git a/src/string.h b/src/string.h index fea5c357..945df597 100644 --- a/src/string.h +++ b/src/string.h @@ -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, ...); diff --git a/src/user.c b/src/user.c index f3ec6049..5810a848 100644 --- a/src/user.c +++ b/src/user.c @@ -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;