Skip to main content

vicis_core/ir/function/basic_block/
mod.rs

1use crate::{ir::module::name::Name, traits::basic_block::BasicBlock as BB};
2use id_arena::Id;
3use rustc_hash::FxHashSet;
4
5pub type BasicBlockId = Id<BasicBlock>;
6
7#[derive(Debug)]
8pub struct BasicBlock {
9    pub name: Option<Name>,
10    pub preds: FxHashSet<BasicBlockId>,
11    pub succs: FxHashSet<BasicBlockId>,
12}
13
14impl Default for BasicBlock {
15    fn default() -> Self {
16        Self {
17            name: None,
18            preds: FxHashSet::default(),
19            succs: FxHashSet::default(),
20        }
21    }
22}
23
24impl BasicBlock {
25    pub fn new() -> Self {
26        Self::default()
27    }
28
29    pub fn preds(&self) -> &FxHashSet<BasicBlockId> {
30        &self.preds
31    }
32
33    pub fn preds_mut(&mut self) -> &mut FxHashSet<BasicBlockId> {
34        &mut self.preds
35    }
36
37    pub fn succs(&self) -> &FxHashSet<BasicBlockId> {
38        &self.succs
39    }
40
41    pub fn succs_mut(&mut self) -> &mut FxHashSet<BasicBlockId> {
42        &mut self.succs
43    }
44}
45
46impl BB for BasicBlock {
47    fn preds(&self) -> &FxHashSet<Id<Self>> {
48        &self.preds
49    }
50
51    fn succs(&self) -> &FxHashSet<Id<Self>> {
52        &self.succs
53    }
54}