authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-05-13 11:11:55-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-05-13 11:11:55-07:00
log6a7f3c8df72349ffbe207ff7f8d98b6993b0e8c4
tree0de0b746504d0934122885a654ceefbff7874ced
parentb68aee4f34dffe60c099cba0a4ca56580e7a9cf5

std: make parsing an unsigned number generic


2 files changed, 6 insertions(+), 6 deletions(-)

example/guess_number/main.zig+1-1
...@@ -23,7 +23,7 @@ pub fn main(args: [][]u8) -> %void {...@@ -23,7 +23,7 @@ pub fn main(args: [][]u8) -> %void {
23 return err;23 return err;
24 };24 };
2525
26 const guess = io.parse_u64(line_buf[0...line_len - 1], 10) %% {26 const guess = io.parse_unsigned(u8)(line_buf[0...line_len - 1], 10) %% {
27 %%io.stdout.printf("Invalid number.\n");27 %%io.stdout.printf("Invalid number.\n");
28 continue;28 continue;
29 };29 };
std/io.zig+5-5
...@@ -211,8 +211,8 @@ pub struct InStream {...@@ -211,8 +211,8 @@ pub struct InStream {
211pub error InvalidChar;211pub error InvalidChar;
212pub error Overflow;212pub error Overflow;
213213
214pub fn parse_u64(buf: []u8, radix: u8) -> %u64 {214pub fn parse_unsigned(T: type)(buf: []u8, radix: u8) -> %T {
215 var x : u64 = 0;215 var x: T = 0;
216216
217 for (buf) |c| {217 for (buf) |c| {
218 const digit = char_to_digit(c);218 const digit = char_to_digit(c);
...@@ -222,12 +222,12 @@ pub fn parse_u64(buf: []u8, radix: u8) -> %u64 {...@@ -222,12 +222,12 @@ pub fn parse_u64(buf: []u8, radix: u8) -> %u64 {
222 }222 }
223223
224 // x *= radix224 // x *= radix
225 if (@mul_with_overflow(u64, x, radix, &x)) {225 if (@mul_with_overflow(T, x, radix, &x)) {
226 return error.Overflow;226 return error.Overflow;
227 }227 }
228228
229 // x += digit229 // x += digit
230 if (@add_with_overflow(u64, x, digit, &x)) {230 if (@add_with_overflow(T, x, digit, &x)) {
231 return error.Overflow;231 return error.Overflow;
232 }232 }
233 }233 }
...@@ -404,7 +404,7 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {...@@ -404,7 +404,7 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {
404404
405#attribute("test")405#attribute("test")
406fn parse_u64_digit_too_big() {406fn parse_u64_digit_too_big() {
407 parse_u64("123a", 10) %% |err| {407 parse_unsigned(u64)("123a", 10) %% |err| {
408 if (err == error.InvalidChar) return;408 if (err == error.InvalidChar) return;
409 unreachable{};409 unreachable{};
410 };410 };