diff options
Diffstat (limited to 'src/modelica_ast.rs')
-rw-r--r-- | src/modelica_ast.rs | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/modelica_ast.rs b/src/modelica_ast.rs index 33af4ac..6903900 100644 --- a/src/modelica_ast.rs +++ b/src/modelica_ast.rs @@ -104,7 +104,7 @@ impl ModelicaModel { vars.map(|c| c.name.clone()).collect() } -fn union_vecs(a: &Vec<String>, b: &Vec<String>) -> Vec<String> { +fn union_strings(a: &Vec<String>, b: &Vec<String>) -> Vec<String> { let mut u = a.clone(); for e in b { if !(u.contains(&e)) { @@ -114,6 +114,16 @@ fn union_vecs(a: &Vec<String>, b: &Vec<String>) -> Vec<String> { u } +fn intersect_strings(a: &Vec<String>, b: &Vec<String>) -> Vec<String> { + let mut both = vec![]; + for e in a { + if b.contains(&e) { + both.push(e.clone()); + } + } + both +} + impl Expr { // Order is undefined @@ -124,7 +134,7 @@ impl Expr { Ident(ref s) => vec![s.clone()], Der(ref e) | Abs(ref e) => e.identifiers(), BinExpr(_, ref e1, ref e2) => { - union_vecs(&e1.identifiers(), &e2.identifiers()) + union_strings(&e1.identifiers(), &e2.identifiers()) }, } } @@ -138,7 +148,7 @@ impl SimpleEquation { // Order is undefined pub fn identifiers(&self) -> Vec<String> { - union_vecs(&self.lhs.identifiers(), &self.rhs.identifiers()) + union_strings(&self.lhs.identifiers(), &self.rhs.identifiers()) } pub fn contains(&self, ident: &str) -> bool{ |