authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-09-26 03:03:12-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-09-26 03:03:12-04:00
log5c2db5a942a7f3af52fa1a46df0afa7013d65dd9
tree18aa452f5837d03fe5688510b6f03a3ccc014a90
parentfd2d502e411c45828ebdf1008c5060db8749ef31

add std.fmt.trim


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

std/fmt/index.zig+34
......@@ -489,3 +489,37 @@ test "fmt.format" {
489489 assert(mem.eql(u8, result, "error union: error.InvalidChar\n"));
490490 }
491491}
492
493pub fn trim(buf: []const u8) -> []const u8 {
494 var start: usize = 0;
495 while (start < buf.len and isWhiteSpace(buf[start])) : (start += 1) { }
496
497 var end: usize = buf.len;
498 while (true) {
499 if (end > start) {
500 const new_end = end - 1;
501 if (isWhiteSpace(buf[new_end])) {
502 end = new_end;
503 continue;
504 }
505 }
506 break;
507
508 }
509 return buf[start..end];
510}
511
512test "fmt.trim" {
513 assert(mem.eql(u8, "abc", trim("\n abc \t")));
514 assert(mem.eql(u8, "", trim(" ")));
515 assert(mem.eql(u8, "", trim("")));
516 assert(mem.eql(u8, "abc", trim(" abc")));
517 assert(mem.eql(u8, "abc", trim("abc ")));
518}
519
520pub fn isWhiteSpace(byte: u8) -> bool {
521 return switch (byte) {
522 ' ', '\t', '\n', '\r' => true,
523 else => false,
524 };
525}