1
0
Fork 0
mirror of https://codeberg.org/icewind/bitbuffer.git synced 2026-06-03 16:44:06 +02:00

expose 'reserve'

This commit is contained in:
Robin Appelman 2021-07-20 13:54:07 +02:00
commit e7617dea76
2 changed files with 20 additions and 8 deletions

View file

@ -171,7 +171,7 @@ impl From<FromUtf8Error> for BitError {
} }
/// Either the read bits in the requested format or a [`BitError`] /// Either the read bits in the requested format or a [`BitError`]
pub type Result<T> = std::result::Result<T, BitError>; pub type Result<T, E = BitError> = std::result::Result<T, E>;
/// Get the number of bits required to read a type from stream /// Get the number of bits required to read a type from stream
/// ///

View file

@ -291,12 +291,18 @@ where
/// Reserve some bits to be written later by splitting of two parts /// Reserve some bits to be written later by splitting of two parts
/// ///
/// This allows skipping a few bits to write later /// This allows skipping a few bits to write later
fn reserve(&mut self, count: usize) -> (BitWriteStream<E>, BitWriteStream<E>) { pub fn reserve<
Err,
F: Fn(&mut BitWriteStream<E>, &mut BitWriteStream<E>) -> Result<(), Err>,
>(
&mut self,
count: usize,
body_fn: F,
) -> Result<(), Err> {
let (head, tail) = self.buffer.reserve(count); let (head, tail) = self.buffer.reserve(count);
( let mut head = BitWriteStream { buffer: head };
BitWriteStream { buffer: head }, let mut tail = BitWriteStream { buffer: tail };
BitWriteStream { buffer: tail }, body_fn(&mut head, &mut tail)
)
} }
/// Write the length of a section before the section /// Write the length of a section before the section
@ -305,7 +311,10 @@ where
length_bit_size: usize, length_bit_size: usize,
body_fn: F, body_fn: F,
) -> Result<()> { ) -> Result<()> {
let (mut head, mut tail) = self.reserve(length_bit_size); let (head, tail) = self.buffer.reserve(length_bit_size);
let mut head = BitWriteStream { buffer: head };
let mut tail = BitWriteStream { buffer: tail };
let start = tail.bit_len(); let start = tail.bit_len();
body_fn(&mut tail)?; body_fn(&mut tail)?;
let end = tail.bit_len(); let end = tail.bit_len();
@ -319,7 +328,10 @@ where
length_bit_size: usize, length_bit_size: usize,
body_fn: F, body_fn: F,
) -> Result<()> { ) -> Result<()> {
let (mut head, mut tail) = self.reserve(length_bit_size); let (head, tail) = self.buffer.reserve(length_bit_size);
let mut head = BitWriteStream { buffer: head };
let mut tail = BitWriteStream { buffer: tail };
let start = tail.bit_len(); let start = tail.bit_len();
body_fn(&mut tail)?; body_fn(&mut tail)?;
let end = tail.bit_len(); let end = tail.bit_len();