zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 5c2db5a942a7f3af52fa1a46df0afa7013d65dd9 (tree)
parent fd2d502e411c45828ebdf1008c5060db8749ef31
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Tue, 26 Sep 2017 03:03:12 -0400

add std.fmt.trim

Diffstat:
Mstd/fmt/index.zig | 34++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+), 0 deletions(-)

diff --git a/std/fmt/index.zig b/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, + }; +}