mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-03 08:34:07 +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)
|
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)]
|
#[doc(hidden)]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub unsafe fn read_sized_unchecked<T: BitReadSized<'a, E>>(
|
pub unsafe fn read_sized_unchecked<T: BitReadSized<'a, E>>(
|
||||||
|
|
|
||||||
|
|
@ -295,6 +295,20 @@ fn read_trait() {
|
||||||
assert_eq!(Some(0b0110_1010), f);
|
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]
|
#[test]
|
||||||
fn read_trait_unchecked() {
|
fn read_trait_unchecked() {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
|
@ -346,6 +360,15 @@ fn read_sized_trait() {
|
||||||
assert_eq!(0b10u8, result.read_int::<u8>(2).unwrap());
|
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]
|
#[test]
|
||||||
fn read_sized_trait_unchecked() {
|
fn read_sized_trait_unchecked() {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue