density_rs/io/
write_buffer.rs1use 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}