Commit 5c2db5a942

Andrew Kelley <superjoe30@gmail.com>
2017-09-26 09:03:12
add std.fmt.trim
1 parent fd2d502
Changed files (1)
std
std/fmt/index.zig
@@ -489,3 +489,37 @@ test "fmt.format" {
         assert(mem.eql(u8, result, "error union: error.InvalidChar\n"));
     }
 }
+
+pub fn trim(buf: []const u8) -> []const u8 {
+    var start: usize = 0;
+    while (start < buf.len and isWhiteSpace(buf[start])) : (start += 1) { }
+
+    var end: usize = buf.len;
+    while (true) {
+        if (end > start) {
+            const new_end = end - 1;
+            if (isWhiteSpace(buf[new_end])) {
+                end = new_end;
+                continue;
+            }
+        }
+        break;
+
+    }
+    return buf[start..end];
+}
+
+test "fmt.trim" {
+    assert(mem.eql(u8, "abc", trim("\n  abc  \t")));
+    assert(mem.eql(u8, "", trim("   ")));
+    assert(mem.eql(u8, "", trim("")));
+    assert(mem.eql(u8, "abc", trim(" abc")));
+    assert(mem.eql(u8, "abc", trim("abc ")));
+}
+
+pub fn isWhiteSpace(byte: u8) -> bool {
+    return switch (byte) {
+        ' ', '\t', '\n', '\r' => true,
+        else => false,
+    };
+}