| ... | @@ -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, |
| 18 | | 18 | |
| | 19 | const is_const = Buffer == []const u8; |
| | 20 | |
| 19 | const Self = @This(); | 21 | const Self = @This(); |
| 20 | | 22 | |
| 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 | } |
| 86 | | 88 | |
| 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 | } |
| 91 | | 97 | |
| 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 | } |
| 96 | | 102 | |
| 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 | } |