diff --git a/src/ErrCtx.zig b/src/ErrCtx.zig index d3c71fe..7f5f164 100644 --- a/src/ErrCtx.zig +++ b/src/ErrCtx.zig @@ -74,10 +74,10 @@ pub fn iterator(self: *const ErrCtx) mem.SplitIterator(u8) { return mem.split(u8, slice[0..last_byte], "\x00"); } -pub fn rev(self: *const ErrCtx) SplitIteratorRev(u8) { +pub fn rev(self: *const ErrCtx) mem.SplitBackwardsIterator(u8) { const slice = self.buf.constSlice(); if (slice.len == 0) { - return SplitIteratorRev(u8){ + return mem.SplitBackwardsIterator(u8){ .buffer = slice, .index = null, .delimiter = "\x00", @@ -85,7 +85,7 @@ pub fn rev(self: *const ErrCtx) SplitIteratorRev(u8) { } const last_byte = if (slice[slice.len - 1] == 0) (slice.len - 1) else slice.len; - return splitRev(u8, slice[0..last_byte], "\x00"); + return mem.splitBackwards(u8, slice[0..last_byte], "\x00"); } pub fn unwrap(self: *const ErrCtx) BoundedArray(u8, capacity * 2) { @@ -154,36 +154,3 @@ test "rev" { try testing.expectEqualStrings("yadda xx", it.next().?); try testing.expectEqual(it.next(), null); } - -// copied form https://github.com/ziglang/zig/pull/11908 -pub fn splitRev(comptime T: type, buffer: []const T, delimiter: []const T) SplitIteratorRev(T) { - assert(delimiter.len != 0); - return SplitIteratorRev(T){ - .index = buffer.len, - .buffer = buffer, - .delimiter = delimiter, - }; -} - -pub fn SplitIteratorRev(comptime T: type) type { - return struct { - buffer: []const T, - index: ?usize, - delimiter: []const T, - - const Self = @This(); - - /// Returns a slice of the next field, or null if splitting is complete. - pub fn next(self: *Self) ?[]const T { - const end = self.index orelse return null; - const start = if (mem.lastIndexOf(T, self.buffer[0..end], self.delimiter)) |delim_start| blk: { - self.index = delim_start; - break :blk delim_start + self.delimiter.len; - } else blk: { - self.index = null; - break :blk 0; - }; - return self.buffer[start..end]; - } - }; -}