str_to_i64 works in multiple bases
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 2 Feb 2022 16:37:38 +0000 (10:37 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 2 Feb 2022 16:37:38 +0000 (10:37 -0600)
core/conv.onyx

index 55600cbf575dca0673f1eaea8a47e8c94cf4481c..edf14d6a55adb820474998e139be2790cd27aa9e 100644 (file)
@@ -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;
     }