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:
parent
f09b56b36a
commit
4557a5babb
2 changed files with 20 additions and 1 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(())
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue