| ... | ... | @@ -2130,7 +2130,7 @@ pub fn replaceScalar(comptime T: type, slice: []T, needle: T, replacement: T) vo |
| 2130 | 2130 | } |
| 2131 | 2131 | |
| 2132 | 2132 | /// Collapse consecutive duplicate elements into one entry. |
| 2133 | | pub fn collapseRepeats(comptime T: type, slice: []T, elem: T) usize { |
| 2133 | pub fn collapseRepeatsLen(comptime T: type, slice: []T, elem: T) usize { |
| 2134 | 2134 | if (slice.len == 0) return 0; |
| 2135 | 2135 | var write_idx: usize = 1; |
| 2136 | 2136 | var read_idx: usize = 1; |
| ... | ... | @@ -2143,11 +2143,15 @@ pub fn collapseRepeats(comptime T: type, slice: []T, elem: T) usize { |
| 2143 | 2143 | return write_idx; |
| 2144 | 2144 | } |
| 2145 | 2145 | |
| 2146 | /// Collapse consecutive duplicate elements into one entry. |
| 2147 | pub fn collapseRepeats(comptime T: type, slice: []T, elem: T) []T { |
| 2148 | return slice[0 .. collapseRepeatsLen(T, slice, elem)]; |
| 2149 | } |
| 2150 | |
| 2146 | 2151 | fn testCollapseRepeats(str: []const u8, elem: u8, expected: []const u8) !void { |
| 2147 | 2152 | const mutable = try std.testing.allocator.dupe(u8, str); |
| 2148 | 2153 | defer std.testing.allocator.free(mutable); |
| 2149 | | const actual = mutable[0..collapseRepeats(u8, mutable, elem)]; |
| 2150 | | testing.expect(std.mem.eql(u8, actual, expected)); |
| 2154 | testing.expect(std.mem.eql(u8, collapseRepeats(u8, mutable, elem), expected)); |
| 2151 | 2155 | } |
| 2152 | 2156 | test "collapseRepeats" { |
| 2153 | 2157 | try testCollapseRepeats("", '/', ""); |