diff --git a/src/adf.rs b/src/adf.rs index 8069eca..6c3d527 100644 --- a/src/adf.rs +++ b/src/adf.rs @@ -15,7 +15,7 @@ impl Statement { pub fn new(label: &str, var: usize) -> Self { Statement { label: String::from_str(label).unwrap(), - var: var, + var, ac: None, } } @@ -32,6 +32,12 @@ pub struct Adf { dict: HashMap, // label to pos in vec } +impl Default for Adf{ + fn default() -> Self { + Adf::new() + } +} + impl Adf { pub fn new() -> Self { Adf { @@ -48,7 +54,7 @@ impl Adf { //self.stmts // .push(Statement::new(statement, pos.clone())); self.stmts - .push(Statement::new(statement, self.bdd.variable(pos).clone())); + .push(Statement::new(statement, self.bdd.variable(pos))); self.dict.insert(self.stmts[pos].label.to_string(), pos); } } @@ -111,7 +117,6 @@ impl Adf { } } if !change {break;} - println!("bla"); } interpretation } @@ -184,13 +189,13 @@ impl Adf { } } - pub fn findpairs<'a>(formula: &'a str) -> (&'a str,&'a str){ + pub fn findpairs(formula: &str) -> (&str,&str){ let lpos = Adf::findterm(formula).unwrap(); let rpos = Adf::findterm(&formula[lpos+1..]).unwrap() + lpos; (&formula[..lpos],&formula[lpos+1..rpos+1]) } - pub fn findterm_str<'a> (formula: &'a str) -> &'a str{ + pub fn findterm_str(formula: &str) -> &str{ &formula[..Adf::findterm(formula).unwrap()] } diff --git a/src/main.rs b/src/main.rs index 0417b42..12e1e0b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,24 +18,24 @@ fn main() { let mut ac: Vec<(String,String)> = Vec::new(); let path = Path::new(args[1].as_str()); if let Ok(lines) = read_lines(path){ - for resline in lines { - if let Ok(line) = resline { + for line in lines.flatten() { + //if let Ok(line) = resline { //let slice = line.as_str(); if line.starts_with("s("){ // let slice = line.as_str(); // statements.push(Adf::findterm_str(&slice[2..]).clone()); - statements.push(String::from(Adf::findterm_str(&line[2..]).replace(" ", ""))); + statements.push(Adf::findterm_str(line.strip_prefix("s(").unwrap()).replace(" ", "")); } else if line.starts_with("ac("){ - let (s,c) = Adf::findpairs(&line[3..]); - ac.push((String::from(s.replace(" ","")),String::from(c.replace(" ", "")))); + let (s,c) = Adf::findpairs(line.strip_prefix("ac(").unwrap()); + ac.push((s.replace(" ",""),c.replace(" ", ""))); } - } + //} } } println!("parsed {} statements", statements.len()); - if statements.len() > 0 && ac.len() > 0 { + if !statements.is_empty() && !ac.is_empty() { let mut my_adf = Adf::new(); my_adf.init_statements(statements.iter().map(AsRef::as_ref).collect()); for (s,c) in ac { diff --git a/src/obdd.rs b/src/obdd.rs index 2d481a2..87e263b 100644 --- a/src/obdd.rs +++ b/src/obdd.rs @@ -54,9 +54,9 @@ impl Bdd { lo } else { let node = BddNode { - var: var, - lo: lo, - hi: hi, + var, + lo, + hi, }; match self.hash.get(&node) { Some(n) => *n, @@ -65,7 +65,7 @@ impl Bdd { if newid == usize::MAX { panic!("Maximal amount of elements in node-table reached!") } - self.nodes.push(node.clone()); + self.nodes.push(node); self.hash.insert(node, newid); newid } @@ -87,6 +87,7 @@ impl Bdd { pub fn restrict(&mut self, subtree: Term, var: usize, val: bool) -> Term { let treenode = self.nodes[subtree]; + #[allow(clippy::clippy::collapsible_else_if)] // Better readabilty of the if/then/else structure of the algorithm if treenode.var > var || treenode.var == usize::MAX { subtree } else if treenode.var < var {