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

bool write optimizations

This commit is contained in:
Robin Appelman 2021-07-27 16:44:41 +02:00
commit 4557a5babb
2 changed files with 20 additions and 1 deletions

View file

@ -102,4 +102,23 @@ impl<'a, E: Endianness> WriteBuffer<'a, E> {
self.bytes.extend_from_slice(slice);
self.bit_len += slice.len() * 8
}
pub fn push_bool(&mut self, val: bool) {
let val = val as u8;
let bit_offset = self.bit_len() % 8;
if E::is_le() {
if bit_offset == 0 {
self.bytes.push(val);
} else {
*self.bytes.last_mut().unwrap() |= val << bit_offset;
}
} else {
if bit_offset == 0 {
self.bytes.push(val << 7);
} else {
*self.bytes.last_mut().unwrap() |= val << (7 - bit_offset);
}
}
self.bit_len += 1;
}
}

View file

@ -107,7 +107,7 @@ where
/// ```
#[inline]
pub fn write_bool(&mut self, value: bool) -> Result<()> {
self.push_bits(value as usize, 1);
self.buffer.push_bool(value);
Ok(())
}