bits_io/buf/
bit_buf_mut_impls.rs1use bytes::BufMut;
2
3use super::{bit_buf_mut::BitBufMut, bits_mut::BitsMut};
4use crate::{buf::util::bytes_needed, prelude::*};
5
6impl BitBufMut for BitsMut {
7 fn remaining_mut(&self) -> usize {
8 usize::MAX - self.bit_len
9 }
10
11 fn chunk_mut(&mut self) -> &mut BitSlice {
12 if self.capacity == self.bit_len {
13 self.reserve(64);
14 }
15 self.spare_capacity_mut()
16 }
17
18 fn chunk_mut_bytes(&mut self) -> &mut bytes::buf::UninitSlice {
19 assert!(self.byte_aligned_mut());
20 if self.capacity == self.bit_len {
21 self.reserve(64);
22 }
23 self.inner.chunk_mut()
24 }
25
26 fn advance_mut(&mut self, cnt: usize) {
27 assert!(cnt <= self.remaining_mut(), "advance_mut past end");
28 let current_byte_len = bytes_needed(self.bit_len);
29 self.bit_len += cnt;
30 let new_byte_len = bytes_needed(self.bit_len);
31 if new_byte_len > current_byte_len {
34 unsafe {
35 self.inner.advance_mut(new_byte_len - current_byte_len);
36 }
37 }
38 }
39
40 fn byte_aligned_mut(&self) -> bool {
41 self.bit_start % 8 == 0 && self.bit_len % 8 == 0
42 }
43}