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}