density_rs/io/
write_buffer.rs

1use crate::io::write_signature::WriteSignature;
2
3pub struct WriteBuffer<'a> {
4    pub buffer: &'a mut [u8],
5    pub index: usize,
6}
7
8impl<'a> WriteBuffer<'a> {
9    pub fn new(buffer: &'a mut [u8]) -> Self {
10        WriteBuffer {
11            buffer,
12            index: 0,
13        }
14    }
15
16    #[inline(always)]
17    pub fn write_at(&mut self, index: usize, bytes: &[u8]) -> usize {
18        let future_index = index + bytes.len();
19        self.buffer[index..future_index].copy_from_slice(bytes);
20        future_index
21    }
22
23    #[inline(always)]
24    pub fn ink(&mut self, signature: &mut WriteSignature) {
25        self.write_at(signature.pos, &signature.value.to_le_bytes());
26    }
27
28    #[inline(always)]
29    pub fn push(&mut self, bytes: &[u8]) {
30        self.index = self.write_at(self.index, bytes);
31    }
32
33    #[inline(always)]
34    pub fn skip(&mut self, length: usize) {
35        self.index += length;
36    }
37
38    #[inline(always)]
39    pub fn rewind(&mut self, length: usize) {
40        self.index -= length;
41    }
42}