From d27ea43a1a7e105f5786af2309efda7f06c8be30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Blanc?= <regwblanc@gmail.com> Date: Fri, 23 Jul 2010 13:34:25 +0000 Subject: [PATCH] --- src/setconstraints/Manip.scala | 20 ++++++++++++++++++++ src/setconstraints/Tools.scala | 5 +++++ 2 files changed, 25 insertions(+) create mode 100644 src/setconstraints/Manip.scala diff --git a/src/setconstraints/Manip.scala b/src/setconstraints/Manip.scala new file mode 100644 index 000000000..4d3a91a6c --- /dev/null +++ b/src/setconstraints/Manip.scala @@ -0,0 +1,20 @@ +package setconstraints + +import setconstraints.Trees._ + +object Manip { + + def flatten(f: Formula): Formula = { + def flatten0(form: Formula): Formula = form match { + case And(fs) => { + And(fs.foldLeft(Nil: Seq[Formula])((acc, f) => f match { + case And(fs2) => acc ++ fs2.map(flatten0) + case f2 => acc :+ flatten0(f2) + })) + } + case f => f + } + Tools.fix(flatten0, f) + } + +} diff --git a/src/setconstraints/Tools.scala b/src/setconstraints/Tools.scala index 98257a867..8ee7dff83 100644 --- a/src/setconstraints/Tools.scala +++ b/src/setconstraints/Tools.scala @@ -8,4 +8,9 @@ object Tools { def toCaseClasses(classes: Seq[ClassTypeDef]): Seq[CaseClassDef] = classes.filter(_.isInstanceOf[CaseClassDef]).map(_.asInstanceOf[CaseClassDef]) + + def fix[A](f: (A) => A, a: A): A = { + val res = f(a) + if(res == a) a else fix(f, res) + } } -- GitLab