diff --git a/src/lib.zig b/src/lib.zig index eb2f1eb8fa180ffd76e20ede29cf8e46ccd5f3ef..8d6ace3f4ac5bbff8138ca9ad2fe9a1f7cdaebbb 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -384,3 +384,23 @@ pub fn indexBufferT(bytes: []const u8, comptime T: type, endian: std.builtin.End error.EndOfStream => unreachable, // assert above has been violated }; } + +pub fn BufIndexer(comptime T: type, comptime endian: std.builtin.Endian) type { + return struct { + bytes: []const u8, + max_len: usize, + + const Self = @This(); + + pub fn init(bytes: []const u8, max_len: usize) Self { + return .{ + .bytes = bytes, + .max_len = max_len, + }; + } + + pub fn at(self: *const Self, idx: usize) T { + return indexBufferT(self.bytes, T, endian, idx, self.max_len); + } + }; +}