| ... | ... | @@ -76,21 +76,22 @@ pub fn FixedBufferStream(comptime Buffer: type) type { |
| 76 | 76 | } |
| 77 | 77 | |
| 78 | 78 | pub fn seekTo(self: *Self, pos: u64) SeekError!void { |
| 79 | | const usize_pos = std.math.cast(usize, pos) catch std.math.maxInt(usize); |
| 80 | | self.pos = usize_pos; |
| 79 | self.pos = if (std.math.cast(usize, pos)) |x| x else |_| self.buffer.len; |
| 81 | 80 | } |
| 82 | 81 | |
| 83 | 82 | pub fn seekBy(self: *Self, amt: i64) SeekError!void { |
| 84 | 83 | if (amt < 0) { |
| 85 | | const abs_amt = std.math.cast(usize, -amt) catch std.math.maxInt(usize); |
| 86 | | if (abs_amt > self.pos) { |
| 84 | const abs_amt = std.math.absCast(amt); |
| 85 | const abs_amt_usize = std.math.cast(usize, abs_amt) catch std.math.maxInt(usize); |
| 86 | if (abs_amt_usize > self.pos) { |
| 87 | 87 | self.pos = 0; |
| 88 | 88 | } else { |
| 89 | | self.pos -= abs_amt; |
| 89 | self.pos -= abs_amt_usize; |
| 90 | 90 | } |
| 91 | 91 | } else { |
| 92 | | const usize_amt = std.math.cast(usize, amt) catch std.math.maxInt(usize); |
| 93 | | self.pos = std.math.add(usize, self.pos, usize_amt) catch std.math.maxInt(usize); |
| 92 | const amt_usize = std.math.cast(usize, amt) catch std.math.maxInt(usize); |
| 93 | const new_pos = std.math.add(usize, self.pos, amt_usize) catch std.math.maxInt(usize); |
| 94 | self.pos = std.math.min(self.buffer.len, new_pos); |
| 94 | 95 | } |
| 95 | 96 | } |
| 96 | 97 | |
| ... | ... | @@ -102,7 +103,6 @@ pub fn FixedBufferStream(comptime Buffer: type) type { |
| 102 | 103 | return self.pos; |
| 103 | 104 | } |
| 104 | 105 | |
| 105 | | /// Asserts that the seek pos is within the buffer range. |
| 106 | 106 | pub fn getWritten(self: Self) []const u8 { |
| 107 | 107 | return self.buffer[0..self.pos]; |
| 108 | 108 | } |