fugue_db/
intra_ref.rs

1use crate::Id;
2use crate::BasicBlock;
3use crate::Function;
4
5use crate::error::Error;
6use crate::schema;
7
8#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
9pub struct IntraRef<'db> {
10    source_id: Id<BasicBlock<'db>>,
11    target_id: Id<BasicBlock<'db>>,
12    function_id: Id<Function<'db>>,
13}
14
15impl<'db> IntraRef<'db> {
16    pub fn source_id(&self) -> Id<BasicBlock<'db>> {
17        self.source_id.clone()
18    }
19
20    pub fn target_id(&self) -> Id<BasicBlock<'db>> {
21        self.target_id.clone()
22    }
23
24    pub fn function_id(&self) -> Id<Function<'db>> {
25        self.function_id.clone()
26    }
27
28    pub(crate) fn from_reader(reader: schema::IntraRef) -> Result<Self, Error> {
29        Ok(Self {
30            source_id: reader.source().into(),
31            target_id: reader.target().into(),
32            function_id: reader.function().into(),
33        })
34    }
35
36    pub(crate) fn to_builder<'a: 'b, 'b>(
37        &self,
38        builder: &'b mut flatbuffers::FlatBufferBuilder<'a>
39    ) -> Result<flatbuffers::WIPOffset<schema::IntraRef<'a>>, Error> {
40        let mut ibuilder = schema::IntraRefBuilder::new(builder);
41
42        ibuilder.add_source(self.source_id().value());
43        ibuilder.add_target(self.target_id().value());
44        ibuilder.add_function(self.function_id().index() as u32);
45
46        Ok(ibuilder.finish())
47    }
48}