nostd_bv/traits/
bits_push.rs1use super::BitsMut;
2use crate::storage::BlockType;
3use alloc::vec::Vec;
4
5pub trait BitsPush: BitsMut {
7 fn push_bit(&mut self, value: bool);
9
10 fn pop_bit(&mut self) -> Option<bool>;
12
13 fn align_block(&mut self, value: bool) {
16 while Self::Block::mod_nbits(self.bit_len()) != 0 {
17 self.push_bit(value);
18 }
19 }
20
21 fn push_block(&mut self, mut value: Self::Block) {
29 self.align_block(false);
30
31 for _ in 0..Self::Block::nbits() {
32 self.push_bit(value & Self::Block::one() != Self::Block::zero());
33 value = value >> 1;
34 }
35 }
36}
37
38impl BitsPush for Vec<bool> {
39 fn push_bit(&mut self, value: bool) {
40 self.push(value);
41 }
42
43 fn pop_bit(&mut self) -> Option<bool> {
44 self.pop()
45 }
46}