mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-03 16:44:06 +02:00
add peek method to read without advancing
This commit is contained in:
parent
3852f09dd5
commit
dd1f0f0808
2 changed files with 41 additions and 0 deletions
|
|
@ -680,6 +680,24 @@ where
|
|||
T::read(self, size)
|
||||
}
|
||||
|
||||
/// Read a value based on the provided type without advancing the stream
|
||||
#[inline]
|
||||
pub fn peek<T: BitRead<'a, E>>(&mut self) -> Result<T> {
|
||||
let pos = self.pos;
|
||||
let result = T::read(self);
|
||||
self.pos = pos;
|
||||
result
|
||||
}
|
||||
|
||||
/// Read a value based on the provided type and size without advancing the stream
|
||||
#[inline]
|
||||
pub fn peek_sized<T: BitReadSized<'a, E>>(&mut self, size: usize) -> Result<T> {
|
||||
let pos = self.pos;
|
||||
let result = T::read(self, size);
|
||||
self.pos = pos;
|
||||
result
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
#[inline]
|
||||
pub unsafe fn read_sized_unchecked<T: BitReadSized<'a, E>>(
|
||||
|
|
|
|||
|
|
@ -295,6 +295,20 @@ fn read_trait() {
|
|||
assert_eq!(Some(0b0110_1010), f);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn peek_trait() {
|
||||
let buffer = BitReadBuffer::new(BYTES, BigEndian);
|
||||
let mut stream = BitReadStream::new(buffer);
|
||||
let a: u8 = stream.read().unwrap();
|
||||
assert_eq!(0b1011_0101, a);
|
||||
assert_eq!(8, stream.pos());
|
||||
let b: i8 = stream.peek().unwrap();
|
||||
assert_eq!(8, stream.pos());
|
||||
assert_eq!(0b110_1010, b);
|
||||
let b: i8 = stream.read().unwrap();
|
||||
assert_eq!(0b110_1010, b);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn read_trait_unchecked() {
|
||||
unsafe {
|
||||
|
|
@ -346,6 +360,15 @@ fn read_sized_trait() {
|
|||
assert_eq!(0b10u8, result.read_int::<u8>(2).unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn peek_sized_trait() {
|
||||
let buffer = BitReadBuffer::new(BYTES, BigEndian);
|
||||
let mut stream = BitReadStream::new(buffer);
|
||||
let a: u8 = stream.peek_sized(4).unwrap();
|
||||
assert_eq!(0b1011, a);
|
||||
assert_eq!(0, stream.pos());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn read_sized_trait_unchecked() {
|
||||
unsafe {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue