diff options
| author | Graydon Hoare <[email protected]> | 2010-08-20 11:40:59 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-08-20 11:42:44 -0700 |
| commit | 9fc4fc6692c6684487eb57c6608ee34ab94dd9f5 (patch) | |
| tree | cddbecd3d439f36d27c4549700d25ab3c23f1f52 /src/lib/_uint.rs | |
| parent | Modify session to report errors in an emacs-parser-friendlier way. (diff) | |
| download | rust-9fc4fc6692c6684487eb57c6608ee34ab94dd9f5.tar.xz rust-9fc4fc6692c6684487eb57c6608ee34ab94dd9f5.zip | |
Add _uint module to std, move some code around.
Diffstat (limited to 'src/lib/_uint.rs')
| -rw-r--r-- | src/lib/_uint.rs | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/lib/_uint.rs b/src/lib/_uint.rs new file mode 100644 index 00000000..8a03d00b --- /dev/null +++ b/src/lib/_uint.rs @@ -0,0 +1,68 @@ +import std.sys; + +fn add(uint x, uint y) -> uint { ret x + y; } +fn sub(uint x, uint y) -> uint { ret x - y; } +fn mul(uint x, uint y) -> uint { ret x * y; } +fn div(uint x, uint y) -> uint { ret x / y; } +fn rem(uint x, uint y) -> uint { ret x % y; } + +fn lt(uint x, uint y) -> bool { ret x < y; } +fn le(uint x, uint y) -> bool { ret x <= y; } +fn eq(uint x, uint y) -> bool { ret x == y; } +fn ne(uint x, uint y) -> bool { ret x != y; } +fn ge(uint x, uint y) -> bool { ret x >= y; } +fn gt(uint x, uint y) -> bool { ret x > y; } + +iter range(mutable uint lo, uint hi) -> uint { + while (lo < hi) { + put lo; + lo += 1u; + } +} + +fn next_power_of_two(uint n) -> uint { + // FIXME change |* uint(4)| below to |* uint(8) / uint(2)| and watch the + // world explode. + let uint halfbits = sys.rustrt.size_of[uint]() * 4u; + let uint tmp = n - 1u; + let uint shift = 1u; + while (shift <= halfbits) { + tmp |= tmp >> shift; + shift <<= 1u; + } + ret tmp + 1u; +} + +fn to_str(mutable uint n, uint radix) -> str +{ + check (0u < radix && radix <= 16u); + fn digit(uint n) -> str { + alt (n) { + case (0u) { ret "0"; } + case (1u) { ret "1"; } + case (2u) { ret "2"; } + case (3u) { ret "3"; } + case (4u) { ret "4"; } + case (5u) { ret "5"; } + case (6u) { ret "6"; } + case (7u) { ret "7"; } + case (8u) { ret "8"; } + case (9u) { ret "9"; } + case (10u) { ret "a"; } + case (11u) { ret "b"; } + case (12u) { ret "c"; } + case (13u) { ret "d"; } + case (14u) { ret "e"; } + case (15u) { ret "f"; } + } + } + + if (n == 0u) { ret "0"; } + + let str s = ""; + while (n > 0u) { + s = digit(n % radix) + s; + n /= radix; + } + ret s; +} |