mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-03 08:34:07 +02:00
expose 'reserve'
This commit is contained in:
parent
39e0f528fb
commit
e7617dea76
2 changed files with 20 additions and 8 deletions
|
|
@ -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
|
||||||
///
|
///
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue