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

implement reserve_size with reserve_int

This commit is contained in:
Robin Appelman 2021-07-24 16:09:48 +02:00
commit 75e50b6707

View file

@ -311,16 +311,12 @@ where
length_bit_size: usize, length_bit_size: usize,
body_fn: F, body_fn: F,
) -> Result<(), Err> { ) -> Result<(), Err> {
let (head, tail) = self.buffer.reserve(length_bit_size); self.reserve_int(length_bit_size, |stream| {
let mut head = BitWriteStream { buffer: head }; let start = stream.bit_len();
let mut tail = BitWriteStream { buffer: tail }; body_fn(stream)?;
let end = stream.bit_len();
let start = tail.bit_len(); Ok((end - start) as u64)
body_fn(&mut tail)?; })
let end = tail.bit_len();
let bit_len = end - start;
head.write_sized(&bit_len, length_bit_size)?;
Ok(())
} }
/// Write the length in bytes of a section before the section, the section will be 0 padded to an even byte length /// Write the length in bytes of a section before the section, the section will be 0 padded to an even byte length
@ -332,22 +328,18 @@ where
length_bit_size: usize, length_bit_size: usize,
body_fn: F, body_fn: F,
) -> Result<(), Err> { ) -> Result<(), Err> {
let (head, tail) = self.buffer.reserve(length_bit_size); self.reserve_int(length_bit_size, |stream| {
let mut head = BitWriteStream { buffer: head }; let start = stream.bit_len();
let mut tail = BitWriteStream { buffer: tail }; body_fn(stream)?;
let end = stream.bit_len();
let start = tail.bit_len();
body_fn(&mut tail)?;
let end = tail.bit_len();
let bit_len = end - start; let bit_len = end - start;
let pad_len = (8 - (bit_len & 7)) & 7; let pad_len = (8 - (bit_len & 7)) & 7;
tail.push_bits(0, pad_len); stream.push_bits(0, pad_len);
let byte_len = (bit_len + pad_len) / 8; let byte_len = (bit_len + pad_len) / 8;
Ok(byte_len as u64)
head.write_sized(&byte_len, length_bit_size)?; })
Ok(())
} }
/// Reserve the length to write an integer /// Reserve the length to write an integer