diff --git a/src/cp/Terms.scala b/src/cp/Terms.scala index 435807c65fdc08e2421420843e57431aaccfb07c..c56ac646b376425efd8ff10913a1b2c8e3257355 100644 --- a/src/cp/Terms.scala +++ b/src/cp/Terms.scala @@ -36,6 +36,15 @@ object Terms { } } + def customSolver[T](findAllMethod : Iterator[T]) : Term1[T,Boolean] = { + new Term[T,Boolean](null, null, null, null) with Term1[T,Boolean] { + val scalaFunction = null + override def findAll(implicit asConstraint: (Term[T,Boolean]) => Term[T,Boolean]) : Iterator[T] = findAllMethod + override def solve(implicit asConstraint: (Term[T,Boolean]) => Term[T,Boolean]) : T = throw new Exception("invoking `solve' on user-defined constraint") + override def find(implicit asConstraint: (Term[T,Boolean]) => Term[T,Boolean]) : Option[T] = throw new Exception("invoking `find' on user-defined constraint") + } + } + /** This construct represents a constraint with an expression to minimize */ abstract class MinConstraint[T](cons : Constraint[_], minFunc : IntTerm[_]) { val convertingFunction : (Seq[Expr] => T) @@ -115,7 +124,7 @@ object Terms { type IntTerm8[T1,T2,T3,T4,T5,T6,T7,T8] = Term8[T1,T2,T3,T4,T5,T6,T7,T8,Int] type IntTerm9[T1,T2,T3,T4,T5,T6,T7,T8,T9] = Term9[T1,T2,T3,T4,T5,T6,T7,T8,T9,Int] - sealed trait Term1[T1,R] extends Term[(T1),R] with Function1[T1,R] { + trait Term1[T1,R] extends Term[(T1),R] with Function1[T1,R] { val convertingFunction = converterOf(this).exprSeq2scala1[T1] _ type t2c = (Term1[T1,R]) => Term1[T1,Boolean] val scalaFunction : (T1) => R @@ -182,7 +191,7 @@ object Terms { } } - sealed trait Term2[T1,T2,R] extends Term[(T1,T2),R] with Function2[T1,T2,R] { + trait Term2[T1,T2,R] extends Term[(T1,T2),R] with Function2[T1,T2,R] { val convertingFunction = converterOf(this).exprSeq2scala2[T1,T2] _ type t2c = (Term2[T1,T2,R]) => Term2[T1,T2,Boolean] val scalaFunction : (T1,T2) => R @@ -284,7 +293,7 @@ object Terms { } } - sealed trait Term3[T1,T2,T3,R] extends Term[(T1,T2,T3),R] with Function3[T1,T2,T3,R] { + trait Term3[T1,T2,T3,R] extends Term[(T1,T2,T3),R] with Function3[T1,T2,T3,R] { val convertingFunction = converterOf(this).exprSeq2scala3[T1,T2,T3] _ type t2c = (Term3[T1,T2,T3,R]) => Term3[T1,T2,T3,Boolean] val scalaFunction : (T1,T2,T3) => R @@ -411,7 +420,7 @@ object Terms { } } - sealed trait Term4[T1,T2,T3,T4,R] extends Term[(T1,T2,T3,T4),R] with Function4[T1,T2,T3,T4,R] { + trait Term4[T1,T2,T3,T4,R] extends Term[(T1,T2,T3,T4),R] with Function4[T1,T2,T3,T4,R] { val convertingFunction = converterOf(this).exprSeq2scala4[T1,T2,T3,T4] _ type t2c = (Term4[T1,T2,T3,T4,R]) => Term4[T1,T2,T3,T4,Boolean] val scalaFunction : (T1,T2,T3,T4) => R @@ -553,7 +562,7 @@ object Terms { } } - sealed trait Term5[T1,T2,T3,T4,T5,R] extends Term[(T1,T2,T3,T4,T5),R] with Function5[T1,T2,T3,T4,T5,R] { + trait Term5[T1,T2,T3,T4,T5,R] extends Term[(T1,T2,T3,T4,T5),R] with Function5[T1,T2,T3,T4,T5,R] { val convertingFunction = converterOf(this).exprSeq2scala5[T1,T2,T3,T4,T5] _ type t2c = (Term5[T1,T2,T3,T4,T5,R]) => Term5[T1,T2,T3,T4,T5,Boolean] val scalaFunction : (T1,T2,T3,T4,T5) => R @@ -700,7 +709,7 @@ object Terms { } } - sealed trait Term6[T1,T2,T3,T4,T5,T6,R] extends Term[(T1,T2,T3,T4,T5,T6),R] with Function6[T1,T2,T3,T4,T5,T6,R] { + trait Term6[T1,T2,T3,T4,T5,T6,R] extends Term[(T1,T2,T3,T4,T5,T6),R] with Function6[T1,T2,T3,T4,T5,T6,R] { val convertingFunction = converterOf(this).exprSeq2scala6[T1,T2,T3,T4,T5,T6] _ type t2c = (Term6[T1,T2,T3,T4,T5,T6,R]) => Term6[T1,T2,T3,T4,T5,T6,Boolean] val scalaFunction : (T1,T2,T3,T4,T5,T6) => R @@ -842,7 +851,7 @@ object Terms { } } - sealed trait Term7[T1,T2,T3,T4,T5,T6,T7,R] extends Term[(T1,T2,T3,T4,T5,T6,T7),R] with Function7[T1,T2,T3,T4,T5,T6,T7,R] { + trait Term7[T1,T2,T3,T4,T5,T6,T7,R] extends Term[(T1,T2,T3,T4,T5,T6,T7),R] with Function7[T1,T2,T3,T4,T5,T6,T7,R] { val convertingFunction = converterOf(this).exprSeq2scala7[T1,T2,T3,T4,T5,T6,T7] _ type t2c = (Term7[T1,T2,T3,T4,T5,T6,T7,R]) => Term7[T1,T2,T3,T4,T5,T6,T7,Boolean] val scalaFunction : (T1,T2,T3,T4,T5,T6,T7) => R @@ -969,7 +978,7 @@ object Terms { } } - sealed trait Term8[T1,T2,T3,T4,T5,T6,T7,T8,R] extends Term[(T1,T2,T3,T4,T5,T6,T7,T8),R] with Function8[T1,T2,T3,T4,T5,T6,T7,T8,R] { + trait Term8[T1,T2,T3,T4,T5,T6,T7,T8,R] extends Term[(T1,T2,T3,T4,T5,T6,T7,T8),R] with Function8[T1,T2,T3,T4,T5,T6,T7,T8,R] { val convertingFunction = converterOf(this).exprSeq2scala8[T1,T2,T3,T4,T5,T6,T7,T8] _ type t2c = (Term8[T1,T2,T3,T4,T5,T6,T7,T8,R]) => Term8[T1,T2,T3,T4,T5,T6,T7,T8,Boolean] val scalaFunction : (T1,T2,T3,T4,T5,T6,T7,T8) => R @@ -1071,7 +1080,7 @@ object Terms { } } - sealed trait Term9[T1,T2,T3,T4,T5,T6,T7,T8,T9,R] extends Term[(T1,T2,T3,T4,T5,T6,T7,T8,T9),R] with Function9[T1,T2,T3,T4,T5,T6,T7,T8,T9,R] { + trait Term9[T1,T2,T3,T4,T5,T6,T7,T8,T9,R] extends Term[(T1,T2,T3,T4,T5,T6,T7,T8,T9),R] with Function9[T1,T2,T3,T4,T5,T6,T7,T8,T9,R] { val convertingFunction = converterOf(this).exprSeq2scala9[T1,T2,T3,T4,T5,T6,T7,T8,T9] _ type t2c = (Term9[T1,T2,T3,T4,T5,T6,T7,T8,T9,R]) => Term9[T1,T2,T3,T4,T5,T6,T7,T8,T9,Boolean] val scalaFunction : (T1,T2,T3,T4,T5,T6,T7,T8,T9) => R