std: fix bug in fifo.unget if rewinding doesn't wrap around
This commit is contained in:
parent
61179a4d52
commit
c393969a20
@ -311,10 +311,14 @@ pub fn LinearFifo(
|
|||||||
self.rewind(src.len);
|
self.rewind(src.len);
|
||||||
|
|
||||||
const slice = self.readableSliceMut(0);
|
const slice = self.readableSliceMut(0);
|
||||||
|
if (src.len < slice.len) {
|
||||||
|
mem.copy(T, slice, src);
|
||||||
|
} else {
|
||||||
mem.copy(T, slice, src[0..slice.len]);
|
mem.copy(T, slice, src[0..slice.len]);
|
||||||
const slice2 = self.readableSliceMut(slice.len);
|
const slice2 = self.readableSliceMut(slice.len);
|
||||||
mem.copy(T, slice2, src[slice.len..]);
|
mem.copy(T, slice2, src[slice.len..]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Peek at the item at `offset`
|
/// Peek at the item at `offset`
|
||||||
pub fn peekItem(self: Self, offset: usize) error{EndOfStream}!T {
|
pub fn peekItem(self: Self, offset: usize) error{EndOfStream}!T {
|
||||||
@ -385,6 +389,9 @@ test "LinearFifo(u8, .Dynamic)" {
|
|||||||
try fifo.unget("prependedstring");
|
try fifo.unget("prependedstring");
|
||||||
var result: [30]u8 = undefined;
|
var result: [30]u8 = undefined;
|
||||||
testing.expectEqualSlices(u8, "prependedstringabcdefghij", result[0..fifo.read(&result)]);
|
testing.expectEqualSlices(u8, "prependedstringabcdefghij", result[0..fifo.read(&result)]);
|
||||||
|
try fifo.unget("b");
|
||||||
|
try fifo.unget("a");
|
||||||
|
testing.expectEqualSlices(u8, "ab", result[0..fifo.read(&result)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fifo.shrink(0);
|
fifo.shrink(0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user