authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-09-26 19:40:51-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-09-26 19:40:51-04:00
log224cd8a01eff193e7683362c7743b939b392c75a
treed0787e85d6bdbc4e36c2c50ed7538aac05ad6c6c
parent768af66977df40529e7639cd531deb49f6e500ae

add fmt.parseInt


1 files changed, 20 insertions(+), 0 deletions(-)

std/fmt/index.zig+20
......@@ -364,6 +364,26 @@ fn formatIntCallback(context: &FormatIntBuf, bytes: []const u8) -> bool {
364364 return true;
365365}
366366
367pub fn parseInt(comptime T: type, buf: []const u8, radix: u8) -> %T {
368 if (!T.is_signed)
369 return parseUnsigned(T, buf, radix);
370 if (buf.len == 0)
371 return T(0);
372 if (buf[0] == '-') {
373 return math.negate(%return parseUnsigned(T, buf[1..], radix));
374 } else if (buf[0] == '+') {
375 return parseUnsigned(T, buf[1..], radix);
376 } else {
377 return parseUnsigned(T, buf, radix);
378 }
379}
380
381test "fmt.parseInt" {
382 assert(%%parseInt(i32, "-10", 10) == -10);
383 assert(%%parseInt(i32, "+10", 10) == 10);
384 assert(if (parseInt(i32, " 10", 10)) |_| false else |err| err == error.InvalidChar);
385}
386
367387pub fn parseUnsigned(comptime T: type, buf: []const u8, radix: u8) -> %T {
368388 var x: T = 0;
369389