use crate::il;
use std::default;
#[derive(Clone, Debug)]
pub struct ManualEdge {
head_address: u64,
tail_address: u64,
condition: Option<il::Expression>,
}
impl ManualEdge {
pub fn new(
head_address: u64,
tail_address: u64,
condition: Option<il::Expression>,
) -> ManualEdge {
ManualEdge {
head_address,
tail_address,
condition,
}
}
pub fn head_address(&self) -> u64 {
self.head_address
}
pub fn tail_address(&self) -> u64 {
self.tail_address
}
pub fn condition(&self) -> Option<&il::Expression> {
self.condition.as_ref()
}
}
#[derive(Clone, Debug, Default)]
pub struct Options {
manual_edges: Vec<ManualEdge>,
unsupported_are_intrinsics: bool,
}
impl Options {
pub fn new() -> Options {
Options::default()
}
pub fn set_unsupported_are_intrinsics(&mut self, unsupported_are_intrinsics: bool) {
self.unsupported_are_intrinsics = unsupported_are_intrinsics;
}
pub fn unsupported_are_intrinsics(&self) -> bool {
self.unsupported_are_intrinsics
}
pub fn add_manual_edge(&mut self, manual_edge: ManualEdge) {
self.manual_edges.push(manual_edge);
}
pub fn manual_edges(&self) -> &[ManualEdge] {
&self.manual_edges
}
}
pub struct OptionsBuilder {
options: Options,
}
impl OptionsBuilder {
pub fn new() -> OptionsBuilder {
OptionsBuilder {
options: Options::default(),
}
}
pub fn unsupported_are_intrinsics(
mut self,
unsupported_are_intrinsics: bool,
) -> OptionsBuilder {
self.options.unsupported_are_intrinsics = unsupported_are_intrinsics;
self
}
pub fn add_manual_edge(mut self, manual_edge: ManualEdge) -> OptionsBuilder {
self.options.add_manual_edge(manual_edge);
self
}
pub fn build(self) -> Options {
self.options
}
}
impl default::Default for OptionsBuilder {
fn default() -> OptionsBuilder {
OptionsBuilder::new()
}
}