Commit 224cd8a01e

Andrew Kelley <superjoe30@gmail.com>
2017-09-27 01:40:51
add fmt.parseInt
1 parent 768af66
Changed files (1)
std
std/fmt/index.zig
@@ -364,6 +364,26 @@ fn formatIntCallback(context: &FormatIntBuf, bytes: []const u8) -> bool {
     return true;
 }
 
+pub fn parseInt(comptime T: type, buf: []const u8, radix: u8) -> %T {
+    if (!T.is_signed)
+        return parseUnsigned(T, buf, radix);
+    if (buf.len == 0)
+        return T(0);
+    if (buf[0] == '-') {
+        return math.negate(%return parseUnsigned(T, buf[1..], radix));
+    } else if (buf[0] == '+') {
+        return parseUnsigned(T, buf[1..], radix);
+    } else {
+        return parseUnsigned(T, buf, radix);
+    }
+}
+
+test "fmt.parseInt" {
+    assert(%%parseInt(i32, "-10", 10) == -10);
+    assert(%%parseInt(i32, "+10", 10) == 10);
+    assert(if (parseInt(i32, " 10", 10)) |_| false else |err| err == error.InvalidChar);
+}
+
 pub fn parseUnsigned(comptime T: type, buf: []const u8, radix: u8) -> %T {
     var x: T = 0;