zig

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

commit a72ad61cd4b718dd1ce2bf8ba4a3404f8304648c (tree)
parent 666584067a97da6d39867ff0c57fcd3be2d50e96
Author: Jonathan Marler <johnnymarler@gmail.com>
Date:   Wed,  6 Jan 2021 23:55:33 -0700

have collapseRepeats return slice intead of just len

Diffstat:
Mlib/std/mem.zig | 10+++++++---
Mlib/std/os/windows.zig | 2+-
2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/lib/std/mem.zig b/lib/std/mem.zig @@ -2130,7 +2130,7 @@ pub fn replaceScalar(comptime T: type, slice: []T, needle: T, replacement: T) vo } /// Collapse consecutive duplicate elements into one entry. -pub fn collapseRepeats(comptime T: type, slice: []T, elem: T) usize { +pub fn collapseRepeatsLen(comptime T: type, slice: []T, elem: T) usize { if (slice.len == 0) return 0; var write_idx: usize = 1; var read_idx: usize = 1; @@ -2143,11 +2143,15 @@ pub fn collapseRepeats(comptime T: type, slice: []T, elem: T) usize { return write_idx; } +/// Collapse consecutive duplicate elements into one entry. +pub fn collapseRepeats(comptime T: type, slice: []T, elem: T) []T { + return slice[0 .. collapseRepeatsLen(T, slice, elem)]; +} + fn testCollapseRepeats(str: []const u8, elem: u8, expected: []const u8) !void { const mutable = try std.testing.allocator.dupe(u8, str); defer std.testing.allocator.free(mutable); - const actual = mutable[0..collapseRepeats(u8, mutable, elem)]; - testing.expect(std.mem.eql(u8, actual, expected)); + testing.expect(std.mem.eql(u8, collapseRepeats(u8, mutable, elem), expected)); } test "collapseRepeats" { try testCollapseRepeats("", '/', ""); diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig @@ -1786,7 +1786,7 @@ pub fn removeDotDirsSanitized(comptime T: type, path: []T) RemoveDotDirsError!us /// Returns the length of the new path. pub fn normalizePath(comptime T: type, path: []T) RemoveDotDirsError!usize { mem.replaceScalar(T, path, '/', '\\'); - const new_len = mem.collapseRepeats(T, path, '\\'); + const new_len = mem.collapseRepeatsLen(T, path, '\\'); const prefix_len: usize = init: { if (new_len >= 1 and path[0] == '\\') break :init 1;