Sfoglia il codice sorgente

remove two more uses of `.clone`

know your type system?  and/or the borrow checker.  this makes the code
faster again, about 0.3 to 0.4 seconds on the hole6 example.  (from ~3.45
to ~3.05.)
Lucas Stadler 10 anni fa
parent
commit
ea6f4850a7
1 ha cambiato i file con 2 aggiunte e 3 eliminazioni
  1. 2 3
      rust/solve/src/dpll.rs

+ 2 - 3
rust/solve/src/dpll.rs

@ -145,14 +145,13 @@ pub fn dpll(clauses: Vec<Clause>) -> Option<BoundVars> {
145 145
                }
146 146
            }
147 147
        } else if clauses.iter().any(|c| is_clause_unit(&vars, c)) { // a unit clause exists, propagate
148
            let cs = clauses.clone();
149
            let clause = cs.iter().find(|&c| is_clause_unit(&vars, c)).unwrap();
148
            let clause = clauses.iter().find(|&c| is_clause_unit(&vars, c)).unwrap();
150 149
            let unknown = *clause.iter().find(|&v| is_unknown(&vars, *v)).unwrap();
151 150
            //println!("propagate {} from {:?}", unknown, clause);
152 151
            vars.insert(unknown);
153 152
        } else { // none of the above, decide (guess) an unknown variable
154 153
            let mut unknown: Var = 0;
155
            for c in clauses.clone() {
154
            for c in &clauses {
156 155
                match c.iter().find(|&v| is_unknown(vars, *v)) {
157 156
                    Some(&u) => { unknown = u; break }
158 157
                    None => continue