maskforge_core/index/
artifact.rs1use super::build::DeltaRow;
4use super::BindMode;
5use crate::error::Provenance;
6use crate::primitives::StateId;
7
8#[derive(Debug)]
9pub struct CompiledIndex {
10 delta: Vec<DeltaRow>,
11 provenance: Provenance,
12 bind_mode: BindMode,
13}
14
15impl CompiledIndex {
16 pub(crate) fn new(delta: Vec<DeltaRow>, provenance: Provenance, bind_mode: BindMode) -> Self {
17 Self {
18 delta,
19 provenance,
20 bind_mode,
21 }
22 }
23
24 pub(crate) fn row(&self, s: StateId) -> Option<&DeltaRow> {
25 self.delta.get(s.get() as usize)
26 }
27
28 #[must_use]
29 pub fn bind_mode(&self) -> BindMode {
30 self.bind_mode
31 }
32
33 #[must_use]
34 pub fn provenance(&self) -> Provenance {
35 self.provenance
36 }
37
38 #[must_use]
39 pub fn state_count(&self) -> usize {
40 self.delta.len()
41 }
42
43 #[must_use]
44 pub fn live_pairs(&self) -> usize {
45 self.delta.iter().map(DeltaRow::len).sum()
46 }
47
48 #[must_use]
49 pub fn max_row_len(&self) -> usize {
50 self.delta.iter().map(DeltaRow::len).max().unwrap_or(0)
51 }
52
53 #[must_use]
54 pub fn heap_bytes(&self) -> usize {
55 let outer = self.delta.capacity() * std::mem::size_of::<DeltaRow>();
56 let rows: usize = self.delta.iter().map(DeltaRow::heap_bytes).sum();
57 outer + rows
58 }
59}