From 34b037f19b201ee81f362a559038c6abe443cde9 Mon Sep 17 00:00:00 2001 From: jon lipstate <52809771+jon-lipstate@users.noreply.github.com> Date: Sun, 26 Mar 2023 11:23:37 -0700 Subject: [PATCH] Update fmt.odin Update example to use set/register procs. --- core/fmt/fmt.odin | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index d0074ebe1..f79c5b39f 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -53,23 +53,20 @@ User_Formatter :: #type proc(fi: ^Info, arg: any, verb: rune) -> bool // m := cast(^SomeType)arg.data // switch verb { // case 'v', 'd': -// fmt.fmt_int(fi, u64(m.value), true, 32, verb) +// fmt.fmt_int(fi, u64(m.value), true, 64, verb) // case: // return false // } // return true // } -// // // main :: proc() { // // Ensure the fmt._user_formatters map is initialized -// if fmt._user_formatters == nil { -// fmt._user_formatters = new(map[typeid]fmt.User_Formatter) -// } -// // Register the custom formatter directly to the _user_formatters map -// fmt._user_formatters[type_info_of(SomeType).id] = User_Formatter +// fmt.set_user_formatters(new(map[typeid]fmt.User_Formatter)) +// err := fmt.register_user_formatter(type_info_of(SomeType).id, User_Formatter) +// assert(err == .None) // // Use the custom formatter // x := SomeType{42} -// fmt.println("My custom type value: ", x) +// fmt.println("Custom type value: ", x) // } Register_User_Formatter_Error :: enum { @@ -90,7 +87,12 @@ _user_formatters: ^map[typeid]User_Formatter // NOTE: Must be called before using register_user_formatter. // set_user_formatters :: proc(m: ^map[typeid]User_Formatter) { - _user_formatters = m + if _user_formatters==nil { + _user_formatters = m + } + else { + panic("set_user_formatters must not be called more than once.") + } } // Registers a user-defined formatter for a specific typeid //