qrcode_rust_shared/
qr_bit_buffer.rs1pub struct BitBuffer {
4 pub buffer: Vec<i32>,
5 pub length: usize,
6}
7
8impl BitBuffer {
9 pub fn new() -> Self {
10 BitBuffer {
11 buffer: Vec::new(),
12 length: 0,
13 }
14 }
15
16 pub fn put(&mut self, num: i32, length: i32) {
17 for i in (0..length).rev() {
18 self.put_bit(((num >> i) & 1) == 1);
19 }
20 }
21
22 pub fn put_bit(&mut self, bit: bool) {
23 let buf_index = self.length / 8;
24 if self.buffer.len() <= buf_index {
25 self.buffer.push(0);
26 }
27 if bit {
28 self.buffer[buf_index] |= 0x80 >> (self.length % 8);
29 }
30 self.length += 1;
31 }
32}
33
34impl Default for BitBuffer {
35 fn default() -> Self {
36 Self::new()
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_bit_buffer_basic() {
46 let mut buf = BitBuffer::new();
47 buf.put(0x0F, 4); assert_eq!(buf.length, 4);
49 assert_eq!(buf.buffer[0], 0xF0); }
51
52 #[test]
53 fn test_bit_buffer_multiple_bytes() {
54 let mut buf = BitBuffer::new();
55 buf.put(0xFF, 8);
56 buf.put(0x01, 1);
57 assert_eq!(buf.length, 9);
58 assert_eq!(buf.buffer[0], 0xFF);
59 assert_eq!(buf.buffer[1], 0x80);
60 }
61}