uid fmt
This commit is contained in:
parent
2a93940bff
commit
fca945736b
2
.natvis
2
.natvis
@ -43,7 +43,7 @@
|
||||
</Type>
|
||||
|
||||
<Type Name = "uid">
|
||||
<DisplayString>0x{hi, xb}{lo, xb}</DisplayString>
|
||||
<DisplayString>[{(u32)(hi >> 32), xb}]{((u32)(hi & 0xFFFFFFFF)), xb}{lo, xb}</DisplayString>
|
||||
</Type>
|
||||
|
||||
<Type Name = "String">
|
||||
|
||||
12
src/string.c
12
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);
|
||||
|
||||
@ -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, ...);
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user