Skip to main content

lift_core/
blocks.rs

1use crate::operations::OpKey;
2use crate::regions::RegionKey;
3use crate::values::ValueKey;
4use serde::{Deserialize, Serialize};
5use slotmap::new_key_type;
6
7new_key_type! {
8    pub struct BlockKey;
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct BlockData {
13    pub args: Vec<ValueKey>,
14    pub ops: Vec<OpKey>,
15    pub parent_region: Option<RegionKey>,
16}
17
18impl BlockData {
19    pub fn new() -> Self {
20        Self {
21            args: Vec::new(),
22            ops: Vec::new(),
23            parent_region: None,
24        }
25    }
26
27    pub fn num_args(&self) -> usize {
28        self.args.len()
29    }
30
31    pub fn num_ops(&self) -> usize {
32        self.ops.len()
33    }
34}
35
36impl Default for BlockData {
37    fn default() -> Self {
38        Self::new()
39    }
40}