Skip to main content

codec/
scratch.rs

1//! Reusable scratch buffers for codec operations.
2
3/// Scratch buffers for delta encoding.
4#[derive(Debug, Default)]
5pub struct CodecScratch {
6    component_changed: Vec<bool>,
7    field_mask: Vec<bool>,
8}
9
10impl CodecScratch {
11    /// Creates a new scratch buffer with no pre-allocated capacity.
12    #[must_use]
13    pub fn new() -> Self {
14        Self::default()
15    }
16
17    fn ensure_component_capacity(&mut self, components: usize) {
18        if self.component_changed.len() < components {
19            self.component_changed.resize(components, false);
20        }
21    }
22
23    fn ensure_field_capacity(&mut self, fields: usize) {
24        if self.field_mask.len() < fields {
25            self.field_mask.resize(fields, false);
26        }
27    }
28}
29
30impl CodecScratch {
31    pub(crate) fn component_and_field_masks_mut(
32        &mut self,
33        components: usize,
34        fields: usize,
35    ) -> (&mut [bool], &mut [bool]) {
36        self.ensure_component_capacity(components);
37        self.ensure_field_capacity(fields);
38        let component_changed = &mut self.component_changed[..components];
39        let field_mask = &mut self.field_mask[..fields];
40        (component_changed, field_mask)
41    }
42}