about summary refs log tree commit diff
path: root/src/lib
diff options
context:
space:
mode:
authorMatt Brubeck <mbrubeck@limpet.net>2011-10-31 07:34:58 -0700
committerMarijn Haverbeke <marijnh@gmail.com>2011-10-31 16:15:36 +0100
commit80c926c5e253d6db299698cfd4932dbcb61cd1bd (patch)
treec85104b6ec87062b4791cb49f3c603e8c639f277 /src/lib
parent4739942e7415d89425453d25427c51f96328c52b (diff)
Add a char::to_digit function
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/char.rs9
-rw-r--r--src/lib/int.rs6
-rw-r--r--src/lib/uint.rs6
3 files changed, 11 insertions, 10 deletions
diff --git a/src/lib/char.rs b/src/lib/char.rs
index e91e8697dd8..28345fb19fe 100644
--- a/src/lib/char.rs
+++ b/src/lib/char.rs
@@ -93,3 +93,12 @@ pure fn is_whitespace(c: char) -> bool {
         true
     } else if c == ch_no_break_space { true } else { false }
 }
+
+pure fn to_digit(c: char) -> u8 {
+    alt c {
+        '0' to '9' { c as u8 - ('0' as u8) }
+        'a' to 'z' { c as u8 + 10u8 - ('a' as u8) }
+        'A' to 'Z' { c as u8 + 10u8 - ('A' as u8) }
+        _ { fail; }
+    }
+}
diff --git a/src/lib/int.rs b/src/lib/int.rs
index 1dae4488b0b..62fb0a7cb63 100644
--- a/src/lib/int.rs
+++ b/src/lib/int.rs
@@ -112,11 +112,7 @@ fn parse_buf(buf: [u8], radix: uint) -> int {
     }
     let n = 0;
     while true {
-        let digit = alt buf[i] as char {
-            '0' to '9' { buf[i] - ('0' as u8) }
-            'a' to 'z' { 10u8 + buf[i] - ('a' as u8) }
-            'A' to 'Z' { 10u8 + buf[i] - ('A' as u8) }
-        };
+        let digit = char::to_digit(buf[i] as char);
         if (digit as uint) >= radix {
             fail;
         }
diff --git a/src/lib/uint.rs b/src/lib/uint.rs
index 12e2f65b9e6..5de9bd974e4 100644
--- a/src/lib/uint.rs
+++ b/src/lib/uint.rs
@@ -100,11 +100,7 @@ fn parse_buf(buf: [u8], radix: uint) -> uint {
     let power = 1u;
     let n = 0u;
     while true {
-        let digit = alt buf[i] as char {
-            '0' to '9' { buf[i] - ('0' as u8) }
-            'a' to 'z' { 10u8 + buf[i] - ('a' as u8) }
-            'A' to 'Z' { 10u8 + buf[i] - ('A' as u8) }
-        };
+        let digit = char::to_digit(buf[i] as char);
         if (digit as uint) >= radix {
             fail;
         }