authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-04-16 19:16:59 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-04-16 19:16:59 -07:00
loge0e12388360dd5b8040469a4ee5ca81cb4dc0870
tree08006cfb0977cefec007d5b735b8fb743623918c
parent94fa7059420793911efd53424d7422e53f5763f1
signaturebadge-check Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

FBS: add takeArray, takeInt, takeIntSlice


1 files changed, 18 insertions(+), 6 deletions(-)

fixed_buffer_stream.zig+18-6
...@@ -16,6 +16,8 @@ pub fn FixedBufferStream(comptime Buffer: type) type {...@@ -16,6 +16,8 @@ pub fn FixedBufferStream(comptime Buffer: type) type {
16 buffer: Buffer,16 buffer: Buffer,
17 pos: usize,17 pos: usize,
1818
19 const is_const = Buffer == []const u8;
20
19 const Self = @This();21 const Self = @This();
2022
21 pub fn init(buffer: Buffer) Self {23 pub fn init(buffer: Buffer) Self {
...@@ -84,18 +86,28 @@ pub fn FixedBufferStream(comptime Buffer: type) type {...@@ -84,18 +86,28 @@ pub fn FixedBufferStream(comptime Buffer: type) type {
84 };86 };
85 }87 }
8688
87 pub fn takeByte(self: *Self) u8 {89 pub fn rest(self: *Self) Buffer {
88 defer self.pos += 1;90 return self.buffer[self.pos..];
89 return self.buffer[self.pos];91 }
92
93 pub fn takeArray(self: *Self, comptime len: usize) (if (is_const) *const [len]u8 else *[len]u8) {
94 defer self.pos += len;
95 return self.rest()[0..len];
90 }96 }
9197
92 pub fn takeSlice(self: *Self, count: usize) Buffer {98 pub fn takeSlice(self: *Self, count: usize) Buffer {
93 defer self.pos += count;99 defer self.pos += count;
94 return self.buffer[self.pos..][0..count];100 return self.rest()[0..count];
95 }101 }
96102
97 pub fn rest(self: *Self) Buffer {103 pub fn takeInt(self: *Self, I: type, endian: std.builtin.Endian) I {
98 return self.buffer[self.pos..];104 comptime std.debug.assert(@bitSizeOf(I) % 8 == 0);
105 return std.mem.readInt(I, self.takeArray(@sizeOf(I)), endian);
106 }
107
108 pub fn takeIntSlice(self: *Self, I: type, len: usize) (if (is_const) []align(1) const I else []align(1) I) {
109 comptime std.debug.assert(@bitSizeOf(I) % 8 == 0);
110 return @ptrCast(self.takeSlice(@sizeOf(I) * len));
99 }111 }
100 };112 };
101}113}