From 49666d49b2102fd80bc41ce12f190836858fd72a Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Wed, 2 Feb 2022 10:37:38 -0600 Subject: [PATCH] str_to_i64 works in multiple bases --- core/conv.onyx | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/core/conv.onyx b/core/conv.onyx index 55600cbf..edf14d6a 100644 --- a/core/conv.onyx +++ b/core/conv.onyx @@ -36,7 +36,7 @@ Custom_Format :: struct { format: (^Format_Output, ^Format, rawptr) -> void; } -str_to_i64 :: (s: str) -> i64 { +str_to_i64 :: (s: str, base: u32 = 10) -> i64 { use package core value: i64 = 0; @@ -53,10 +53,24 @@ str_to_i64 :: (s: str) -> i64 { for c: s do switch c { case #char "0" .. #char "9" { - value *= 10; + value *= ~~base; value += ~~(c - #char "0"); } + case #char "A" .. #char "Z" { + if base <= 10 do fallthrough; + + value *= ~~base; + value += ~~(c - #char "A"); + } + + case #char "a" .. #char "z" { + if base <= 10 do fallthrough; + + value *= ~~base; + value += ~~(c - #char "a"); + } + case #default do break break; } -- 2.25.1