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:
parent
227582cbc4
commit
75e50b6707
1 changed files with 18 additions and 26 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue