diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-05-15 22:50:29 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-05-15 22:50:35 -0700 |
| commit | cb6ed427174031f67f226da292aa85f8127f4513 (patch) | |
| tree | 439c464588b9a01dadbd9620548fdfa3a556965e /src/libcore/uint-template | |
| parent | 0e21a05e6c0bc0bfa905291a916b38bdb9daf90d (diff) | |
| download | rust-cb6ed427174031f67f226da292aa85f8127f4513.tar.gz rust-cb6ed427174031f67f226da292aa85f8127f4513.zip | |
core: Generalize uint-string conversions to all uint types
Issue #2239
Diffstat (limited to 'src/libcore/uint-template')
| -rw-r--r-- | src/libcore/uint-template/u64.rs | 61 | ||||
| -rw-r--r-- | src/libcore/uint-template/uint.rs | 98 |
2 files changed, 0 insertions, 159 deletions
diff --git a/src/libcore/uint-template/u64.rs b/src/libcore/uint-template/u64.rs index 5de83d41da3..4e83ebd4976 100644 --- a/src/libcore/uint-template/u64.rs +++ b/src/libcore/uint-template/u64.rs @@ -1,62 +1 @@ type T = u64; - -// Type-specific functions here. These must be reexported by the -// parent module so that they appear in core::u8 and not core::u8::u8; - - -// FIXME: Surely we can generalize this to apply to all uint types -#[doc = "Convert to a string in a given base"] -fn to_str(n: u64, radix: uint) -> str { - assert (0u < radix && radix <= 16u); - - let r64 = radix as u64; - - fn digit(n: u64) -> str { - ret alt n { - 0u64 { "0" } - 1u64 { "1" } - 2u64 { "2" } - 3u64 { "3" } - 4u64 { "4" } - 5u64 { "5" } - 6u64 { "6" } - 7u64 { "7" } - 8u64 { "8" } - 9u64 { "9" } - 10u64 { "a" } - 11u64 { "b" } - 12u64 { "c" } - 13u64 { "d" } - 14u64 { "e" } - 15u64 { "f" } - _ { fail } - }; - } - - if n == 0u64 { ret "0"; } - - let mut s = ""; - - let mut n = n; - while n > 0u64 { s = digit(n % r64) + s; n /= r64; } - ret s; -} - -#[doc = "Convert to a string"] -fn str(n: u64) -> str { ret to_str(n, 10u); } - -#[doc = "Parse a string as an unsigned integer."] -fn from_str(buf: str, radix: u64) -> option<u64> { - if str::len(buf) == 0u { ret none; } - let mut i = str::len(buf) - 1u; - let mut power = 1u64, n = 0u64; - loop { - alt char::to_digit(buf[i] as char, radix as uint) { - some(d) { n += d as u64 * power; } - none { ret none; } - } - power *= radix; - if i == 0u { ret some(n); } - i -= 1u; - }; -} diff --git a/src/libcore/uint-template/uint.rs b/src/libcore/uint-template/uint.rs index 27a8c26a248..c8fb9731d47 100644 --- a/src/libcore/uint-template/uint.rs +++ b/src/libcore/uint-template/uint.rs @@ -89,104 +89,6 @@ fn next_power_of_two(n: uint) -> uint { ret tmp + 1u; } -#[doc = " -Parse a buffer of bytes - -# Arguments - -* buf - A byte buffer -* radix - The base of the number - -# Failure - -`buf` must not be empty -"] -fn parse_buf(buf: [u8], radix: uint) -> option<uint> { - if vec::len(buf) == 0u { ret none; } - let mut i = vec::len(buf) - 1u; - let mut power = 1u; - let mut n = 0u; - loop { - alt char::to_digit(buf[i] as char, radix) { - some(d) { n += d * power; } - none { ret none; } - } - power *= radix; - if i == 0u { ret some(n); } - i -= 1u; - }; -} - -#[doc = "Parse a string to an int"] -fn from_str(s: str) -> option<uint> { parse_buf(str::bytes(s), 10u) } - -#[doc = "Convert to a string in a given base"] -fn to_str(num: uint, radix: uint) -> str { - let mut n = num; - assert (0u < radix && radix <= 16u); - fn digit(n: uint) -> char { - ret alt n { - 0u { '0' } - 1u { '1' } - 2u { '2' } - 3u { '3' } - 4u { '4' } - 5u { '5' } - 6u { '6' } - 7u { '7' } - 8u { '8' } - 9u { '9' } - 10u { 'a' } - 11u { 'b' } - 12u { 'c' } - 13u { 'd' } - 14u { 'e' } - 15u { 'f' } - _ { fail } - }; - } - if n == 0u { ret "0"; } - let mut s: str = ""; - while n != 0u { - s += str::from_byte(digit(n % radix) as u8); - n /= radix; - } - let mut s1: str = ""; - let mut len: uint = str::len(s); - while len != 0u { len -= 1u; s1 += str::from_byte(s[len]); } - ret s1; -} - -#[doc = "Convert to a string"] -fn str(i: uint) -> str { ret to_str(i, 10u); } - -#[test] -fn test_from_str() { - assert uint::from_str("0") == some(0u); - assert uint::from_str("3") == some(3u); - assert uint::from_str("10") == some(10u); - assert uint::from_str("123456789") == some(123456789u); - assert uint::from_str("00100") == some(100u); - - assert uint::from_str("") == none; - assert uint::from_str(" ") == none; - assert uint::from_str("x") == none; -} - -#[Test] -fn test_parse_buf() { - import str::bytes; - assert uint::parse_buf(bytes("123"), 10u) == some(123u); - assert uint::parse_buf(bytes("1001"), 2u) == some(9u); - assert uint::parse_buf(bytes("123"), 8u) == some(83u); - assert uint::parse_buf(bytes("123"), 16u) == some(291u); - assert uint::parse_buf(bytes("ffff"), 16u) == some(65535u); - assert uint::parse_buf(bytes("z"), 36u) == some(35u); - - assert uint::parse_buf(str::bytes("Z"), 10u) == none; - assert uint::parse_buf(str::bytes("_"), 2u) == none; -} - #[test] fn test_next_power_of_two() { assert (uint::next_power_of_two(0u) == 0u); |
