diff --git a/C/bignum.c b/C/bignum.c
index 6de6c8367..9da08c0a6 100644
--- a/C/bignum.c
+++ b/C/bignum.c
@@ -169,7 +169,7 @@ int Yap_CleanOpaqueVariable(CELL d) {
}
blob_info = blob_tag - USER_BLOB_START;
if (!GLOBAL_OpaqueHandlers)
- return FALSE;
+ return false;
if (!GLOBAL_OpaqueHandlers[blob_info].fail_handler)
return true;
return (GLOBAL_OpaqueHandlers[blob_info].fail_handler)(d);
@@ -509,4 +509,4 @@ void Yap_InitBigNums(void) {
Yap_InitCPred("string", 1, p_is_string, SafePredFlag);
Yap_InitCPred("opaque", 1, p_is_opaque, SafePredFlag);
Yap_InitCPred("nb_set_bit", 2, p_nb_set_bit, SafePredFlag);
-}
+}
\ No newline at end of file
diff --git a/include/YapDefs.h b/include/YapDefs.h
index 277534807..ffa0f2fa6 100755
--- a/include/YapDefs.h
+++ b/include/YapDefs.h
@@ -390,7 +390,7 @@ typedef YAP_Bool (*YAP_Opaque_CallOnGCRelocate)(YAP_opaque_tag_t, void *,
/// opaque variables can interact with the system
typedef struct YAP_opaque_handler_struct {
YAP_Opaque_CallOnCut cut_handler; //< called at cut, which may be a forward
- //cut or an exception.
+ // cut or an exception.
YAP_Opaque_CallOnFail
fail_handler; //< called at exit, it can be used to cleanup resources
YAP_Opaque_CallOnWrite write_handler; //< text representation
diff --git a/packages/gecode/gecode4_yap.cc b/packages/gecode/gecode4_yap.cc
index a8871531f..294562932 100644
--- a/packages/gecode/gecode4_yap.cc
+++ b/packages/gecode/gecode4_yap.cc
@@ -6,12 +6,12 @@
// under the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation, either version 3 of the License, or (at your
// option) any later version.
-//
+//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
// more details.
-//
+//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see .
//=============================================================================
@@ -22,1953 +22,1958 @@ using namespace std;
using namespace generic_gecode;
using namespace Gecode;
-extern "C"
-{
+extern "C" {
void gecode_init(void);
-
+
#include "config.h"
}
-namespace generic_gecode
-{
+namespace generic_gecode {
#ifndef HAVE_DYNARRAY
- template struct DynArray
- {
- T* _array;
- DynArray(int n): _array(new T[n]) {}
- ~DynArray() { delete[] _array; }
- T& operator[](int i) { return _array[i]; }
- };
-#define DYNARRAY(T,A,N) DynArray A(N)
+template struct DynArray {
+ T *_array;
+ DynArray(int n) : _array(new T[n]) {}
+ ~DynArray() { delete[] _array; }
+ T &operator[](int i) { return _array[i]; }
+};
+#define DYNARRAY(T, A, N) DynArray A(N)
#else
-#define DYNARRAY(T,A,N) T A[N]
+#define DYNARRAY(T, A, N) T A[N]
#endif
#ifndef HAVE_DYNARRAY
- struct SpecArray
- {
- int (*_array)[2];
- SpecArray(int n): _array((int (*)[2]) new int[n*2]) {}
- ~SpecArray() { delete[] _array; }
- int& operator()(int i,int j) { return _array[i][j]; }
- };
-#define SPECARRAY(A,N) SpecArray A(N)
-#define SPECARRAYELEM(A,I,J) A(I,J)
+struct SpecArray {
+ int (*_array)[2];
+ SpecArray(int n) : _array((int (*)[2]) new int[n * 2]) {}
+ ~SpecArray() { delete[] _array; }
+ int &operator()(int i, int j) { return _array[i][j]; }
+};
+#define SPECARRAY(A, N) SpecArray A(N)
+#define SPECARRAYELEM(A, I, J) A(I, J)
#define SPECARRAYDEREF(A) A._array
#else
-#define SPECARRAY(A,N) int A[N][2]
-#define SPECARRAYELEM(A,I,J) A[I][J]
+#define SPECARRAY(A, N) int A[N][2]
+#define SPECARRAYELEM(A, I, J) A[I][J]
#define SPECARRAYDEREF(A) A
#endif
}
-extern "C"
-{
+extern "C" {
#include "YapInterface.h"
- static YAP_opaque_tag_t gecode_space_tag;
- static YAP_opaque_handler_t gecode_space_handler;
+static YAP_opaque_tag_t gecode_space_tag;
+static YAP_opaque_handler_t gecode_space_handler;
- static YAP_Bool gecode_space_fail_handler(void* p)
- {
- delete *(GenericSpace**)p;
- return TRUE;
- }
+static YAP_Bool gecode_space_fail_handler(YAP_Term p) {
+ delete *(GenericSpace **)YAP_OpaqueObjectFromTerm(p);
+ return TRUE;
+}
- static YAP_Bool
- gecode_space_write_handler
- (FILE *stream, YAP_opaque_tag_t type, void *p, int flags)
- {
- fprintf(stream,"", p);
- return TRUE;
- }
+static YAP_Bool gecode_space_write_handler(FILE *stream, YAP_opaque_tag_t type,
+ void *p, int flags) {
+ fprintf(stream, "", p);
+ return TRUE;
+}
- static YAP_Term gecode_term_from_space(GenericSpace* s)
- {
- YAP_Term term =
- YAP_NewOpaqueObject(gecode_space_tag, sizeof(GenericSpace*));
- GenericSpace** ptr =
- (GenericSpace**) YAP_OpaqueObjectFromTerm(term);
- *ptr = s;
- return term;
- }
-
- static YAP_Bool gecode_new_space(void)
- {
- YAP_Term term = gecode_term_from_space(new GenericSpace);
- return YAP_Unify(YAP_ARG1, term);
- }
+static YAP_Term gecode_term_from_space(GenericSpace *s) {
+ YAP_Term term = YAP_NewOpaqueObject(gecode_space_tag, sizeof(GenericSpace *));
+ GenericSpace **ptr = (GenericSpace **)YAP_OpaqueObjectFromTerm(term);
+ *ptr = s;
+ return term;
+}
+static YAP_Bool gecode_new_space(void) {
+ YAP_Term term = gecode_term_from_space(new GenericSpace);
+ return YAP_Unify(YAP_ARG1, term);
+}
#ifndef DISJUNCTOR
- static inline GenericSpace*
- gecode_Space_from_term(YAP_Term t)
- {
- return * (GenericSpace**) YAP_OpaqueObjectFromTerm(t);
- }
+static inline GenericSpace *gecode_Space_from_term(YAP_Term t) {
+ return *(GenericSpace **)YAP_OpaqueObjectFromTerm(t);
+}
#else
- struct YapDisjunctor
- {
- GenericSpace* home;
- Disjunctor disj;
- YapDisjunctor(GenericSpace* home_)
- : home(home_), disj(*home_) {}
- };
+struct YapDisjunctor {
+ GenericSpace *home;
+ Disjunctor disj;
+ YapDisjunctor(GenericSpace *home_) : home(home_), disj(*home_) {}
+};
- static YAP_opaque_tag_t gecode_disjunctor_tag;
- static YAP_opaque_handler_t gecode_disjunctor_handler;
- static YAP_opaque_tag_t gecode_disjunctor_clause_tag;
- static YAP_opaque_handler_t gecode_disjunctor_clause_handler;
+static YAP_opaque_tag_t gecode_disjunctor_tag;
+static YAP_opaque_handler_t gecode_disjunctor_handler;
+static YAP_opaque_tag_t gecode_disjunctor_clause_tag;
+static YAP_opaque_handler_t gecode_disjunctor_clause_handler;
- static inline Disjunctor&
- gecode_Disjunctor_from_term(YAP_Term t)
- {
- return ((YapDisjunctor*) YAP_OpaqueObjectFromTerm(t))->disj;
- }
-
- static inline YapDisjunctor&
- gecode_YapDisjunctor_from_term(YAP_Term t)
- {
- return * (YapDisjunctor*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static inline Clause&
- gecode_Clause_from_term(YAP_Term t)
- {
- return * (Clause*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static inline GenericSpace*
- gecode_Space_from_term(YAP_Term t)
- {
- if (YAP_IsOpaqueObjectTerm(t, gecode_disjunctor_clause_tag))
- {
- Clause& c = gecode_Clause_from_term(t);
- return & (GenericSpace&) c;
- }
- return * (GenericSpace**) YAP_OpaqueObjectFromTerm(t);
+static inline Disjunctor &gecode_Disjunctor_from_term(YAP_Term t) {
+ return ((YapDisjunctor *)YAP_OpaqueObjectFromTerm(t))->disj;
+}
+
+static inline YapDisjunctor &gecode_YapDisjunctor_from_term(YAP_Term t) {
+ return *(YapDisjunctor *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline Clause &gecode_Clause_from_term(YAP_Term t) {
+ return *(Clause *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline GenericSpace *gecode_Space_from_term(YAP_Term t) {
+ if (YAP_IsOpaqueObjectTerm(t, gecode_disjunctor_clause_tag)) {
+ Clause &c = gecode_Clause_from_term(t);
+ return &(GenericSpace &)c;
}
+ return *(GenericSpace **)YAP_OpaqueObjectFromTerm(t);
+}
#endif
- static inline FloatAssign&
- gecode_FloatAssign_from_term(YAP_Term t)
- {
- return * (FloatAssign*) YAP_OpaqueObjectFromTerm(t);
+static inline FloatAssign &gecode_FloatAssign_from_term(YAP_Term t) {
+ return *(FloatAssign *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline IntAssign &gecode_IntAssign_from_term(YAP_Term t) {
+ return *(IntAssign *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline SetAssign &gecode_SetAssign_from_term(YAP_Term t) {
+ return *(SetAssign *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline TupleSet &gecode_TupleSet_from_term(YAP_Term t) {
+ return *(TupleSet *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline DFA &gecode_DFA_from_term(YAP_Term t) {
+ return *(DFA *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline FloatNum gecode_FloatNum_from_term(YAP_Term t) {
+ return (FloatNum)YAP_FloatOfTerm(t);
+}
+
+static YAP_Term gecode_SET_VAR_NONE;
+static YAP_Term gecode_SET_VAR_DEGREE_MIN;
+static YAP_Term gecode_SET_VAR_DEGREE_MAX;
+static YAP_Term gecode_SET_VAR_MIN_MIN;
+static YAP_Term gecode_SET_VAR_MIN_MAX;
+static YAP_Term gecode_SET_VAR_MAX_MIN;
+static YAP_Term gecode_SET_VAR_MAX_MAX;
+static YAP_Term gecode_SET_VAR_SIZE_MIN;
+static YAP_Term gecode_SET_VAR_SIZE_MAX;
+static YAP_Term gecode_SET_VAR_DEGREE_SIZE_MIN;
+static YAP_Term gecode_SET_VAR_DEGREE_SIZE_MAX;
+
+static inline SetVarBranch gecode_SetVarBranch_from_term(YAP_Term t) {
+
+ if (YAP_IsAtomTerm(t)) {
+ if (t == gecode_SET_VAR_SIZE_MIN)
+ return SET_VAR_SIZE_MIN();
+ if (t == gecode_SET_VAR_SIZE_MAX)
+ return SET_VAR_SIZE_MAX();
+ if (t == gecode_SET_VAR_NONE)
+ return SET_VAR_NONE();
+ if (t == gecode_SET_VAR_DEGREE_MIN)
+ return SET_VAR_DEGREE_MIN();
+ if (t == gecode_SET_VAR_DEGREE_MAX)
+ return SET_VAR_DEGREE_MAX();
+ if (t == gecode_SET_VAR_MIN_MIN)
+ return SET_VAR_MIN_MIN();
+ if (t == gecode_SET_VAR_MIN_MAX)
+ return SET_VAR_MIN_MAX();
+ if (t == gecode_SET_VAR_MAX_MIN)
+ return SET_VAR_MAX_MIN();
+ if (t == gecode_SET_VAR_MAX_MAX)
+ return SET_VAR_MAX_MAX();
+ if (t == gecode_SET_VAR_DEGREE_SIZE_MIN)
+ return SET_VAR_DEGREE_SIZE_MIN();
+ if (t == gecode_SET_VAR_DEGREE_SIZE_MAX)
+ return SET_VAR_DEGREE_SIZE_MAX();
}
+ cerr << "unsupported SET VAR" << endl;
+ exit(1);
+}
- static inline IntAssign&
- gecode_IntAssign_from_term(YAP_Term t)
- {
- return * (IntAssign*) YAP_OpaqueObjectFromTerm(t);
+static YAP_Term gecode_SET_VAL_MIN_INC;
+static YAP_Term gecode_SET_VAL_MIN_EXC;
+static YAP_Term gecode_SET_VAL_MED_INC;
+static YAP_Term gecode_SET_VAL_MED_EXC;
+static YAP_Term gecode_SET_VAL_MAX_INC;
+static YAP_Term gecode_SET_VAL_MAX_EXC;
+
+static inline SetValBranch gecode_SetValBranch_from_term(YAP_Term t) {
+ if (YAP_IsAtomTerm(t)) {
+ if (t == gecode_SET_VAL_MIN_INC)
+ return SET_VAL_MIN_INC();
+ if (t == gecode_SET_VAL_MIN_EXC)
+ return SET_VAL_MIN_EXC();
+ if (t == gecode_SET_VAL_MED_INC)
+ return SET_VAL_MED_INC();
+ if (t == gecode_SET_VAL_MED_EXC)
+ return SET_VAL_MED_EXC();
+ if (t == gecode_SET_VAL_MAX_INC)
+ return SET_VAL_MAX_INC();
+ if (t == gecode_SET_VAL_MAX_EXC)
+ return SET_VAL_MAX_EXC();
}
+ cerr << "unsupported INT VAL" << endl;
+ exit(1);
+}
- static inline SetAssign&
- gecode_SetAssign_from_term(YAP_Term t)
- {
- return * (SetAssign*) YAP_OpaqueObjectFromTerm(t);
+static inline SetBranchFilter &gecode_SetBranchFilter_from_term(YAP_Term t) {
+ return *(SetBranchFilter *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static YAP_Term gecode_INT_VAR_NONE;
+static YAP_Term gecode_INT_VAR_DEGREE_MIN;
+static YAP_Term gecode_INT_VAR_DEGREE_MAX;
+static YAP_Term gecode_INT_VAR_MIN_MIN;
+static YAP_Term gecode_INT_VAR_MIN_MAX;
+static YAP_Term gecode_INT_VAR_MAX_MIN;
+static YAP_Term gecode_INT_VAR_MAX_MAX;
+static YAP_Term gecode_INT_VAR_SIZE_MIN;
+static YAP_Term gecode_INT_VAR_SIZE_MAX;
+static YAP_Term gecode_INT_VAR_DEGREE_SIZE_MIN;
+static YAP_Term gecode_INT_VAR_DEGREE_SIZE_MAX;
+static YAP_Term gecode_INT_VAR_REGRET_MIN_MIN;
+static YAP_Term gecode_INT_VAR_REGRET_MIN_MAX;
+static YAP_Term gecode_INT_VAR_REGRET_MAX_MIN;
+static YAP_Term gecode_INT_VAR_REGRET_MAX_MAX;
+
+static inline IntVarBranch gecode_IntVarBranch_from_term(YAP_Term t) {
+ if (YAP_IsAtomTerm(t)) {
+ if (t == gecode_INT_VAR_SIZE_MIN)
+ return INT_VAR_SIZE_MIN();
+ if (t == gecode_INT_VAR_SIZE_MAX)
+ return INT_VAR_SIZE_MAX();
+ if (t == gecode_INT_VAR_NONE)
+ return INT_VAR_NONE();
+ if (t == gecode_INT_VAR_DEGREE_MIN)
+ return INT_VAR_DEGREE_MIN();
+ if (t == gecode_INT_VAR_DEGREE_MAX)
+ return INT_VAR_DEGREE_MAX();
+ if (t == gecode_INT_VAR_MIN_MIN)
+ return INT_VAR_MIN_MIN();
+ if (t == gecode_INT_VAR_MIN_MAX)
+ return INT_VAR_MIN_MAX();
+ if (t == gecode_INT_VAR_MAX_MIN)
+ return INT_VAR_MAX_MIN();
+ if (t == gecode_INT_VAR_MAX_MAX)
+ return INT_VAR_MAX_MAX();
+ if (t == gecode_INT_VAR_DEGREE_SIZE_MIN)
+ return INT_VAR_DEGREE_SIZE_MIN();
+ if (t == gecode_INT_VAR_DEGREE_SIZE_MAX)
+ return INT_VAR_DEGREE_SIZE_MAX();
+ if (t == gecode_INT_VAR_REGRET_MIN_MIN)
+ return INT_VAR_REGRET_MIN_MIN();
+ if (t == gecode_INT_VAR_REGRET_MIN_MAX)
+ return INT_VAR_REGRET_MIN_MAX();
+ if (t == gecode_INT_VAR_REGRET_MAX_MIN)
+ return INT_VAR_REGRET_MAX_MIN();
+ if (t == gecode_INT_VAR_REGRET_MAX_MAX)
+ return INT_VAR_REGRET_MAX_MAX();
}
+ cerr << "unsupported INT VAR" << endl;
+ exit(1);
+}
- static inline TupleSet&
- gecode_TupleSet_from_term(YAP_Term t)
- {
- return *(TupleSet *) YAP_OpaqueObjectFromTerm(t);
+static YAP_Term gecode_FLOAT_VAR_NONE;
+static YAP_Term gecode_FLOAT_VAR_DEGREE_MIN;
+static YAP_Term gecode_FLOAT_VAR_DEGREE_MAX;
+static YAP_Term gecode_FLOAT_VAR_MIN_MIN;
+static YAP_Term gecode_FLOAT_VAR_MIN_MAX;
+static YAP_Term gecode_FLOAT_VAR_MAX_MIN;
+static YAP_Term gecode_FLOAT_VAR_MAX_MAX;
+static YAP_Term gecode_FLOAT_VAR_SIZE_MIN;
+static YAP_Term gecode_FLOAT_VAR_SIZE_MAX;
+static YAP_Term gecode_FLOAT_VAR_DEGREE_SIZE_MIN;
+static YAP_Term gecode_FLOAT_VAR_DEGREE_SIZE_MAX;
+
+static inline FloatVarBranch gecode_FloatVarBranch_from_term(YAP_Term t) {
+ if (YAP_IsAtomTerm(t)) {
+ if (t == gecode_FLOAT_VAR_SIZE_MIN)
+ return FLOAT_VAR_SIZE_MIN();
+ if (t == gecode_FLOAT_VAR_SIZE_MAX)
+ return FLOAT_VAR_SIZE_MAX();
+ if (t == gecode_FLOAT_VAR_NONE)
+ return FLOAT_VAR_NONE();
+ if (t == gecode_FLOAT_VAR_DEGREE_MIN)
+ return FLOAT_VAR_DEGREE_MIN();
+ if (t == gecode_FLOAT_VAR_DEGREE_MAX)
+ return FLOAT_VAR_DEGREE_MAX();
+ if (t == gecode_FLOAT_VAR_MIN_MIN)
+ return FLOAT_VAR_MIN_MIN();
+ if (t == gecode_FLOAT_VAR_MIN_MAX)
+ return FLOAT_VAR_MIN_MAX();
+ if (t == gecode_FLOAT_VAR_MAX_MIN)
+ return FLOAT_VAR_MAX_MIN();
+ if (t == gecode_FLOAT_VAR_MAX_MAX)
+ return FLOAT_VAR_MAX_MAX();
+ if (t == gecode_FLOAT_VAR_DEGREE_SIZE_MIN)
+ return FLOAT_VAR_DEGREE_SIZE_MIN();
+ if (t == gecode_FLOAT_VAR_DEGREE_SIZE_MAX)
+ return FLOAT_VAR_DEGREE_SIZE_MAX();
}
+ cerr << "unsupported FLOAT VAR" << endl;
+ exit(1);
+}
- static inline DFA&
- gecode_DFA_from_term(YAP_Term t)
- {
- return *(DFA *) YAP_OpaqueObjectFromTerm(t);
+static YAP_Term gecode_INT_VAL_MIN;
+static YAP_Term gecode_INT_VAL_MED;
+static YAP_Term gecode_INT_VAL_MAX;
+static YAP_Term gecode_INT_VAL_SPLIT_MIN;
+static YAP_Term gecode_INT_VAL_SPLIT_MAX;
+static YAP_Term gecode_INT_VAL_RANGE_MIN;
+static YAP_Term gecode_INT_VAL_RANGE_MAX;
+static YAP_Term gecode_INT_VALUES_MIN;
+static YAP_Term gecode_INT_VALUES_MAX;
+
+static inline IntValBranch gecode_IntValBranch_from_term(YAP_Term t) {
+ if (YAP_IsAtomTerm(t)) {
+ if (t == gecode_INT_VAL_MIN)
+ return INT_VAL_MIN();
+ if (t == gecode_INT_VAL_MED)
+ return INT_VAL_MED();
+ if (t == gecode_INT_VAL_MAX)
+ return INT_VAL_MAX();
+ if (t == gecode_INT_VAL_SPLIT_MIN)
+ return INT_VAL_SPLIT_MIN();
+ if (t == gecode_INT_VAL_SPLIT_MAX)
+ return INT_VAL_SPLIT_MAX();
+ if (t == gecode_INT_VAL_RANGE_MIN)
+ return INT_VAL_RANGE_MIN();
+ if (t == gecode_INT_VAL_RANGE_MAX)
+ return INT_VAL_RANGE_MAX();
+ if (t == gecode_INT_VALUES_MIN)
+ return INT_VALUES_MIN();
+ if (t == gecode_INT_VALUES_MAX)
+ return INT_VALUES_MAX();
}
+ cerr << "unsupported INT VAL" << endl;
+ exit(1);
+}
- static inline FloatNum
- gecode_FloatNum_from_term(YAP_Term t)
- {
- return (FloatNum) YAP_FloatOfTerm(t);
+static YAP_Term gecode_FLOAT_VAL_SPLIT_MIN;
+static YAP_Term gecode_FLOAT_VAL_SPLIT_MAX;
+
+static inline FloatValBranch gecode_FloatValBranch_from_term(YAP_Term t) {
+ if (YAP_IsAtomTerm(t)) {
+ if (t == gecode_FLOAT_VAL_SPLIT_MIN)
+ return FLOAT_VAL_SPLIT_MIN();
+ if (t == gecode_FLOAT_VAL_SPLIT_MAX)
+ return FLOAT_VAL_SPLIT_MAX();
}
+ cerr << "unsupported FLOAT VAL" << endl;
+ exit(1);
+}
- static YAP_Term gecode_SET_VAR_NONE;
- static YAP_Term gecode_SET_VAR_DEGREE_MIN;
- static YAP_Term gecode_SET_VAR_DEGREE_MAX;
- static YAP_Term gecode_SET_VAR_MIN_MIN;
- static YAP_Term gecode_SET_VAR_MIN_MAX;
- static YAP_Term gecode_SET_VAR_MAX_MIN;
- static YAP_Term gecode_SET_VAR_MAX_MAX;
- static YAP_Term gecode_SET_VAR_SIZE_MIN;
- static YAP_Term gecode_SET_VAR_SIZE_MAX;
- static YAP_Term gecode_SET_VAR_DEGREE_SIZE_MIN;
- static YAP_Term gecode_SET_VAR_DEGREE_SIZE_MAX;
+static inline FloatVal &gecode_FloatVal_from_term(YAP_Term t) {
+ return *(FloatVal *)YAP_OpaqueObjectFromTerm(t);
+}
- static inline SetVarBranch
- gecode_SetVarBranch_from_term(YAP_Term t)
- {
+static inline Symmetries &gecode_Symmetries_from_term(YAP_Term t) {
+ return *(Symmetries *)YAP_OpaqueObjectFromTerm(t);
+}
- if (YAP_IsAtomTerm(t)) {
- if ( t == gecode_SET_VAR_SIZE_MIN)
- return SET_VAR_SIZE_MIN();
- if ( t == gecode_SET_VAR_SIZE_MAX)
- return SET_VAR_SIZE_MAX();
- if ( t == gecode_SET_VAR_NONE)
- return SET_VAR_NONE();
- if ( t == gecode_SET_VAR_DEGREE_MIN)
- return SET_VAR_DEGREE_MIN();
- if ( t == gecode_SET_VAR_DEGREE_MAX)
- return SET_VAR_DEGREE_MAX();
- if ( t == gecode_SET_VAR_MIN_MIN)
- return SET_VAR_MIN_MIN();
- if ( t == gecode_SET_VAR_MIN_MAX)
- return SET_VAR_MIN_MAX();
- if ( t == gecode_SET_VAR_MAX_MIN)
- return SET_VAR_MAX_MIN();
- if ( t == gecode_SET_VAR_MAX_MAX)
- return SET_VAR_MAX_MAX();
- if ( t == gecode_SET_VAR_DEGREE_SIZE_MIN)
- return SET_VAR_DEGREE_SIZE_MIN();
- if ( t == gecode_SET_VAR_DEGREE_SIZE_MAX)
- return SET_VAR_DEGREE_SIZE_MAX();
- }
- cerr << "unsupported SET VAR" << endl; exit(1);
+static inline IntBranchFilter &gecode_IntBranchFilter_from_term(YAP_Term t) {
+ return *(IntBranchFilter *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline BoolBranchFilter &gecode_BoolBranchFilter_from_term(YAP_Term t) {
+ return *(BoolBranchFilter *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline FloatBranchFilter &
+gecode_FloatBranchFilter_from_term(YAP_Term t) {
+ return *(FloatBranchFilter *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline SetVarValPrint &gecode_SetVarValPrint_from_term(YAP_Term t) {
+ return *(SetVarValPrint *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline IntVarValPrint &gecode_IntVarValPrint_from_term(YAP_Term t) {
+ return *(IntVarValPrint *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline BoolVarValPrint &gecode_BoolVarValPrint_from_term(YAP_Term t) {
+ return *(BoolVarValPrint *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static inline FloatVarValPrint &gecode_FloatVarValPrint_from_term(YAP_Term t) {
+ return *(FloatVarValPrint *)YAP_OpaqueObjectFromTerm(t);
+}
+
+static YAP_opaque_tag_t gecode_engine_tag;
+static YAP_opaque_handler_t gecode_engine_handler;
+
+static RestartMode gecode_RestartMode_from_term(YAP_Term t);
+
+static YAP_Bool gecode_new_engine(void) {
+ YAP_Term arg1 = YAP_ARG1;
+ YAP_Term arg2 = YAP_ARG2;
+ YAP_Term arg3 = YAP_ARG3;
+ bool restart = YAP_IntOfTerm(YAP_ArgOfTerm(1, arg3));
+ double threads = YAP_FloatOfTerm(YAP_ArgOfTerm(2, arg3));
+ unsigned int c_d = YAP_IntOfTerm(YAP_ArgOfTerm(3, arg3));
+ unsigned int a_d = YAP_IntOfTerm(YAP_ArgOfTerm(4, arg3));
+ unsigned int nogoods_limit = YAP_IntOfTerm(YAP_ArgOfTerm(6, arg3));
+ bool clone = (YAP_IntOfTerm(YAP_ArgOfTerm(7, arg3)) == 0 ? FALSE : TRUE);
+ RestartMode md;
+ YAP_Term t = YAP_ArgOfTerm(5, arg3);
+ if (YAP_IsAtomTerm(t)) {
+ md = gecode_RestartMode_from_term(t);
+ } else if (YAP_IsApplTerm(t)) {
+ md = gecode_RestartMode_from_term(
+ YAP_MkAtomTerm(YAP_NameOfFunctor(YAP_FunctorOfTerm(t))));
+ } else {
+ cerr << "bad engine cutoff option" << endl;
+ exit(1);
}
-
- static YAP_Term gecode_SET_VAL_MIN_INC;
- static YAP_Term gecode_SET_VAL_MIN_EXC;
- static YAP_Term gecode_SET_VAL_MED_INC;
- static YAP_Term gecode_SET_VAL_MED_EXC;
- static YAP_Term gecode_SET_VAL_MAX_INC;
- static YAP_Term gecode_SET_VAL_MAX_EXC;
-
- static inline SetValBranch
- gecode_SetValBranch_from_term(YAP_Term t)
- {
- if (YAP_IsAtomTerm(t)) {
- if ( t == gecode_SET_VAL_MIN_INC)
- return SET_VAL_MIN_INC();
- if ( t == gecode_SET_VAL_MIN_EXC)
- return SET_VAL_MIN_EXC();
- if ( t == gecode_SET_VAL_MED_INC)
- return SET_VAL_MED_INC();
- if ( t == gecode_SET_VAL_MED_EXC)
- return SET_VAL_MED_EXC();
- if ( t == gecode_SET_VAL_MAX_INC)
- return SET_VAL_MAX_INC();
- if ( t == gecode_SET_VAL_MAX_EXC)
- return SET_VAL_MAX_EXC();
- }
- cerr << "unsupported INT VAL" << endl; exit(1);
- }
-
- static inline SetBranchFilter&
- gecode_SetBranchFilter_from_term(YAP_Term t)
- {
- return * (SetBranchFilter*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static YAP_Term gecode_INT_VAR_NONE;
- static YAP_Term gecode_INT_VAR_DEGREE_MIN;
- static YAP_Term gecode_INT_VAR_DEGREE_MAX;
- static YAP_Term gecode_INT_VAR_MIN_MIN;
- static YAP_Term gecode_INT_VAR_MIN_MAX;
- static YAP_Term gecode_INT_VAR_MAX_MIN;
- static YAP_Term gecode_INT_VAR_MAX_MAX;
- static YAP_Term gecode_INT_VAR_SIZE_MIN;
- static YAP_Term gecode_INT_VAR_SIZE_MAX;
- static YAP_Term gecode_INT_VAR_DEGREE_SIZE_MIN;
- static YAP_Term gecode_INT_VAR_DEGREE_SIZE_MAX;
- static YAP_Term gecode_INT_VAR_REGRET_MIN_MIN;
- static YAP_Term gecode_INT_VAR_REGRET_MIN_MAX;
- static YAP_Term gecode_INT_VAR_REGRET_MAX_MIN;
- static YAP_Term gecode_INT_VAR_REGRET_MAX_MAX;
-
- static inline IntVarBranch
- gecode_IntVarBranch_from_term(YAP_Term t)
- {
- if (YAP_IsAtomTerm(t)) {
- if ( t == gecode_INT_VAR_SIZE_MIN)
- return INT_VAR_SIZE_MIN();
- if ( t == gecode_INT_VAR_SIZE_MAX)
- return INT_VAR_SIZE_MAX();
- if ( t == gecode_INT_VAR_NONE)
- return INT_VAR_NONE();
- if ( t == gecode_INT_VAR_DEGREE_MIN)
- return INT_VAR_DEGREE_MIN();
- if ( t == gecode_INT_VAR_DEGREE_MAX)
- return INT_VAR_DEGREE_MAX();
- if ( t == gecode_INT_VAR_MIN_MIN)
- return INT_VAR_MIN_MIN();
- if ( t == gecode_INT_VAR_MIN_MAX)
- return INT_VAR_MIN_MAX();
- if ( t == gecode_INT_VAR_MAX_MIN)
- return INT_VAR_MAX_MIN();
- if ( t == gecode_INT_VAR_MAX_MAX)
- return INT_VAR_MAX_MAX();
- if ( t == gecode_INT_VAR_DEGREE_SIZE_MIN)
- return INT_VAR_DEGREE_SIZE_MIN();
- if ( t == gecode_INT_VAR_DEGREE_SIZE_MAX)
- return INT_VAR_DEGREE_SIZE_MAX();
- if ( t == gecode_INT_VAR_REGRET_MIN_MIN)
- return INT_VAR_REGRET_MIN_MIN();
- if ( t == gecode_INT_VAR_REGRET_MIN_MAX)
- return INT_VAR_REGRET_MIN_MAX();
- if ( t == gecode_INT_VAR_REGRET_MAX_MIN)
- return INT_VAR_REGRET_MAX_MIN();
- if ( t == gecode_INT_VAR_REGRET_MAX_MAX)
- return INT_VAR_REGRET_MAX_MAX();
- }
- cerr << "unsupported INT VAR" << endl; exit(1);
- }
-
- static YAP_Term gecode_FLOAT_VAR_NONE;
- static YAP_Term gecode_FLOAT_VAR_DEGREE_MIN;
- static YAP_Term gecode_FLOAT_VAR_DEGREE_MAX;
- static YAP_Term gecode_FLOAT_VAR_MIN_MIN;
- static YAP_Term gecode_FLOAT_VAR_MIN_MAX;
- static YAP_Term gecode_FLOAT_VAR_MAX_MIN;
- static YAP_Term gecode_FLOAT_VAR_MAX_MAX;
- static YAP_Term gecode_FLOAT_VAR_SIZE_MIN;
- static YAP_Term gecode_FLOAT_VAR_SIZE_MAX;
- static YAP_Term gecode_FLOAT_VAR_DEGREE_SIZE_MIN;
- static YAP_Term gecode_FLOAT_VAR_DEGREE_SIZE_MAX;
-
- static inline FloatVarBranch
- gecode_FloatVarBranch_from_term(YAP_Term t)
- {
- if (YAP_IsAtomTerm(t)) {
- if ( t == gecode_FLOAT_VAR_SIZE_MIN)
- return FLOAT_VAR_SIZE_MIN();
- if ( t == gecode_FLOAT_VAR_SIZE_MAX)
- return FLOAT_VAR_SIZE_MAX();
- if ( t == gecode_FLOAT_VAR_NONE)
- return FLOAT_VAR_NONE();
- if ( t == gecode_FLOAT_VAR_DEGREE_MIN)
- return FLOAT_VAR_DEGREE_MIN();
- if ( t == gecode_FLOAT_VAR_DEGREE_MAX)
- return FLOAT_VAR_DEGREE_MAX();
- if ( t == gecode_FLOAT_VAR_MIN_MIN)
- return FLOAT_VAR_MIN_MIN();
- if ( t == gecode_FLOAT_VAR_MIN_MAX)
- return FLOAT_VAR_MIN_MAX();
- if ( t == gecode_FLOAT_VAR_MAX_MIN)
- return FLOAT_VAR_MAX_MIN();
- if ( t == gecode_FLOAT_VAR_MAX_MAX)
- return FLOAT_VAR_MAX_MAX();
- if ( t == gecode_FLOAT_VAR_DEGREE_SIZE_MIN)
- return FLOAT_VAR_DEGREE_SIZE_MIN();
- if ( t == gecode_FLOAT_VAR_DEGREE_SIZE_MAX)
- return FLOAT_VAR_DEGREE_SIZE_MAX();
- }
- cerr << "unsupported FLOAT VAR" << endl; exit(1);
- }
-
- static YAP_Term gecode_INT_VAL_MIN;
- static YAP_Term gecode_INT_VAL_MED;
- static YAP_Term gecode_INT_VAL_MAX;
- static YAP_Term gecode_INT_VAL_SPLIT_MIN;
- static YAP_Term gecode_INT_VAL_SPLIT_MAX;
- static YAP_Term gecode_INT_VAL_RANGE_MIN;
- static YAP_Term gecode_INT_VAL_RANGE_MAX;
- static YAP_Term gecode_INT_VALUES_MIN;
- static YAP_Term gecode_INT_VALUES_MAX;
-
- static inline IntValBranch
- gecode_IntValBranch_from_term(YAP_Term t)
- {
- if (YAP_IsAtomTerm(t)) {
- if ( t == gecode_INT_VAL_MIN)
- return INT_VAL_MIN();
- if ( t == gecode_INT_VAL_MED)
- return INT_VAL_MED();
- if ( t == gecode_INT_VAL_MAX)
- return INT_VAL_MAX();
- if ( t == gecode_INT_VAL_SPLIT_MIN)
- return INT_VAL_SPLIT_MIN();
- if ( t == gecode_INT_VAL_SPLIT_MAX)
- return INT_VAL_SPLIT_MAX();
- if ( t == gecode_INT_VAL_RANGE_MIN)
- return INT_VAL_RANGE_MIN();
- if ( t == gecode_INT_VAL_RANGE_MAX)
- return INT_VAL_RANGE_MAX();
- if ( t == gecode_INT_VALUES_MIN)
- return INT_VALUES_MIN();
- if ( t == gecode_INT_VALUES_MAX)
- return INT_VALUES_MAX();
- }
- cerr << "unsupported INT VAL" << endl; exit(1);
- }
-
- static YAP_Term gecode_FLOAT_VAL_SPLIT_MIN;
- static YAP_Term gecode_FLOAT_VAL_SPLIT_MAX;
-
- static inline FloatValBranch
- gecode_FloatValBranch_from_term(YAP_Term t)
- {
- if (YAP_IsAtomTerm(t)) {
- if ( t == gecode_FLOAT_VAL_SPLIT_MIN)
- return FLOAT_VAL_SPLIT_MIN();
- if ( t == gecode_FLOAT_VAL_SPLIT_MAX)
- return FLOAT_VAL_SPLIT_MAX();
- }
- cerr << "unsupported FLOAT VAL" << endl; exit(1);
- }
-
- static inline FloatVal&
- gecode_FloatVal_from_term(YAP_Term t)
- {
- return * (FloatVal*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static inline Symmetries&
- gecode_Symmetries_from_term(YAP_Term t)
- {
- return * (Symmetries*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static inline IntBranchFilter&
- gecode_IntBranchFilter_from_term(YAP_Term t)
- {
- return * (IntBranchFilter*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static inline BoolBranchFilter&
- gecode_BoolBranchFilter_from_term(YAP_Term t)
- {
- return * (BoolBranchFilter*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static inline FloatBranchFilter&
- gecode_FloatBranchFilter_from_term(YAP_Term t)
- {
- return * (FloatBranchFilter*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static inline SetVarValPrint&
- gecode_SetVarValPrint_from_term(YAP_Term t)
- {
- return * (SetVarValPrint*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static inline IntVarValPrint&
- gecode_IntVarValPrint_from_term(YAP_Term t)
- {
- return * (IntVarValPrint*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static inline BoolVarValPrint&
- gecode_BoolVarValPrint_from_term(YAP_Term t)
- {
- return * (BoolVarValPrint*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static inline FloatVarValPrint&
- gecode_FloatVarValPrint_from_term(YAP_Term t)
- {
- return * (FloatVarValPrint*) YAP_OpaqueObjectFromTerm(t);
- }
-
- static YAP_opaque_tag_t gecode_engine_tag;
- static YAP_opaque_handler_t gecode_engine_handler;
-
- static RestartMode gecode_RestartMode_from_term(YAP_Term t);
-
- static YAP_Bool gecode_new_engine(void)
- {
- YAP_Term arg1 = YAP_ARG1;
- YAP_Term arg2 = YAP_ARG2;
- YAP_Term arg3 = YAP_ARG3;
- bool restart = YAP_IntOfTerm(YAP_ArgOfTerm(1, arg3));
- double threads = YAP_FloatOfTerm(YAP_ArgOfTerm(2, arg3));
- unsigned int c_d = YAP_IntOfTerm(YAP_ArgOfTerm(3, arg3));
- unsigned int a_d = YAP_IntOfTerm(YAP_ArgOfTerm(4, arg3));
- unsigned int nogoods_limit = YAP_IntOfTerm(YAP_ArgOfTerm(6, arg3));
- bool clone = ( YAP_IntOfTerm(YAP_ArgOfTerm(7, arg3)) == 0 ? FALSE : TRUE );
- RestartMode md;
- YAP_Term t = YAP_ArgOfTerm(5, arg3);
- if (YAP_IsAtomTerm(t)) {
- md = gecode_RestartMode_from_term(t);
- } else if (YAP_IsApplTerm(t)) {
- md = gecode_RestartMode_from_term(YAP_MkAtomTerm(YAP_NameOfFunctor(YAP_FunctorOfTerm(t))));
+ Search::Cutoff *cutoff;
+ YAP_Term t_s, t_b;
+ switch (md) {
+ case RM_CONSTANT:
+ YAP_Term t_a;
+ if (YAP_ArityOfFunctor(YAP_FunctorOfTerm(t)) == 1 &&
+ YAP_IsIntTerm(t_a = YAP_ArgOfTerm(1, t))) {
+ unsigned long int a = YAP_IntOfTerm(t_a);
+ cutoff = Search::Cutoff::constant(a);
} else {
- cerr << "bad engine cutoff option" << endl; exit(1);
+ cerr << "bad parameter for constant" << endl;
+ exit(1);
}
- Search::Cutoff* cutoff;
- YAP_Term t_s, t_b;
- switch (md) {
- case RM_CONSTANT:
- YAP_Term t_a;
- if (YAP_ArityOfFunctor(YAP_FunctorOfTerm(t)) == 1 &&
- YAP_IsIntTerm(t_a = YAP_ArgOfTerm(1,t))) {
- unsigned long int a = YAP_IntOfTerm(t_a);
- cutoff = Search::Cutoff::constant(a);
- } else {
- cerr << "bad parameter for constant" << endl; exit(1);
- }
- break;
- case RM_GEOMETRIC:
- if (YAP_ArityOfFunctor(YAP_FunctorOfTerm(t)) == 2 &&
- YAP_IsIntTerm(t_s = YAP_ArgOfTerm(1,t)) &&
- YAP_IsIntTerm(t_b = YAP_ArgOfTerm(2,t))) {
- unsigned long int s = YAP_IntOfTerm(t_s);
- unsigned long int b = YAP_IntOfTerm(t_b);
- cutoff = Search::Cutoff::geometric(s,b);
- } else {
- cerr << "bad parameter for geometric" << endl; exit(1);
- }
- break;
- case RM_LUBY:
- if (YAP_ArityOfFunctor(YAP_FunctorOfTerm(t)) == 1 &&
- YAP_IsIntTerm(t_s = YAP_ArgOfTerm(1,t))) {
- unsigned long int s = YAP_IntOfTerm(t_s);
- cutoff = Search::Cutoff::luby(s);
- } else {
- cerr << "bad parameter for luby" << endl; exit(1);
- }
- break;
- case RM_LINEAR:
- if (YAP_ArityOfFunctor(YAP_FunctorOfTerm(t)) == 1 &&
- YAP_IsIntTerm(t_s = YAP_ArgOfTerm(1,t))) {
- unsigned long int s = YAP_IntOfTerm(t_s);
- cutoff = Search::Cutoff::linear(s);
- } else {
- cerr << "bad parameter for linear" << endl; exit(1);
- }
- break;
- default:
- cutoff = NULL;
+ break;
+ case RM_GEOMETRIC:
+ if (YAP_ArityOfFunctor(YAP_FunctorOfTerm(t)) == 2 &&
+ YAP_IsIntTerm(t_s = YAP_ArgOfTerm(1, t)) &&
+ YAP_IsIntTerm(t_b = YAP_ArgOfTerm(2, t))) {
+ unsigned long int s = YAP_IntOfTerm(t_s);
+ unsigned long int b = YAP_IntOfTerm(t_b);
+ cutoff = Search::Cutoff::geometric(s, b);
+ } else {
+ cerr << "bad parameter for geometric" << endl;
+ exit(1);
}
- Search::Options opt;
- opt.threads = threads;
- opt.c_d = c_d;
- opt.a_d = a_d;
- opt.cutoff = cutoff;
- opt.nogoods_limit = nogoods_limit;
- opt.clone = clone;
- opt.stop = NULL;
- GenericSpace* space = gecode_Space_from_term(arg1);
- GenericEngine* engine = space->new_engine(restart,opt);
- YAP_Term y_engine =
- YAP_NewOpaqueObject(gecode_engine_tag, sizeof(GenericEngine*));
- GenericEngine** ptr =
- (GenericEngine**) YAP_OpaqueObjectFromTerm(y_engine);
- *ptr = engine;
- return YAP_Unify(arg2, y_engine);
+ break;
+ case RM_LUBY:
+ if (YAP_ArityOfFunctor(YAP_FunctorOfTerm(t)) == 1 &&
+ YAP_IsIntTerm(t_s = YAP_ArgOfTerm(1, t))) {
+ unsigned long int s = YAP_IntOfTerm(t_s);
+ cutoff = Search::Cutoff::luby(s);
+ } else {
+ cerr << "bad parameter for luby" << endl;
+ exit(1);
+ }
+ break;
+ case RM_LINEAR:
+ if (YAP_ArityOfFunctor(YAP_FunctorOfTerm(t)) == 1 &&
+ YAP_IsIntTerm(t_s = YAP_ArgOfTerm(1, t))) {
+ unsigned long int s = YAP_IntOfTerm(t_s);
+ cutoff = Search::Cutoff::linear(s);
+ } else {
+ cerr << "bad parameter for linear" << endl;
+ exit(1);
+ }
+ break;
+ default:
+ cutoff = NULL;
}
+ Search::Options opt;
+ opt.threads = threads;
+ opt.c_d = c_d;
+ opt.a_d = a_d;
+ opt.cutoff = cutoff;
+ opt.nogoods_limit = nogoods_limit;
+ opt.clone = clone;
+ opt.stop = NULL;
+ GenericSpace *space = gecode_Space_from_term(arg1);
+ GenericEngine *engine = space->new_engine(restart, opt);
+ YAP_Term y_engine =
+ YAP_NewOpaqueObject(gecode_engine_tag, sizeof(GenericEngine *));
+ GenericEngine **ptr = (GenericEngine **)YAP_OpaqueObjectFromTerm(y_engine);
+ *ptr = engine;
+ return YAP_Unify(arg2, y_engine);
+}
- static inline GenericEngine*
- gecode_engine_from_term(YAP_Term t)
- {
- return * (GenericEngine**) YAP_OpaqueObjectFromTerm(t);
- }
+static inline GenericEngine *gecode_engine_from_term(YAP_Term t) {
+ return *(GenericEngine **)YAP_OpaqueObjectFromTerm(t);
+}
- static YAP_Bool gecode_engine_fail_handler(void* p)
- {
- delete *(GenericEngine**)p;
- return TRUE;
- }
+static YAP_Bool gecode_engine_fail_handler(YAP_Term p) {
+ delete *(GenericEngine **)YAP_OpaqueObjectFromTerm(p);
+ return TRUE;
+}
- static YAP_Bool
- gecode_engine_write_handler
- (FILE *stream, YAP_opaque_tag_t type, void *p, int flags)
- {
- fprintf(stream,"", p);
- return TRUE;
- }
+static YAP_Bool gecode_engine_write_handler(FILE *stream, YAP_opaque_tag_t type,
+ void *p, int flags) {
+ fprintf(stream, "", p);
+ return TRUE;
+}
- static YAP_Bool gecode_engine_search(void)
- {
- GenericEngine* engine = gecode_engine_from_term(YAP_ARG1);
- GenericSpace* space = engine->next();
- if (space)
- {
- YAP_Term term = gecode_term_from_space(space);
- return YAP_Unify(YAP_ARG2, term);
- }
- else YAP_cut_fail();
- }
+static YAP_Bool gecode_engine_search(void) {
+ GenericEngine *engine = gecode_engine_from_term(YAP_ARG1);
+ GenericSpace *space = engine->next();
+ if (space) {
+ YAP_Term term = gecode_term_from_space(space);
+ return YAP_Unify(YAP_ARG2, term);
+ } else
+ YAP_cut_fail();
+}
#ifdef DISJUNCTOR
- static YAP_Bool gecode_new_disjunctor(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- YAP_Term term =
+static YAP_Bool gecode_new_disjunctor(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ YAP_Term term =
YAP_NewOpaqueObject(gecode_disjunctor_tag, sizeof(YapDisjunctor));
- new (YAP_OpaqueObjectFromTerm(term)) YapDisjunctor(space);
- return YAP_Unify(result, term);
- }
+ new (YAP_OpaqueObjectFromTerm(term)) YapDisjunctor(space);
+ return YAP_Unify(result, term);
+}
- static YAP_Bool
- gecode_disjunctor_write_handler
- (FILE *stream, YAP_opaque_tag_t type, void *p, int flags)
- {
- fprintf(stream,"", p);
- return TRUE;
- }
+static YAP_Bool gecode_disjunctor_write_handler(FILE *stream,
+ YAP_opaque_tag_t type, void *p,
+ int flags) {
+ fprintf(stream, "", p);
+ return TRUE;
+}
- static YAP_Bool gecode_new_clause(void)
- {
- YAP_Term result = YAP_ARG1;
- YapDisjunctor& disj = gecode_YapDisjunctor_from_term(YAP_ARG2);
- YAP_Term term =
+static YAP_Bool gecode_new_clause(void) {
+ YAP_Term result = YAP_ARG1;
+ YapDisjunctor &disj = gecode_YapDisjunctor_from_term(YAP_ARG2);
+ YAP_Term term =
YAP_NewOpaqueObject(gecode_disjunctor_clause_tag, sizeof(Clause));
- new (YAP_OpaqueObjectFromTerm(term)) Clause(*disj.home,disj.disj);
- return YAP_Unify(result, term);
- }
+ new (YAP_OpaqueObjectFromTerm(term)) Clause(*disj.home, disj.disj);
+ return YAP_Unify(result, term);
+}
- static YAP_Bool
- gecode_clause_write_handler
- (FILE *stream_, YAP_opaque_tag_t type, void *p, int flags)
- {
- fprintf(stream,"", p);
- return TRUE;
- }
+static YAP_Bool gecode_clause_write_handler(FILE *stream_,
+ YAP_opaque_tag_t type, void *p,
+ int flags) {
+ fprintf(stream, "", p);
+ return TRUE;
+}
- static IntVar gecode_IntVar_from_term(GenericSpace*,YAP_Term);
- static BoolVar gecode_BoolVar_from_term(GenericSpace*,YAP_Term);
- static FloatVar gecode_FloatVar_from_term(GenericSpace*,YAP_Term);
- static SetVar gecode_SetVar_from_term(GenericSpace*,YAP_Term);
+static IntVar gecode_IntVar_from_term(GenericSpace *, YAP_Term);
+static BoolVar gecode_BoolVar_from_term(GenericSpace *, YAP_Term);
+static FloatVar gecode_FloatVar_from_term(GenericSpace *, YAP_Term);
+static SetVar gecode_SetVar_from_term(GenericSpace *, YAP_Term);
- static YAP_Bool gecode_clause_intvar_forward(void)
- {
- Clause& clause = gecode_Clause_from_term(YAP_ARG1);
- GenericSpace* outer = clause.generic_parent();
- GenericSpace* inner = clause.generic_space();
- IntVar outer_var = gecode_IntVar_from_term(outer, YAP_ARG2);
- IntVar inner_var = gecode_IntVar_from_term(inner, YAP_ARG3);
- clause.forward(outer_var,inner_var);
- return TRUE;
- }
+static YAP_Bool gecode_clause_intvar_forward(void) {
+ Clause &clause = gecode_Clause_from_term(YAP_ARG1);
+ GenericSpace *outer = clause.generic_parent();
+ GenericSpace *inner = clause.generic_space();
+ IntVar outer_var = gecode_IntVar_from_term(outer, YAP_ARG2);
+ IntVar inner_var = gecode_IntVar_from_term(inner, YAP_ARG3);
+ clause.forward(outer_var, inner_var);
+ return TRUE;
+}
- static YAP_Bool gecode_clause_boolvar_forward(void)
- {
- Clause& clause = gecode_Clause_from_term(YAP_ARG1);
- GenericSpace* outer = clause.generic_parent();
- GenericSpace* inner = clause.generic_space();
- BoolVar outer_var = gecode_BoolVar_from_term(outer, YAP_ARG2);
- BoolVar inner_var = gecode_BoolVar_from_term(inner, YAP_ARG3);
- clause.forward(outer_var,inner_var);
- return TRUE;
- }
+static YAP_Bool gecode_clause_boolvar_forward(void) {
+ Clause &clause = gecode_Clause_from_term(YAP_ARG1);
+ GenericSpace *outer = clause.generic_parent();
+ GenericSpace *inner = clause.generic_space();
+ BoolVar outer_var = gecode_BoolVar_from_term(outer, YAP_ARG2);
+ BoolVar inner_var = gecode_BoolVar_from_term(inner, YAP_ARG3);
+ clause.forward(outer_var, inner_var);
+ return TRUE;
+}
- static YAP_Bool gecode_clause_setvar_forward(void)
- {
- Clause& clause = gecode_Clause_from_term(YAP_ARG1);
- GenericSpace* outer = clause.generic_parent();
- GenericSpace* inner = clause.generic_space();
- SetVar outer_var = gecode_SetVar_from_term(outer, YAP_ARG2);
- SetVar inner_var = gecode_SetVar_from_term(inner, YAP_ARG3);
- clause.forward(outer_var,inner_var);
- return TRUE;
- }
+static YAP_Bool gecode_clause_setvar_forward(void) {
+ Clause &clause = gecode_Clause_from_term(YAP_ARG1);
+ GenericSpace *outer = clause.generic_parent();
+ GenericSpace *inner = clause.generic_space();
+ SetVar outer_var = gecode_SetVar_from_term(outer, YAP_ARG2);
+ SetVar inner_var = gecode_SetVar_from_term(inner, YAP_ARG3);
+ clause.forward(outer_var, inner_var);
+ return TRUE;
+}
#endif
- static YAP_Bool gecode_new_intvar_from_bounds(void)
- {
- YAP_Term ivar = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- int lo = YAP_IntOfTerm(YAP_ARG3);
- int hi = YAP_IntOfTerm(YAP_ARG4);
- int i = space->new_ivar(lo, hi);
- YAP_Term y_i = YAP_MkIntTerm(i);
- return YAP_Unify(ivar, y_i);
- }
+static YAP_Bool gecode_new_intvar_from_bounds(void) {
+ YAP_Term ivar = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ int lo = YAP_IntOfTerm(YAP_ARG3);
+ int hi = YAP_IntOfTerm(YAP_ARG4);
+ int i = space->new_ivar(lo, hi);
+ YAP_Term y_i = YAP_MkIntTerm(i);
+ return YAP_Unify(ivar, y_i);
+}
- static YAP_Bool gecode_new_floatvar_from_bounds(void)
- {
- YAP_Term ivar = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- double lo = YAP_FloatOfTerm(YAP_ARG3);
- double hi = YAP_FloatOfTerm(YAP_ARG4);
- int i = space->new_fvar(lo, hi);
- YAP_Term y_i = YAP_MkIntTerm(i);
- return YAP_Unify(ivar, y_i);
- }
+static YAP_Bool gecode_new_floatvar_from_bounds(void) {
+ YAP_Term ivar = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ double lo = YAP_FloatOfTerm(YAP_ARG3);
+ double hi = YAP_FloatOfTerm(YAP_ARG4);
+ int i = space->new_fvar(lo, hi);
+ YAP_Term y_i = YAP_MkIntTerm(i);
+ return YAP_Unify(ivar, y_i);
+}
- static int
- gecode_list_length(YAP_Term l)
- {
- int n = 0;
- while (YAP_IsPairTerm(l))
- {
- n += 1;
- l = YAP_TailOfTerm(l);
- }
- return n;
+static int gecode_list_length(YAP_Term l) {
+ int n = 0;
+ while (YAP_IsPairTerm(l)) {
+ n += 1;
+ l = YAP_TailOfTerm(l);
}
+ return n;
+}
- static IntSet
- gecode_IntSet_from_term(YAP_Term specs)
+static IntSet gecode_IntSet_from_term(YAP_Term specs) {
+ int n = gecode_list_length(specs);
+ SPECARRAY(r, n);
+ int i = 0;
+ while (YAP_IsPairTerm(specs)) {
+ YAP_Term head = YAP_HeadOfTerm(specs);
+ specs = YAP_TailOfTerm(specs);
+ SPECARRAYELEM(r, i, 0) = YAP_IntOfTerm(YAP_ArgOfTerm(1, head));
+ SPECARRAYELEM(r, i, 1) = YAP_IntOfTerm(YAP_ArgOfTerm(2, head));
+ i += 1;
+ }
+ return IntSet(SPECARRAYDEREF(r), n);
+}
+
+static YAP_Bool gecode_new_intvar_from_intset(void) {
+ YAP_Term ivar = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ YAP_Term specs = YAP_ARG3;
+ IntSet iset = gecode_IntSet_from_term(specs);
+ int i = space->new_ivar(iset);
+ return YAP_Unify(ivar, YAP_MkIntTerm(i));
+}
+
+static YAP_Bool gecode_new_boolvar(void) {
+ YAP_Term bvar = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ int i = space->new_bvar();
+ return YAP_Unify(bvar, YAP_MkIntTerm(i));
+}
+
+static YAP_Bool gecode_new_setvar_1(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ int GlbMin = YAP_IntOfTerm(YAP_ARG3);
+ int GlbMax = YAP_IntOfTerm(YAP_ARG4);
+ int LubMin = YAP_IntOfTerm(YAP_ARG5);
+ int LubMax = YAP_IntOfTerm(YAP_ARG6);
+ int CardMin = YAP_IntOfTerm(YAP_ARG7);
+ int CardMax = YAP_IntOfTerm(YAP_ARG8);
+ int idx = space->new_svar(GlbMin, GlbMax, LubMin, LubMax, CardMin, CardMax);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_new_setvar_2(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ int GlbMin = YAP_IntOfTerm(YAP_ARG3);
+ int GlbMax = YAP_IntOfTerm(YAP_ARG4);
+ int LubMin = YAP_IntOfTerm(YAP_ARG5);
+ int LubMax = YAP_IntOfTerm(YAP_ARG6);
+ int CardMin = YAP_IntOfTerm(YAP_ARG7);
+ int idx = space->new_svar(GlbMin, GlbMax, LubMin, LubMax, CardMin);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_new_setvar_3(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ int GlbMin = YAP_IntOfTerm(YAP_ARG3);
+ int GlbMax = YAP_IntOfTerm(YAP_ARG4);
+ int LubMin = YAP_IntOfTerm(YAP_ARG5);
+ int LubMax = YAP_IntOfTerm(YAP_ARG6);
+ int idx = space->new_svar(GlbMin, GlbMax, LubMin, LubMax);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_new_setvar_4(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
+ int LubMin = YAP_IntOfTerm(YAP_ARG4);
+ int LubMax = YAP_IntOfTerm(YAP_ARG5);
+ int CardMin = YAP_IntOfTerm(YAP_ARG6);
+ int CardMax = YAP_IntOfTerm(YAP_ARG7);
+ int idx = space->new_svar(Glb, LubMin, LubMax, CardMin, CardMax);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_new_setvar_5(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
+ int LubMin = YAP_IntOfTerm(YAP_ARG4);
+ int LubMax = YAP_IntOfTerm(YAP_ARG5);
+ int CardMin = YAP_IntOfTerm(YAP_ARG6);
+ int idx = space->new_svar(Glb, LubMin, LubMax, CardMin);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_new_setvar_6(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
+ int LubMin = YAP_IntOfTerm(YAP_ARG4);
+ int LubMax = YAP_IntOfTerm(YAP_ARG5);
+ int idx = space->new_svar(Glb, LubMin, LubMax);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_new_setvar_7(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ int GlbMin = YAP_IntOfTerm(YAP_ARG3);
+ int GlbMax = YAP_IntOfTerm(YAP_ARG4);
+ IntSet Lub = gecode_IntSet_from_term(YAP_ARG5);
+ int CardMin = YAP_IntOfTerm(YAP_ARG6);
+ int CardMax = YAP_IntOfTerm(YAP_ARG7);
+ int idx = space->new_svar(GlbMin, GlbMax, Lub, CardMin, CardMax);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_new_setvar_8(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ int GlbMin = YAP_IntOfTerm(YAP_ARG3);
+ int GlbMax = YAP_IntOfTerm(YAP_ARG4);
+ IntSet Lub = gecode_IntSet_from_term(YAP_ARG5);
+ int CardMin = YAP_IntOfTerm(YAP_ARG6);
+ int idx = space->new_svar(GlbMin, GlbMax, Lub, CardMin);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_new_setvar_9(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ int GlbMin = YAP_IntOfTerm(YAP_ARG3);
+ int GlbMax = YAP_IntOfTerm(YAP_ARG4);
+ IntSet Lub = gecode_IntSet_from_term(YAP_ARG5);
+ int idx = space->new_svar(GlbMin, GlbMax, Lub);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_new_setvar_10(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
+ IntSet Lub = gecode_IntSet_from_term(YAP_ARG4);
+ int CardMin = YAP_IntOfTerm(YAP_ARG5);
+ int CardMax = YAP_IntOfTerm(YAP_ARG6);
+ int idx = space->new_svar(Glb, Lub, CardMin, CardMax);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_new_setvar_11(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
+ IntSet Lub = gecode_IntSet_from_term(YAP_ARG4);
+ int CardMin = YAP_IntOfTerm(YAP_ARG5);
+ int idx = space->new_svar(Glb, Lub, CardMin);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_new_setvar_12(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
+ IntSet Lub = gecode_IntSet_from_term(YAP_ARG4);
+ int idx = space->new_svar(Glb, Lub);
+ return YAP_Unify(result, YAP_MkIntTerm(idx));
+}
+
+static YAP_Bool gecode_space_minimize(void) {
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG1);
+ int i = YAP_IntOfTerm(YAP_ARG2);
+ space->minimize(i);
+ return TRUE;
+}
+
+static YAP_Bool gecode_space_maximize(void) {
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG1);
+ int i = YAP_IntOfTerm(YAP_ARG2);
+ space->maximize(i);
+ return TRUE;
+}
+
+static YAP_Bool gecode_space_minimize_ratio(void) {
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG1);
+ int i = YAP_IntOfTerm(YAP_ARG2);
+ int j = YAP_IntOfTerm(YAP_ARG3);
+ space->minimize(i, j);
+ return TRUE;
+}
+
+static YAP_Bool gecode_space_maximize_ratio(void) {
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG1);
+ int i = YAP_IntOfTerm(YAP_ARG2);
+ int j = YAP_IntOfTerm(YAP_ARG3);
+ space->maximize(i, j);
+ return TRUE;
+}
+
+static IntVar gecode_IntVar_from_term(GenericSpace *space, YAP_Term x) {
+ int i = YAP_IntOfTerm(x);
+ return space->get_ivar(i);
+}
+
+static BoolVar gecode_BoolVar_from_term(GenericSpace *space, YAP_Term x) {
+ int i = YAP_IntOfTerm(x);
+ return space->get_bvar(i);
+}
+
+static SetVar gecode_SetVar_from_term(GenericSpace *space, YAP_Term x) {
+ int i = YAP_IntOfTerm(x);
+ return space->get_svar(i);
+}
+
+static IntVarArgs gecode_IntVarArgs_from_term(GenericSpace *space, YAP_Term l) {
+ int n = gecode_list_length(l);
+ IntVarArgs v(n);
+ int i = 0;
+ while (YAP_IsPairTerm(l)) {
+ int idx = YAP_IntOfTerm(YAP_HeadOfTerm(l));
+ v[i] = space->get_ivar(idx);
+ l = YAP_TailOfTerm(l);
+ i += 1;
+ }
+ return v;
+}
+
+static BoolVarArgs gecode_BoolVarArgs_from_term(GenericSpace *space,
+ YAP_Term l) {
+ int n = gecode_list_length(l);
+ BoolVarArgs v(n);
+ int i = 0;
+ while (YAP_IsPairTerm(l)) {
+ int idx = YAP_IntOfTerm(YAP_HeadOfTerm(l));
+ v[i] = space->get_bvar(idx);
+ l = YAP_TailOfTerm(l);
+ i += 1;
+ }
+ return v;
+}
+
+static FloatVar gecode_FloatVar_from_term(GenericSpace *space, YAP_Term x) {
+ int i = YAP_IntOfTerm(x);
+ return space->get_fvar(i);
+}
+
+static FloatVarArgs gecode_FloatVarArgs_from_term(GenericSpace *space,
+ YAP_Term l) {
+ int n = gecode_list_length(l);
+ FloatVarArgs v(n);
+ int i = 0;
+ while (YAP_IsPairTerm(l)) {
+ int idx = YAP_IntOfTerm(YAP_HeadOfTerm(l));
+ v[i] = space->get_fvar(idx);
+ l = YAP_TailOfTerm(l);
+ i += 1;
+ }
+ return v;
+}
+
+static FloatValArgs gecode_FloatValArgs_from_term(YAP_Term l) {
+ int n = gecode_list_length(l);
+ FloatValArgs v(n);
+ int i = 0;
+ while (YAP_IsPairTerm(l)) {
+ YAP_Term t = YAP_HeadOfTerm(l);
+ v[i] = *(FloatVal *)YAP_OpaqueObjectFromTerm(t);
+ l = YAP_TailOfTerm(l);
+ i += 1;
+ }
+ return v;
+}
+
+static SetVarArgs gecode_SetVarArgs_from_term(GenericSpace *space, YAP_Term l) {
+ int n = gecode_list_length(l);
+ SetVarArgs v(n);
+ int i = 0;
+ while (YAP_IsPairTerm(l)) {
+ int idx = YAP_IntOfTerm(YAP_HeadOfTerm(l));
+ v[i] = space->get_svar(idx);
+ l = YAP_TailOfTerm(l);
+ i += 1;
+ }
+ return v;
+}
+
+static IntArgs gecode_IntArgs_from_term(YAP_Term l) {
+ int n = gecode_list_length(l);
+ IntArgs v(n);
+ int i = 0;
+ while (YAP_IsPairTerm(l)) {
+ int idx = YAP_IntOfTerm(YAP_HeadOfTerm(l));
+ v[i] = idx;
+ l = YAP_TailOfTerm(l);
+ i += 1;
+ }
+ return v;
+}
+
+static IntSetArgs gecode_IntSetArgs_from_term(YAP_Term l) {
+ int n = gecode_list_length(l);
+ IntSetArgs v(n);
+ int i = 0;
+ while (YAP_IsPairTerm(l)) {
+ IntSet s = gecode_IntSet_from_term(YAP_HeadOfTerm(l));
+ v[i] = s;
+ l = YAP_TailOfTerm(l);
+ i += 1;
+ }
+ return v;
+}
+
+static TaskType gecode_TaskType_from_term(YAP_Term);
+
+static TaskTypeArgs gecode_TaskTypeArgs_from_term(YAP_Term l) {
+ int n = gecode_list_length(l);
+ TaskTypeArgs v(n);
+ int i = 0;
+ while (YAP_IsPairTerm(l)) {
+ TaskType tt = gecode_TaskType_from_term(YAP_HeadOfTerm(l));
+ v[i] = tt;
+ l = YAP_TailOfTerm(l);
+ i += 1;
+ }
+ return v;
+}
+
+static YAP_Term gecode_TRUE;
+static YAP_Term gecode_FALSE;
+
+static bool gecode_bool_from_term(YAP_Term X) {
+ if (X == gecode_TRUE)
+ return true;
+ if (X == gecode_FALSE)
+ return false;
+ cerr << "this should never happen" << endl;
+ exit(1);
+}
+
+static YAP_Bool gecode_space_use_keep_index(void) {
+ YAP_Term arg1 = YAP_ARG1;
+ YAP_Term arg2 = YAP_ARG2;
+ GenericSpace *space = gecode_Space_from_term(arg1);
+ return YAP_Unify(arg2,
+ (space->use_keep_index() ? gecode_TRUE : gecode_FALSE));
+}
+
+static YAP_Bool gecode_intvar_keep(void) {
+ YAP_Term arg1 = YAP_ARG1;
+ YAP_Term arg2 = YAP_ARG2;
+ YAP_Term arg3 = YAP_ARG3;
+ GenericSpace *space = gecode_Space_from_term(arg1);
+ int idx = YAP_IntOfTerm(arg2);
+ int kidx = space->keep_ivar(idx);
+ return YAP_Unify(arg3, YAP_MkIntTerm(kidx));
+}
+
+static YAP_Bool gecode_boolvar_keep(void) {
+ YAP_Term arg1 = YAP_ARG1;
+ YAP_Term arg2 = YAP_ARG2;
+ YAP_Term arg3 = YAP_ARG3;
+ GenericSpace *space = gecode_Space_from_term(arg1);
+ int idx = YAP_IntOfTerm(arg2);
+ int kidx = space->keep_bvar(idx);
+ return YAP_Unify(arg3, YAP_MkIntTerm(kidx));
+}
+
+static YAP_Bool gecode_setvar_keep(void) {
+ YAP_Term arg1 = YAP_ARG1;
+ YAP_Term arg2 = YAP_ARG2;
+ YAP_Term arg3 = YAP_ARG3;
+ GenericSpace *space = gecode_Space_from_term(arg1);
+ int idx = YAP_IntOfTerm(arg2);
+ int kidx = space->keep_svar(idx);
+ return YAP_Unify(arg3, YAP_MkIntTerm(kidx));
+}
+
+// INFO ON INTVARS
+static YAP_Bool gecode_intvar_assigned(void) {
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG1);
+ IntVar x = gecode_IntVar_from_term(space, YAP_ARG2);
+ return (x.assigned()) ? TRUE : FALSE;
+}
+
+static YAP_Bool gecode_intvar_min(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.min()));
+}
+
+static YAP_Bool gecode_intvar_max(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.max()));
+}
+
+static YAP_Bool gecode_intvar_med(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.med()));
+}
+
+static YAP_Bool gecode_intvar_val(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.val()));
+}
+
+static YAP_Bool gecode_intvar_size(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.size()));
+}
+
+static YAP_Bool gecode_intvar_width(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.width()));
+}
+
+static YAP_Bool gecode_intvar_regret_min(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.regret_min()));
+}
+
+static YAP_Bool gecode_intvar_regret_max(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.regret_max()));
+}
+
+static YAP_Functor gecode_COMMA2;
+
+static YAP_Bool gecode_intvar_ranges(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
+ int n = 0;
{
- int n = gecode_list_length(specs);
- SPECARRAY(r,n);
+ IntVarRanges it(x);
+ while (it()) {
+ ++n;
+ ++it;
+ }
+ }
+ DYNARRAY(int, min, n);
+ DYNARRAY(int, max, n);
+ {
+ IntVarRanges it(x);
int i = 0;
- while (YAP_IsPairTerm(specs))
- {
- YAP_Term head = YAP_HeadOfTerm(specs);
- specs = YAP_TailOfTerm(specs);
- SPECARRAYELEM(r,i,0) = YAP_IntOfTerm(YAP_ArgOfTerm(1, head));
- SPECARRAYELEM(r,i,1) = YAP_IntOfTerm(YAP_ArgOfTerm(2, head));
- i += 1;
- }
- return IntSet(SPECARRAYDEREF(r), n);
+ while (it()) {
+ min[i] = it.min();
+ max[i] = it.max();
+ ++it;
+ ++i;
+ }
}
-
- static YAP_Bool gecode_new_intvar_from_intset(void)
- {
- YAP_Term ivar = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- YAP_Term specs = YAP_ARG3;
- IntSet iset = gecode_IntSet_from_term(specs);
- int i = space->new_ivar(iset);
- return YAP_Unify(ivar, YAP_MkIntTerm(i));
+ YAP_Term lst = YAP_TermNil();
+ for (; n--;) {
+ YAP_Term args[2];
+ args[0] = YAP_MkIntTerm(min[n]);
+ args[1] = YAP_MkIntTerm(max[n]);
+ YAP_Term range = YAP_MkApplTerm(gecode_COMMA2, 2, args);
+ lst = YAP_MkPairTerm(range, lst);
}
+ return YAP_Unify(result, lst);
+}
- static YAP_Bool gecode_new_boolvar(void)
+static YAP_Bool gecode_intvar_values(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
+ int n = x.size();
+ DYNARRAY(int, a, n);
{
- YAP_Term bvar = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- int i = space->new_bvar();
- return YAP_Unify(bvar, YAP_MkIntTerm(i));
- }
-
- static YAP_Bool gecode_new_setvar_1(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- int GlbMin = YAP_IntOfTerm(YAP_ARG3);
- int GlbMax = YAP_IntOfTerm(YAP_ARG4);
- int LubMin = YAP_IntOfTerm(YAP_ARG5);
- int LubMax = YAP_IntOfTerm(YAP_ARG6);
- int CardMin= YAP_IntOfTerm(YAP_ARG7);
- int CardMax= YAP_IntOfTerm(YAP_ARG8);
- int idx = space->new_svar(GlbMin,GlbMax,LubMin,LubMax,CardMin,CardMax);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_new_setvar_2(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- int GlbMin = YAP_IntOfTerm(YAP_ARG3);
- int GlbMax = YAP_IntOfTerm(YAP_ARG4);
- int LubMin = YAP_IntOfTerm(YAP_ARG5);
- int LubMax = YAP_IntOfTerm(YAP_ARG6);
- int CardMin= YAP_IntOfTerm(YAP_ARG7);
- int idx = space->new_svar(GlbMin,GlbMax,LubMin,LubMax,CardMin);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_new_setvar_3(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- int GlbMin = YAP_IntOfTerm(YAP_ARG3);
- int GlbMax = YAP_IntOfTerm(YAP_ARG4);
- int LubMin = YAP_IntOfTerm(YAP_ARG5);
- int LubMax = YAP_IntOfTerm(YAP_ARG6);
- int idx = space->new_svar(GlbMin,GlbMax,LubMin,LubMax);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_new_setvar_4(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
- int LubMin = YAP_IntOfTerm(YAP_ARG4);
- int LubMax = YAP_IntOfTerm(YAP_ARG5);
- int CardMin = YAP_IntOfTerm(YAP_ARG6);
- int CardMax = YAP_IntOfTerm(YAP_ARG7);
- int idx = space->new_svar(Glb,LubMin,LubMax,CardMin,CardMax);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_new_setvar_5(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
- int LubMin = YAP_IntOfTerm(YAP_ARG4);
- int LubMax = YAP_IntOfTerm(YAP_ARG5);
- int CardMin = YAP_IntOfTerm(YAP_ARG6);
- int idx = space->new_svar(Glb,LubMin,LubMax,CardMin);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_new_setvar_6(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
- int LubMin = YAP_IntOfTerm(YAP_ARG4);
- int LubMax = YAP_IntOfTerm(YAP_ARG5);
- int idx = space->new_svar(Glb,LubMin,LubMax);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_new_setvar_7(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- int GlbMin = YAP_IntOfTerm(YAP_ARG3);
- int GlbMax = YAP_IntOfTerm(YAP_ARG4);
- IntSet Lub = gecode_IntSet_from_term(YAP_ARG5);
- int CardMin = YAP_IntOfTerm(YAP_ARG6);
- int CardMax = YAP_IntOfTerm(YAP_ARG7);
- int idx = space->new_svar(GlbMin,GlbMax,Lub,CardMin,CardMax);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_new_setvar_8(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- int GlbMin = YAP_IntOfTerm(YAP_ARG3);
- int GlbMax = YAP_IntOfTerm(YAP_ARG4);
- IntSet Lub = gecode_IntSet_from_term(YAP_ARG5);
- int CardMin = YAP_IntOfTerm(YAP_ARG6);
- int idx = space->new_svar(GlbMin,GlbMax,Lub,CardMin);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_new_setvar_9(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- int GlbMin = YAP_IntOfTerm(YAP_ARG3);
- int GlbMax = YAP_IntOfTerm(YAP_ARG4);
- IntSet Lub = gecode_IntSet_from_term(YAP_ARG5);
- int idx = space->new_svar(GlbMin,GlbMax,Lub);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_new_setvar_10(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
- IntSet Lub = gecode_IntSet_from_term(YAP_ARG4);
- int CardMin = YAP_IntOfTerm(YAP_ARG5);
- int CardMax = YAP_IntOfTerm(YAP_ARG6);
- int idx = space->new_svar(Glb,Lub,CardMin,CardMax);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_new_setvar_11(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
- IntSet Lub = gecode_IntSet_from_term(YAP_ARG4);
- int CardMin = YAP_IntOfTerm(YAP_ARG5);
- int idx = space->new_svar(Glb,Lub,CardMin);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_new_setvar_12(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntSet Glb = gecode_IntSet_from_term(YAP_ARG3);
- IntSet Lub = gecode_IntSet_from_term(YAP_ARG4);
- int idx = space->new_svar(Glb,Lub);
- return YAP_Unify(result, YAP_MkIntTerm(idx));
- }
-
- static YAP_Bool gecode_space_minimize(void)
- {
- GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
- int i = YAP_IntOfTerm(YAP_ARG2);
- space->minimize(i);
- return TRUE;
- }
-
- static YAP_Bool gecode_space_maximize(void)
- {
- GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
- int i = YAP_IntOfTerm(YAP_ARG2);
- space->maximize(i);
- return TRUE;
- }
-
- static YAP_Bool gecode_space_minimize_ratio(void)
- {
- GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
- int i = YAP_IntOfTerm(YAP_ARG2);
- int j = YAP_IntOfTerm(YAP_ARG3);
- space->minimize(i,j);
- return TRUE;
- }
-
- static YAP_Bool gecode_space_maximize_ratio(void)
- {
- GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
- int i = YAP_IntOfTerm(YAP_ARG2);
- int j = YAP_IntOfTerm(YAP_ARG3);
- space->maximize(i,j);
- return TRUE;
- }
-
- static IntVar
- gecode_IntVar_from_term(GenericSpace* space, YAP_Term x)
- {
- int i = YAP_IntOfTerm(x);
- return space->get_ivar(i);
- }
-
- static BoolVar
- gecode_BoolVar_from_term(GenericSpace* space, YAP_Term x)
- {
- int i = YAP_IntOfTerm(x);
- return space->get_bvar(i);
- }
-
- static SetVar
- gecode_SetVar_from_term(GenericSpace* space, YAP_Term x)
- {
- int i = YAP_IntOfTerm(x);
- return space->get_svar(i);
- }
-
- static IntVarArgs
- gecode_IntVarArgs_from_term(GenericSpace* space, YAP_Term l)
- {
- int n = gecode_list_length(l);
- IntVarArgs v(n);
+ IntVarValues it(x);
int i = 0;
- while (YAP_IsPairTerm(l))
- {
- int idx = YAP_IntOfTerm(YAP_HeadOfTerm(l));
- v[i] = space->get_ivar(idx);
- l = YAP_TailOfTerm(l);
- i += 1;
- }
- return v;
+ while (it()) {
+ a[i] = it.val();
+ ++it;
+ ++i;
+ }
}
+ YAP_Term lst = YAP_TermNil();
+ for (; n--;) {
+ lst = YAP_MkPairTerm(YAP_MkIntTerm(a[n]), lst);
+ }
+ return YAP_Unify(result, lst);
+}
- static BoolVarArgs
- gecode_BoolVarArgs_from_term(GenericSpace* space, YAP_Term l)
+// INFO ON BOOLVARS
+static YAP_Bool gecode_boolvar_assigned(void) {
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG1);
+ BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG2);
+ return (x.assigned()) ? TRUE : FALSE;
+}
+
+static YAP_Bool gecode_boolvar_min(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.min()));
+}
+
+static YAP_Bool gecode_boolvar_max(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.max()));
+}
+
+static YAP_Bool gecode_boolvar_med(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.med()));
+}
+
+static YAP_Bool gecode_boolvar_val(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.val()));
+}
+
+static YAP_Bool gecode_boolvar_size(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.size()));
+}
+
+static YAP_Bool gecode_boolvar_width(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.width()));
+}
+
+static YAP_Bool gecode_boolvar_regret_min(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.regret_min()));
+}
+
+static YAP_Bool gecode_boolvar_regret_max(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.regret_max()));
+}
+
+// INFO ON SETVARS
+static YAP_Bool gecode_setvar_assigned(void) {
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG1);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG2);
+ return (x.assigned()) ? TRUE : FALSE;
+}
+
+static YAP_Bool gecode_setvar_glbSize(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.glbSize()));
+}
+
+static YAP_Bool gecode_setvar_lubSize(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.lubSize()));
+}
+
+static YAP_Bool gecode_setvar_unknownSize(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.unknownSize()));
+}
+
+static YAP_Bool gecode_setvar_cardMin(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.cardMin()));
+}
+
+static YAP_Bool gecode_setvar_cardMax(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.cardMax()));
+}
+
+static YAP_Bool gecode_setvar_lubMin(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.lubMin()));
+}
+
+static YAP_Bool gecode_setvar_lubMax(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.lubMax()));
+}
+
+static YAP_Bool gecode_setvar_glbMin(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.glbMin()));
+}
+
+static YAP_Bool gecode_setvar_glbMax(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkIntTerm(x.glbMax()));
+}
+
+static YAP_Bool gecode_setvar_glb_ranges(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ int n = 0;
{
- int n = gecode_list_length(l);
- BoolVarArgs v(n);
+ SetVarGlbRanges it(x);
+ while (it()) {
+ ++n;
+ ++it;
+ }
+ }
+ DYNARRAY(int, min, n);
+ DYNARRAY(int, max, n);
+ {
+ SetVarGlbRanges it(x);
int i = 0;
- while (YAP_IsPairTerm(l))
- {
- int idx = YAP_IntOfTerm(YAP_HeadOfTerm(l));
- v[i] = space->get_bvar(idx);
- l = YAP_TailOfTerm(l);
- i += 1;
- }
- return v;
+ while (it()) {
+ min[i] = it.min();
+ max[i] = it.max();
+ ++it;
+ ++i;
+ }
}
-
- static FloatVar
- gecode_FloatVar_from_term(GenericSpace* space, YAP_Term x)
- {
- int i = YAP_IntOfTerm(x);
- return space->get_fvar(i);
+ YAP_Term lst = YAP_TermNil();
+ for (; n--;) {
+ YAP_Term args[2];
+ args[0] = YAP_MkIntTerm(min[n]);
+ args[1] = YAP_MkIntTerm(max[n]);
+ YAP_Term range = YAP_MkApplTerm(gecode_COMMA2, 2, args);
+ lst = YAP_MkPairTerm(range, lst);
}
+ return YAP_Unify(result, lst);
+}
- static FloatVarArgs
- gecode_FloatVarArgs_from_term(GenericSpace* space, YAP_Term l)
+static YAP_Bool gecode_setvar_lub_ranges(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ int n = 0;
{
- int n = gecode_list_length(l);
- FloatVarArgs v(n);
+ SetVarLubRanges it(x);
+ while (it()) {
+ ++n;
+ ++it;
+ }
+ }
+ DYNARRAY(int, min, n);
+ DYNARRAY(int, max, n);
+ {
+ SetVarLubRanges it(x);
int i = 0;
- while (YAP_IsPairTerm(l))
- {
- int idx = YAP_IntOfTerm(YAP_HeadOfTerm(l));
- v[i] = space->get_fvar(idx);
- l = YAP_TailOfTerm(l);
- i += 1;
- }
- return v;
+ while (it()) {
+ min[i] = it.min();
+ max[i] = it.max();
+ ++it;
+ ++i;
+ }
}
+ YAP_Term lst = YAP_TermNil();
+ for (; n--;) {
+ YAP_Term args[2];
+ args[0] = YAP_MkIntTerm(min[n]);
+ args[1] = YAP_MkIntTerm(max[n]);
+ YAP_Term range = YAP_MkApplTerm(gecode_COMMA2, 2, args);
+ lst = YAP_MkPairTerm(range, lst);
+ }
+ return YAP_Unify(result, lst);
+}
- static FloatValArgs
- gecode_FloatValArgs_from_term(YAP_Term l)
+static YAP_Bool gecode_setvar_unknown_ranges(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ int n = 0;
{
- int n = gecode_list_length(l);
- FloatValArgs v(n);
+ SetVarUnknownRanges it(x);
+ while (it()) {
+ ++n;
+ ++it;
+ }
+ }
+ DYNARRAY(int, min, n);
+ DYNARRAY(int, max, n);
+ {
+ SetVarUnknownRanges it(x);
int i = 0;
- while (YAP_IsPairTerm(l))
- {
- YAP_Term t = YAP_HeadOfTerm(l);
- v[i] = * (FloatVal*) YAP_OpaqueObjectFromTerm(t);
- l = YAP_TailOfTerm(l);
- i += 1;
- }
- return v;
+ while (it()) {
+ min[i] = it.min();
+ max[i] = it.max();
+ ++it;
+ ++i;
+ }
}
-
- static SetVarArgs
- gecode_SetVarArgs_from_term(GenericSpace* space, YAP_Term l)
- {
- int n = gecode_list_length(l);
- SetVarArgs v(n);
- int i = 0;
- while (YAP_IsPairTerm(l))
- {
- int idx = YAP_IntOfTerm(YAP_HeadOfTerm(l));
- v[i] = space->get_svar(idx);
- l = YAP_TailOfTerm(l);
- i += 1;
- }
- return v;
+ YAP_Term lst = YAP_TermNil();
+ for (; n--;) {
+ YAP_Term args[2];
+ args[0] = YAP_MkIntTerm(min[n]);
+ args[1] = YAP_MkIntTerm(max[n]);
+ YAP_Term range = YAP_MkApplTerm(gecode_COMMA2, 2, args);
+ lst = YAP_MkPairTerm(range, lst);
}
+ return YAP_Unify(result, lst);
+}
- static IntArgs
- gecode_IntArgs_from_term(YAP_Term l)
- {
- int n = gecode_list_length(l);
- IntArgs v(n);
- int i = 0;
- while (YAP_IsPairTerm(l))
- {
- int idx = YAP_IntOfTerm(YAP_HeadOfTerm(l));
- v[i] = idx;
- l = YAP_TailOfTerm(l);
- i += 1;
- }
- return v;
+static YAP_Bool gecode_setvar_glb_values(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ DYNARRAY(YAP_Term, elems, x.glbSize());
+ SetVarGlbValues it(x);
+ int n = 0;
+ while (it()) {
+ elems[n] = YAP_MkIntTerm(it.val());
+ ++it;
+ ++n;
}
+ YAP_Term lst = YAP_TermNil();
+ for (; n--;)
+ lst = YAP_MkPairTerm(elems[n], lst);
+ return YAP_Unify(result, lst);
+}
- static IntSetArgs
- gecode_IntSetArgs_from_term(YAP_Term l)
- {
- int n = gecode_list_length(l);
- IntSetArgs v(n);
- int i = 0;
- while (YAP_IsPairTerm(l))
- {
- IntSet s = gecode_IntSet_from_term(YAP_HeadOfTerm(l));
- v[i] = s;
- l = YAP_TailOfTerm(l);
- i += 1;
- }
- return v;
+static YAP_Bool gecode_setvar_lub_values(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ DYNARRAY(YAP_Term, elems, x.lubSize());
+ SetVarLubValues it(x);
+ int n = 0;
+ while (it()) {
+ elems[n] = YAP_MkIntTerm(it.val());
+ ++it;
+ ++n;
}
+ YAP_Term lst = YAP_TermNil();
+ for (; n--;)
+ lst = YAP_MkPairTerm(elems[n], lst);
+ return YAP_Unify(result, lst);
+}
- static TaskType gecode_TaskType_from_term(YAP_Term);
-
- static TaskTypeArgs
- gecode_TaskTypeArgs_from_term(YAP_Term l)
- {
- int n = gecode_list_length(l);
- TaskTypeArgs v(n);
- int i = 0;
- while (YAP_IsPairTerm(l))
- {
- TaskType tt = gecode_TaskType_from_term(YAP_HeadOfTerm(l));
- v[i] = tt;
- l = YAP_TailOfTerm(l);
- i += 1;
- }
- return v;
+static YAP_Bool gecode_setvar_unknown_values(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
+ DYNARRAY(YAP_Term, elems, x.unknownSize());
+ SetVarUnknownValues it(x);
+ int n = 0;
+ while (it()) {
+ elems[n] = YAP_MkIntTerm(it.val());
+ ++it;
+ ++n;
}
+ YAP_Term lst = YAP_TermNil();
+ for (; n--;)
+ lst = YAP_MkPairTerm(elems[n], lst);
+ return YAP_Unify(result, lst);
+}
- static YAP_Term gecode_TRUE;
- static YAP_Term gecode_FALSE;
+// INFO ON FLOATVARS
+static YAP_Bool gecode_floatvar_assigned(void) {
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG1);
+ FloatVar x = gecode_FloatVar_from_term(space, YAP_ARG2);
+ return (x.assigned()) ? TRUE : FALSE;
+}
- static bool
- gecode_bool_from_term(YAP_Term X)
- {
- if (X==gecode_TRUE) return true;
- if (X==gecode_FALSE) return false;
- cerr << "this should never happen" << endl; exit(1);
- }
+static YAP_Bool gecode_floatvar_min(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ FloatVar x = gecode_FloatVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkFloatTerm(x.min()));
+}
- static YAP_Bool gecode_space_use_keep_index(void)
- {
- YAP_Term arg1 = YAP_ARG1;
- YAP_Term arg2 = YAP_ARG2;
- GenericSpace* space = gecode_Space_from_term(arg1);
- return YAP_Unify(arg2,(space->use_keep_index()
- ?gecode_TRUE:gecode_FALSE));
- }
+static YAP_Bool gecode_floatvar_max(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ FloatVar x = gecode_FloatVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkFloatTerm(x.max()));
+}
- static YAP_Bool gecode_intvar_keep(void)
- {
- YAP_Term arg1 = YAP_ARG1;
- YAP_Term arg2 = YAP_ARG2;
- YAP_Term arg3 = YAP_ARG3;
- GenericSpace* space = gecode_Space_from_term(arg1);
- int idx = YAP_IntOfTerm(arg2);
- int kidx = space->keep_ivar(idx);
- return YAP_Unify(arg3,YAP_MkIntTerm(kidx));
- }
+static YAP_Bool gecode_floatvar_med(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ FloatVar x = gecode_FloatVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkFloatTerm(x.med()));
+}
- static YAP_Bool gecode_boolvar_keep(void)
- {
- YAP_Term arg1 = YAP_ARG1;
- YAP_Term arg2 = YAP_ARG2;
- YAP_Term arg3 = YAP_ARG3;
- GenericSpace* space = gecode_Space_from_term(arg1);
- int idx = YAP_IntOfTerm(arg2);
- int kidx = space->keep_bvar(idx);
- return YAP_Unify(arg3,YAP_MkIntTerm(kidx));
- }
+static YAP_Bool gecode_floatvar_size(void) {
+ YAP_Term result = YAP_ARG1;
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG2);
+ FloatVar x = gecode_FloatVar_from_term(space, YAP_ARG3);
+ return YAP_Unify(result, YAP_MkFloatTerm(x.size()));
+}
- static YAP_Bool gecode_setvar_keep(void)
- {
- YAP_Term arg1 = YAP_ARG1;
- YAP_Term arg2 = YAP_ARG2;
- YAP_Term arg3 = YAP_ARG3;
- GenericSpace* space = gecode_Space_from_term(arg1);
- int idx = YAP_IntOfTerm(arg2);
- int kidx = space->keep_svar(idx);
- return YAP_Unify(arg3,YAP_MkIntTerm(kidx));
- }
-
- // INFO ON INTVARS
- static YAP_Bool gecode_intvar_assigned(void)
- {
- GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
- IntVar x = gecode_IntVar_from_term(space, YAP_ARG2);
- return (x.assigned()) ? TRUE : FALSE;
- }
-
- static YAP_Bool gecode_intvar_min(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.min()));
- }
-
- static YAP_Bool gecode_intvar_max(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.max()));
- }
-
- static YAP_Bool gecode_intvar_med(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.med()));
- }
-
- static YAP_Bool gecode_intvar_val(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.val()));
- }
-
- static YAP_Bool gecode_intvar_size(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.size()));
- }
-
- static YAP_Bool gecode_intvar_width(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.width()));
- }
-
- static YAP_Bool gecode_intvar_regret_min(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.regret_min()));
- }
-
- static YAP_Bool gecode_intvar_regret_max(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.regret_max()));
- }
-
- static YAP_Functor gecode_COMMA2;
-
- static YAP_Bool gecode_intvar_ranges(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
- int n = 0;
- { IntVarRanges it(x); while (it()) { ++n; ++it; } }
- DYNARRAY(int,min,n);
- DYNARRAY(int,max,n);
- { IntVarRanges it(x); int i=0;
- while (it()) { min[i]=it.min(); max[i]=it.max(); ++it; ++i; } }
- YAP_Term lst = YAP_TermNil();
- for (;n--;)
- {
- YAP_Term args[2];
- args[0] = YAP_MkIntTerm(min[n]);
- args[1] = YAP_MkIntTerm(max[n]);
- YAP_Term range = YAP_MkApplTerm(gecode_COMMA2,2,args);
- lst = YAP_MkPairTerm(range,lst);
- }
- return YAP_Unify(result,lst);
- }
-
- static YAP_Bool gecode_intvar_values(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- IntVar x = gecode_IntVar_from_term(space, YAP_ARG3);
- int n = x.size();
- DYNARRAY(int,a,n);
- { IntVarValues it(x); int i=0;
- while (it()) { a[i]=it.val(); ++it; ++i; } }
- YAP_Term lst = YAP_TermNil();
- for (;n--;)
- {
- lst = YAP_MkPairTerm(YAP_MkIntTerm(a[n]),lst);
- }
- return YAP_Unify(result,lst);
- }
-
- // INFO ON BOOLVARS
- static YAP_Bool gecode_boolvar_assigned(void)
- {
- GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
- BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG2);
- return (x.assigned()) ? TRUE : FALSE;
- }
-
- static YAP_Bool gecode_boolvar_min(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.min()));
- }
-
- static YAP_Bool gecode_boolvar_max(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.max()));
- }
-
- static YAP_Bool gecode_boolvar_med(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.med()));
- }
-
- static YAP_Bool gecode_boolvar_val(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.val()));
- }
-
- static YAP_Bool gecode_boolvar_size(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.size()));
- }
-
- static YAP_Bool gecode_boolvar_width(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.width()));
- }
-
- static YAP_Bool gecode_boolvar_regret_min(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.regret_min()));
- }
-
- static YAP_Bool gecode_boolvar_regret_max(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- BoolVar x = gecode_BoolVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.regret_max()));
- }
-
- // INFO ON SETVARS
- static YAP_Bool gecode_setvar_assigned(void)
- {
- GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG2);
- return (x.assigned()) ? TRUE : FALSE;
- }
-
- static YAP_Bool gecode_setvar_glbSize(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.glbSize()));
- }
-
- static YAP_Bool gecode_setvar_lubSize(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.lubSize()));
- }
-
- static YAP_Bool gecode_setvar_unknownSize(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.unknownSize()));
- }
-
- static YAP_Bool gecode_setvar_cardMin(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.cardMin()));
- }
-
- static YAP_Bool gecode_setvar_cardMax(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.cardMax()));
- }
-
- static YAP_Bool gecode_setvar_lubMin(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.lubMin()));
- }
-
- static YAP_Bool gecode_setvar_lubMax(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.lubMax()));
- }
-
- static YAP_Bool gecode_setvar_glbMin(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.glbMin()));
- }
-
- static YAP_Bool gecode_setvar_glbMax(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkIntTerm(x.glbMax()));
- }
-
- static YAP_Bool gecode_setvar_glb_ranges(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- int n = 0;
- { SetVarGlbRanges it(x); while (it()) { ++n; ++it; } }
- DYNARRAY(int,min,n);
- DYNARRAY(int,max,n);
- { SetVarGlbRanges it(x); int i=0;
- while (it()) { min[i]=it.min(); max[i]=it.max(); ++it; ++i; } }
- YAP_Term lst = YAP_TermNil();
- for (;n--;)
- {
- YAP_Term args[2];
- args[0] = YAP_MkIntTerm(min[n]);
- args[1] = YAP_MkIntTerm(max[n]);
- YAP_Term range = YAP_MkApplTerm(gecode_COMMA2,2,args);
- lst = YAP_MkPairTerm(range,lst);
- }
- return YAP_Unify(result,lst);
- }
-
- static YAP_Bool gecode_setvar_lub_ranges(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- int n = 0;
- { SetVarLubRanges it(x); while (it()) { ++n; ++it; } }
- DYNARRAY(int,min,n);
- DYNARRAY(int,max,n);
- { SetVarLubRanges it(x); int i=0;
- while (it()) { min[i]=it.min(); max[i]=it.max(); ++it; ++i; } }
- YAP_Term lst = YAP_TermNil();
- for (;n--;)
- {
- YAP_Term args[2];
- args[0] = YAP_MkIntTerm(min[n]);
- args[1] = YAP_MkIntTerm(max[n]);
- YAP_Term range = YAP_MkApplTerm(gecode_COMMA2,2,args);
- lst = YAP_MkPairTerm(range,lst);
- }
- return YAP_Unify(result,lst);
- }
-
- static YAP_Bool gecode_setvar_unknown_ranges(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- int n = 0;
- { SetVarUnknownRanges it(x); while (it()) { ++n; ++it; } }
- DYNARRAY(int,min,n);
- DYNARRAY(int,max,n);
- { SetVarUnknownRanges it(x); int i=0;
- while (it()) { min[i]=it.min(); max[i]=it.max(); ++it; ++i; } }
- YAP_Term lst = YAP_TermNil();
- for (;n--;)
- {
- YAP_Term args[2];
- args[0] = YAP_MkIntTerm(min[n]);
- args[1] = YAP_MkIntTerm(max[n]);
- YAP_Term range = YAP_MkApplTerm(gecode_COMMA2,2,args);
- lst = YAP_MkPairTerm(range,lst);
- }
- return YAP_Unify(result,lst);
- }
-
- static YAP_Bool gecode_setvar_glb_values(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- DYNARRAY(YAP_Term,elems,x.glbSize());
- SetVarGlbValues it(x);
- int n = 0;
- while (it()) { elems[n] = YAP_MkIntTerm(it.val()); ++it; ++n; }
- YAP_Term lst = YAP_TermNil();
- for (;n--;) lst = YAP_MkPairTerm(elems[n],lst);
- return YAP_Unify(result,lst);
- }
-
- static YAP_Bool gecode_setvar_lub_values(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- DYNARRAY(YAP_Term,elems,x.lubSize());
- SetVarLubValues it(x);
- int n = 0;
- while (it()) { elems[n] = YAP_MkIntTerm(it.val()); ++it; ++n; }
- YAP_Term lst = YAP_TermNil();
- for (;n--;) lst = YAP_MkPairTerm(elems[n],lst);
- return YAP_Unify(result,lst);
- }
-
- static YAP_Bool gecode_setvar_unknown_values(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- SetVar x = gecode_SetVar_from_term(space, YAP_ARG3);
- DYNARRAY(YAP_Term,elems,x.unknownSize());
- SetVarUnknownValues it(x);
- int n = 0;
- while (it()) { elems[n] = YAP_MkIntTerm(it.val()); ++it; ++n; }
- YAP_Term lst = YAP_TermNil();
- for (;n--;) lst = YAP_MkPairTerm(elems[n],lst);
- return YAP_Unify(result,lst);
- }
-
- // INFO ON FLOATVARS
- static YAP_Bool gecode_floatvar_assigned(void)
- {
- GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
- FloatVar x = gecode_FloatVar_from_term(space, YAP_ARG2);
- return (x.assigned()) ? TRUE : FALSE;
- }
-
- static YAP_Bool gecode_floatvar_min(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- FloatVar x = gecode_FloatVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkFloatTerm(x.min()));
- }
-
- static YAP_Bool gecode_floatvar_max(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- FloatVar x = gecode_FloatVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkFloatTerm(x.max()));
- }
-
- static YAP_Bool gecode_floatvar_med(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- FloatVar x = gecode_FloatVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkFloatTerm(x.med()));
- }
-
- static YAP_Bool gecode_floatvar_size(void)
- {
- YAP_Term result = YAP_ARG1;
- GenericSpace* space = gecode_Space_from_term(YAP_ARG2);
- FloatVar x = gecode_FloatVar_from_term(space, YAP_ARG3);
- return YAP_Unify(result, YAP_MkFloatTerm(x.size()));
- }
-
- static inline Reify
- gecode_Reify_from_term(YAP_Term t)
- {
- return * (Reify*) YAP_OpaqueObjectFromTerm(t);
- }
+static inline Reify gecode_Reify_from_term(YAP_Term t) {
+ return *(Reify *)YAP_OpaqueObjectFromTerm(t);
+}
#define gecode_int_from_term YAP_IntOfTerm
#include "gecode_yap_cc_forward_auto_generated.icc"
#include "gecode_yap_cc_impl_auto_generated.icc"
- static YAP_opaque_tag_t gecode_reify_tag;
- static YAP_opaque_handler_t gecode_reify_handler;
+static YAP_opaque_tag_t gecode_reify_tag;
+static YAP_opaque_handler_t gecode_reify_handler;
- static YAP_Bool
- gecode_reify_write_handler
- (FILE *stream, YAP_opaque_tag_t type, void *p, int flags)
- {
- fprintf(stream,"", p);
- return TRUE;
- }
-
- static YAP_Term gecode_term_from_reify(Reify r)
- {
- YAP_Term term =
- YAP_NewOpaqueObject(gecode_reify_tag, sizeof(Reify));
- Reify *ptr =
- (Reify*) YAP_OpaqueObjectFromTerm(term);
- *ptr = r;
- return term;
- }
-
- static YAP_Bool gecode_new_reify(void)
- {
- GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
- BoolVar b = gecode_BoolVar_from_term(space, YAP_ARG2);
- ReifyMode flag = gecode_ReifyMode_from_term(YAP_ARG3);
- Reify r = Reify(b,flag);
-
- YAP_Term term = gecode_term_from_reify(r);
- return YAP_Unify(YAP_ARG4, term);
- }
-
- static YAP_opaque_tag_t gecode_tupleset_tag;
- static YAP_opaque_handler_t gecode_tupleset_handler;
-
- static YAP_Bool gecode_tupleset_fail_handler(void* p)
- {
- return TRUE;
- }
-
- static YAP_Bool
- gecode_tupleset_write_handler
- (FILE *stream, YAP_opaque_tag_t type, void *p, int flags)
- {
- fprintf(stream,"", p);
- return TRUE;
- }
-
- static YAP_Bool gecode_new_tupleset(void)
- {
- YAP_Term term =
- YAP_NewOpaqueObject(gecode_tupleset_tag, sizeof(TupleSet));
- TupleSet *ts = new (YAP_OpaqueObjectFromTerm(term)) TupleSet;
- YAP_Term t = YAP_ARG1;
- while (YAP_IsPairTerm( t ) ) {
- YAP_Term l = YAP_HeadOfTerm(t);
- int n = gecode_list_length(l);
- int i = 0;
- IntArgs is(n);
- while (YAP_IsPairTerm( l ) ) {
- YAP_Term ll = YAP_HeadOfTerm(l);
- if (!YAP_IsIntTerm(ll)) {
- cerr << "non-integer on tuple set" << endl; exit(1);
- }
- is[i++] = YAP_IntOfTerm(ll);
- l = YAP_TailOfTerm(l);
- }
- ts->add(is);
- if (l != YAP_TermNil()) {
- cerr << "non-list on tuple set" << endl; exit(1);
- }
- t = YAP_TailOfTerm(t);
- }
- if (t != YAP_TermNil()) {
- cerr << "non-list on tuple set" << endl; exit(1);
- }
- ts->finalize();
- return YAP_Unify(YAP_ARG2, term);
- }
-
- static YAP_opaque_tag_t gecode_dfa_tag;
- static YAP_opaque_handler_t gecode_dfa_handler;
-
- static YAP_Bool gecode_dfa_fail_handler(void* p)
- {
- return TRUE;
- }
-
- static YAP_Bool
- gecode_dfa_write_handler
- (FILE *stream, YAP_opaque_tag_t type, void *p, int flags)
- {
- fprintf(stream,"", p);
- return TRUE;
- }
-
- static YAP_Bool gecode_new_dfa(void)
- {
- YAP_Term term =
- YAP_NewOpaqueObject(gecode_dfa_tag, sizeof(DFA));
- // DFA ts = new (YAP_OpaqueObjectFromTerm(term)) DFA;
- YAP_Term t2 = YAP_ARG2;
- int s0 = YAP_IntOfTerm(t2);
- YAP_Term t3 = YAP_ARG3;
- int n = gecode_list_length(t3), i=0;
- DFA::Transition t[1024];
- if (n > 1024) cerr<< "DFA too long" << endl;
- while (YAP_IsPairTerm( t3 ) ) {
- YAP_Term tt = YAP_HeadOfTerm(t3);
- int is, sy, os;
- is = YAP_IntOfTerm(YAP_ArgOfTerm(1,tt));
- sy = YAP_IntOfTerm(YAP_ArgOfTerm(2,tt));
- os = YAP_IntOfTerm(YAP_ArgOfTerm(3,tt));
- t[i++] = DFA::Transition(is, sy, os);
- t3 = YAP_TailOfTerm(t3);
- }
- if (t3 != YAP_TermNil()) {
- cerr << "non-list on DFA" << endl; exit(1);
- }
- YAP_Term t4 = YAP_ARG4;
- n = gecode_list_length(t4)+1;
- i=0;
- int s[n];
- s[n-1] = -1;
- while (YAP_IsPairTerm( t4 ) ) {
- YAP_Term tt = YAP_HeadOfTerm(t4);
- s[i++] = YAP_IntOfTerm(tt);
- t4 = YAP_TailOfTerm(t4);
- }
- if (t4 != YAP_TermNil()) {
- cerr << "non-list on DFA" << endl; exit(1);
- }
- new (YAP_OpaqueObjectFromTerm(term)) DFA(s0, t, s);
- return YAP_Unify(YAP_ARG1, term);
- }
-
- void gecode_init(void)
- {
- { YAP_Atom X= YAP_LookupAtom("true");
- gecode_TRUE = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("false");
- gecode_FALSE = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom(",");
- YAP_AtomGetHold(X);
- gecode_COMMA2 = YAP_MkFunctor(X,2); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_NONE");
- gecode_INT_VAR_NONE = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_DEGREE_MIN");
- gecode_INT_VAR_DEGREE_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_DEGREE_MAX");
- gecode_INT_VAR_DEGREE_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_MIN_MIN");
- gecode_INT_VAR_MIN_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_MIN_MAX");
- gecode_INT_VAR_MIN_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_MAX_MIN");
- gecode_INT_VAR_MAX_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_MAX_MAX");
- gecode_INT_VAR_MAX_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_SIZE_MIN");
- gecode_INT_VAR_SIZE_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_SIZE_MAX");
- gecode_INT_VAR_SIZE_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_DEGREE_SIZE_MIN");
- gecode_INT_VAR_DEGREE_SIZE_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_DEGREE_SIZE_MAX");
- gecode_INT_VAR_DEGREE_SIZE_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_REGRET_MIN_MIN");
- gecode_INT_VAR_REGRET_MIN_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_REGRET_MIN_MAX");
- gecode_INT_VAR_REGRET_MIN_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_REGRET_MAX_MIN");
- gecode_INT_VAR_REGRET_MAX_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAR_REGRET_MAX_MAX");
- gecode_INT_VAR_REGRET_MAX_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAL_MIN");
- gecode_INT_VAL_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAL_MED");
- gecode_INT_VAL_MED = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAL_MAX");
- gecode_INT_VAL_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAL_SPLIT_MIN");
- gecode_INT_VAL_SPLIT_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAL_SPLIT_MAX");
- gecode_INT_VAL_SPLIT_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAL_RANGE_MIN");
- gecode_INT_VAL_RANGE_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VAL_RANGE_MAX");
- gecode_INT_VAL_RANGE_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VALUES_MIN");
- gecode_INT_VALUES_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("INT_VALUES_MAX");
- gecode_INT_VALUES_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAR_NONE");
- gecode_SET_VAR_NONE = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAR_DEGREE_MIN");
- gecode_SET_VAR_DEGREE_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAR_DEGREE_MAX");
- gecode_SET_VAR_DEGREE_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAR_MIN_MIN");
- gecode_SET_VAR_MIN_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAR_MIN_MAX");
- gecode_SET_VAR_MIN_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAR_MAX_MIN");
- gecode_SET_VAR_MAX_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAR_MAX_MAX");
- gecode_SET_VAR_MAX_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAR_SIZE_MIN");
- gecode_SET_VAR_SIZE_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAR_SIZE_MAX");
- gecode_SET_VAR_SIZE_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAR_DEGREE_SIZE_MIN");
- gecode_SET_VAR_DEGREE_SIZE_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAR_DEGREE_SIZE_MAX");
- gecode_SET_VAR_DEGREE_SIZE_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAL_MIN_INC");
- gecode_SET_VAL_MIN_INC = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAL_MED_INC");
- gecode_SET_VAL_MED_INC = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAL_MAX_INC");
- gecode_SET_VAL_MAX_INC = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAL_MIN_EXC");
- gecode_SET_VAL_MIN_EXC = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAL_MED_EXC");
- gecode_SET_VAL_MED_EXC = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("SET_VAL_MAX_EXC");
- gecode_SET_VAL_MAX_EXC = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAR_NONE");
- gecode_FLOAT_VAR_NONE = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAR_DEGREE_MIN");
- gecode_FLOAT_VAR_DEGREE_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAR_DEGREE_MAX");
- gecode_FLOAT_VAR_DEGREE_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAR_MIN_MIN");
- gecode_FLOAT_VAR_MIN_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAR_MIN_MAX");
- gecode_FLOAT_VAR_MIN_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAR_MAX_MIN");
- gecode_FLOAT_VAR_MAX_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAR_MAX_MAX");
- gecode_FLOAT_VAR_MAX_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAR_SIZE_MIN");
- gecode_FLOAT_VAR_SIZE_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAR_SIZE_MAX");
- gecode_FLOAT_VAR_SIZE_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAR_DEGREE_SIZE_MIN");
- gecode_FLOAT_VAR_DEGREE_SIZE_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAR_DEGREE_SIZE_MAX");
- gecode_FLOAT_VAR_DEGREE_SIZE_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAL_SPLIT_MIN");
- gecode_FLOAT_VAL_SPLIT_MIN = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
- { YAP_Atom X= YAP_LookupAtom("FLOAT_VAL_SPLIT_MAX");
- gecode_FLOAT_VAL_SPLIT_MAX = YAP_MkAtomTerm(X);
- YAP_AtomGetHold(X); }
-#include "gecode_yap_cc_init_auto_generated.icc"
- // opaque spaces
- gecode_space_handler.fail_handler = gecode_space_fail_handler;
- gecode_space_handler.write_handler = gecode_space_write_handler;
- gecode_space_tag = YAP_NewOpaqueType(&gecode_space_handler);
- YAP_UserCPredicate("gecode_new_space", gecode_new_space, 1);
- // opaque engines
- gecode_engine_handler.fail_handler = gecode_engine_fail_handler;
- gecode_engine_handler.write_handler = gecode_engine_write_handler;
- gecode_engine_tag = YAP_NewOpaqueType(&gecode_engine_handler);
- YAP_UserCPredicate("gecode_new_engine", gecode_new_engine, 3);
- // opaque reifications
- gecode_reify_handler.fail_handler = NULL;
- gecode_reify_handler.write_handler = gecode_reify_write_handler;
- gecode_reify_tag = YAP_NewOpaqueType(&gecode_reify_handler);
- YAP_UserCPredicate("gecode_new_reify", gecode_new_reify, 4);
- // Opaque TupleSet
- gecode_tupleset_handler.fail_handler = gecode_tupleset_fail_handler;
- gecode_tupleset_handler.write_handler = gecode_tupleset_write_handler;
- gecode_tupleset_tag = YAP_NewOpaqueType(&gecode_tupleset_handler);
- YAP_UserCPredicate("gecode_new_tupleset", gecode_new_tupleset, 2);
- // Opaque DFA
- gecode_dfa_handler.fail_handler = gecode_dfa_fail_handler;
- gecode_dfa_handler.write_handler = gecode_dfa_write_handler;
- gecode_dfa_tag = YAP_NewOpaqueType(&gecode_dfa_handler);
- YAP_UserCPredicate("gecode_new_dfa", gecode_new_dfa, 4);
-#ifdef DISJUNCTOR
- // opaque disjunctors and clauses
- gecode_disjunctor_handler.write_handler = gecode_disjunctor_write_handler;
- gecode_disjunctor_tag = YAP_NewOpaqueType(&gecode_disjunctor_handler);
- gecode_disjunctor_clause_handler.write_handler = gecode_clause_write_handler;
- gecode_disjunctor_clause_tag =
- YAP_NewOpaqueType(&gecode_disjunctor_clause_handler);
- YAP_UserCPredicate("gecode_new_disjunctor", gecode_new_disjunctor, 2);
- YAP_UserCPredicate("gecode_new_clause", gecode_new_clause, 2);
- YAP_UserCPredicate("gecode_clause_intvar_forward", gecode_clause_intvar_forward, 3);
- YAP_UserCPredicate("gecode_clause_boolvar_forward", gecode_clause_boolvar_forward, 3);
- YAP_UserCPredicate("gecode_clause_setvar_forward", gecode_clause_setvar_forward, 3);
-#endif
- // backtracking search using an engine
- YAP_UserBackCutCPredicate("gecode_engine_search",
- gecode_engine_search, gecode_engine_search,
- NULL, 2, 0);
- // creating variables
- YAP_UserCPredicate("gecode_new_intvar_from_bounds",
- gecode_new_intvar_from_bounds, 4);
- YAP_UserCPredicate("gecode_new_intvar_from_intset",
- gecode_new_intvar_from_intset, 3);
- YAP_UserCPredicate("gecode_new_floatvar_from_bounds",
- gecode_new_floatvar_from_bounds, 4);
- YAP_UserCPredicate("gecode_new_boolvar", gecode_new_boolvar, 2);
- YAP_UserCPredicate("gecode_new_setvar_1", gecode_new_setvar_1, 8);
- YAP_UserCPredicate("gecode_new_setvar_2", gecode_new_setvar_2, 7);
- YAP_UserCPredicate("gecode_new_setvar_3", gecode_new_setvar_3, 6);
- YAP_UserCPredicate("gecode_new_setvar_4", gecode_new_setvar_4, 7);
- YAP_UserCPredicate("gecode_new_setvar_5", gecode_new_setvar_5, 6);
- YAP_UserCPredicate("gecode_new_setvar_6", gecode_new_setvar_6, 5);
- YAP_UserCPredicate("gecode_new_setvar_7", gecode_new_setvar_7, 7);
- YAP_UserCPredicate("gecode_new_setvar_8", gecode_new_setvar_8, 6);
- YAP_UserCPredicate("gecode_new_setvar_9", gecode_new_setvar_9, 5);
- YAP_UserCPredicate("gecode_new_setvar_10", gecode_new_setvar_10, 6);
- YAP_UserCPredicate("gecode_new_setvar_11", gecode_new_setvar_11, 5);
- YAP_UserCPredicate("gecode_new_setvar_12", gecode_new_setvar_12, 4);
- YAP_UserCPredicate("gecode_space_minimize", gecode_space_minimize, 2);
- YAP_UserCPredicate("gecode_space_maximize", gecode_space_maximize, 2);
- YAP_UserCPredicate("gecode_space_minimize_ratio", gecode_space_minimize_ratio, 3);
- YAP_UserCPredicate("gecode_space_maximize_ratio", gecode_space_maximize_ratio, 3);
- // INFO ON INTVARS
- YAP_UserCPredicate("gecode_intvar_assigned", gecode_intvar_assigned, 2);
- YAP_UserCPredicate("gecode_intvar_min", gecode_intvar_min, 3);
- YAP_UserCPredicate("gecode_intvar_max", gecode_intvar_max, 3);
- YAP_UserCPredicate("gecode_intvar_med", gecode_intvar_med, 3);
- YAP_UserCPredicate("gecode_intvar_val", gecode_intvar_val, 3);
- YAP_UserCPredicate("gecode_intvar_size", gecode_intvar_size, 3);
- YAP_UserCPredicate("gecode_intvar_width", gecode_intvar_width, 3);
- YAP_UserCPredicate("gecode_intvar_regret_min", gecode_intvar_regret_min, 3);
- YAP_UserCPredicate("gecode_intvar_regret_max", gecode_intvar_regret_max, 3);
- YAP_UserCPredicate("gecode_intvar_ranges", gecode_intvar_ranges, 3);
- YAP_UserCPredicate("gecode_intvar_values", gecode_intvar_values, 3);
- // INFO ON BOOLVARS
- YAP_UserCPredicate("gecode_boolvar_assigned", gecode_boolvar_assigned, 2);
- YAP_UserCPredicate("gecode_boolvar_min", gecode_boolvar_min, 3);
- YAP_UserCPredicate("gecode_boolvar_max", gecode_boolvar_max, 3);
- YAP_UserCPredicate("gecode_boolvar_med", gecode_boolvar_med, 3);
- YAP_UserCPredicate("gecode_boolvar_val", gecode_boolvar_val, 3);
- YAP_UserCPredicate("gecode_boolvar_size", gecode_boolvar_size, 3);
- YAP_UserCPredicate("gecode_boolvar_width", gecode_boolvar_width, 3);
- YAP_UserCPredicate("gecode_boolvar_regret_min", gecode_boolvar_regret_min, 3);
- YAP_UserCPredicate("gecode_boolvar_regret_max", gecode_boolvar_regret_max, 3);
- // INFO ON SETVARS
- YAP_UserCPredicate("gecode_setvar_assigned", gecode_setvar_assigned, 2);
- YAP_UserCPredicate("gecode_setvar_glbSize", gecode_setvar_glbSize, 3);
- YAP_UserCPredicate("gecode_setvar_lubSize", gecode_setvar_lubSize, 3);
- YAP_UserCPredicate("gecode_setvar_unknownSize", gecode_setvar_unknownSize, 3);
- YAP_UserCPredicate("gecode_setvar_cardMin", gecode_setvar_cardMin, 3);
- YAP_UserCPredicate("gecode_setvar_cardMax", gecode_setvar_cardMax, 3);
- YAP_UserCPredicate("gecode_setvar_lubMin", gecode_setvar_lubMin, 3);
- YAP_UserCPredicate("gecode_setvar_lubMax", gecode_setvar_lubMax, 3);
- YAP_UserCPredicate("gecode_setvar_glbMin", gecode_setvar_glbMin, 3);
- YAP_UserCPredicate("gecode_setvar_glbMax", gecode_setvar_glbMax, 3);
- YAP_UserCPredicate("gecode_setvar_glb_ranges", gecode_setvar_glb_ranges, 3);
- YAP_UserCPredicate("gecode_setvar_lub_ranges", gecode_setvar_lub_ranges, 3);
- YAP_UserCPredicate("gecode_setvar_unknown_ranges", gecode_setvar_unknown_ranges, 3);
- YAP_UserCPredicate("gecode_setvar_glb_values", gecode_setvar_glb_values, 3);
- YAP_UserCPredicate("gecode_setvar_lub_values", gecode_setvar_lub_values, 3);
- YAP_UserCPredicate("gecode_setvar_unknown_values", gecode_setvar_unknown_values, 3);
- YAP_UserCPredicate("gecode_space_use_keep_index", gecode_space_use_keep_index, 2);
- YAP_UserCPredicate("gecode_intvar_keep", gecode_intvar_keep, 3);
- YAP_UserCPredicate("gecode_boolvar_keep", gecode_boolvar_keep, 3);
- YAP_UserCPredicate("gecode_setvar_keep", gecode_setvar_keep, 3);
- // INFO ON FLOATVARS
- YAP_UserCPredicate("gecode_floatvar_assigned", gecode_floatvar_assigned, 2);
- YAP_UserCPredicate("gecode_floatvar_min", gecode_floatvar_min, 3);
- YAP_UserCPredicate("gecode_floatvar_max", gecode_floatvar_max, 3);
- YAP_UserCPredicate("gecode_floatvar_med", gecode_floatvar_med, 3);
- YAP_UserCPredicate("gecode_floatvar_size", gecode_floatvar_size, 3);
- }
+static YAP_Bool gecode_reify_write_handler(FILE *stream, YAP_opaque_tag_t type,
+ void *p, int flags) {
+ fprintf(stream, "", p);
+ return TRUE;
+}
+
+static YAP_Term gecode_term_from_reify(Reify r) {
+ YAP_Term term = YAP_NewOpaqueObject(gecode_reify_tag, sizeof(Reify));
+ Reify *ptr = (Reify *)YAP_OpaqueObjectFromTerm(term);
+ *ptr = r;
+ return term;
+}
+
+static YAP_Bool gecode_new_reify(void) {
+ GenericSpace *space = gecode_Space_from_term(YAP_ARG1);
+ BoolVar b = gecode_BoolVar_from_term(space, YAP_ARG2);
+ ReifyMode flag = gecode_ReifyMode_from_term(YAP_ARG3);
+ Reify r = Reify(b, flag);
+
+ YAP_Term term = gecode_term_from_reify(r);
+ return YAP_Unify(YAP_ARG4, term);
+}
+
+static YAP_opaque_tag_t gecode_tupleset_tag;
+static YAP_opaque_handler_t gecode_tupleset_handler;
+
+static YAP_Bool gecode_tupleset_fail_handler(YAP_Term p) { return TRUE; }
+
+static YAP_Bool gecode_tupleset_write_handler(FILE *stream,
+ YAP_opaque_tag_t type, void *p,
+ int flags) {
+ fprintf(stream, "", p);
+ return TRUE;
+}
+
+static YAP_Bool gecode_new_tupleset(void) {
+ YAP_Term term = YAP_NewOpaqueObject(gecode_tupleset_tag, sizeof(TupleSet));
+ TupleSet *ts = new (YAP_OpaqueObjectFromTerm(term)) TupleSet;
+ YAP_Term t = YAP_ARG1;
+ while (YAP_IsPairTerm(t)) {
+ YAP_Term l = YAP_HeadOfTerm(t);
+ int n = gecode_list_length(l);
+ int i = 0;
+ IntArgs is(n);
+ while (YAP_IsPairTerm(l)) {
+ YAP_Term ll = YAP_HeadOfTerm(l);
+ if (!YAP_IsIntTerm(ll)) {
+ cerr << "non-integer on tuple set" << endl;
+ exit(1);
+ }
+ is[i++] = YAP_IntOfTerm(ll);
+ l = YAP_TailOfTerm(l);
+ }
+ ts->add(is);
+ if (l != YAP_TermNil()) {
+ cerr << "non-list on tuple set" << endl;
+ exit(1);
+ }
+ t = YAP_TailOfTerm(t);
+ }
+ if (t != YAP_TermNil()) {
+ cerr << "non-list on tuple set" << endl;
+ exit(1);
+ }
+ ts->finalize();
+ return YAP_Unify(YAP_ARG2, term);
+}
+
+static YAP_opaque_tag_t gecode_dfa_tag;
+static YAP_opaque_handler_t gecode_dfa_handler;
+
+static YAP_Bool gecode_dfa_fail_handler(YAP_Term p) { return TRUE; }
+
+static YAP_Bool gecode_dfa_write_handler(FILE *stream, YAP_opaque_tag_t type,
+ void *p, int flags) {
+ fprintf(stream, "", p);
+ return TRUE;
+}
+
+static YAP_Bool gecode_new_dfa(void) {
+ YAP_Term term = YAP_NewOpaqueObject(gecode_dfa_tag, sizeof(DFA));
+ // DFA ts = new (YAP_OpaqueObjectFromTerm(term)) DFA;
+ YAP_Term t2 = YAP_ARG2;
+ int s0 = YAP_IntOfTerm(t2);
+ YAP_Term t3 = YAP_ARG3;
+ int n = gecode_list_length(t3), i = 0;
+ DFA::Transition t[1024];
+ if (n > 1024)
+ cerr << "DFA too long" << endl;
+ while (YAP_IsPairTerm(t3)) {
+ YAP_Term tt = YAP_HeadOfTerm(t3);
+ int is, sy, os;
+ is = YAP_IntOfTerm(YAP_ArgOfTerm(1, tt));
+ sy = YAP_IntOfTerm(YAP_ArgOfTerm(2, tt));
+ os = YAP_IntOfTerm(YAP_ArgOfTerm(3, tt));
+ t[i++] = DFA::Transition(is, sy, os);
+ t3 = YAP_TailOfTerm(t3);
+ }
+ if (t3 != YAP_TermNil()) {
+ cerr << "non-list on DFA" << endl;
+ exit(1);
+ }
+ YAP_Term t4 = YAP_ARG4;
+ n = gecode_list_length(t4) + 1;
+ i = 0;
+ int s[n];
+ s[n - 1] = -1;
+ while (YAP_IsPairTerm(t4)) {
+ YAP_Term tt = YAP_HeadOfTerm(t4);
+ s[i++] = YAP_IntOfTerm(tt);
+ t4 = YAP_TailOfTerm(t4);
+ }
+ if (t4 != YAP_TermNil()) {
+ cerr << "non-list on DFA" << endl;
+ exit(1);
+ }
+ new (YAP_OpaqueObjectFromTerm(term)) DFA(s0, t, s);
+ return YAP_Unify(YAP_ARG1, term);
+}
+
+void gecode_init(void) {
+ {
+ YAP_Atom X = YAP_LookupAtom("true");
+ gecode_TRUE = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("false");
+ gecode_FALSE = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom(",");
+ YAP_AtomGetHold(X);
+ gecode_COMMA2 = YAP_MkFunctor(X, 2);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_NONE");
+ gecode_INT_VAR_NONE = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_DEGREE_MIN");
+ gecode_INT_VAR_DEGREE_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_DEGREE_MAX");
+ gecode_INT_VAR_DEGREE_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_MIN_MIN");
+ gecode_INT_VAR_MIN_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_MIN_MAX");
+ gecode_INT_VAR_MIN_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_MAX_MIN");
+ gecode_INT_VAR_MAX_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_MAX_MAX");
+ gecode_INT_VAR_MAX_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_SIZE_MIN");
+ gecode_INT_VAR_SIZE_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_SIZE_MAX");
+ gecode_INT_VAR_SIZE_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_DEGREE_SIZE_MIN");
+ gecode_INT_VAR_DEGREE_SIZE_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_DEGREE_SIZE_MAX");
+ gecode_INT_VAR_DEGREE_SIZE_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_REGRET_MIN_MIN");
+ gecode_INT_VAR_REGRET_MIN_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_REGRET_MIN_MAX");
+ gecode_INT_VAR_REGRET_MIN_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_REGRET_MAX_MIN");
+ gecode_INT_VAR_REGRET_MAX_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAR_REGRET_MAX_MAX");
+ gecode_INT_VAR_REGRET_MAX_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAL_MIN");
+ gecode_INT_VAL_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAL_MED");
+ gecode_INT_VAL_MED = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAL_MAX");
+ gecode_INT_VAL_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAL_SPLIT_MIN");
+ gecode_INT_VAL_SPLIT_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAL_SPLIT_MAX");
+ gecode_INT_VAL_SPLIT_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAL_RANGE_MIN");
+ gecode_INT_VAL_RANGE_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VAL_RANGE_MAX");
+ gecode_INT_VAL_RANGE_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VALUES_MIN");
+ gecode_INT_VALUES_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("INT_VALUES_MAX");
+ gecode_INT_VALUES_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAR_NONE");
+ gecode_SET_VAR_NONE = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAR_DEGREE_MIN");
+ gecode_SET_VAR_DEGREE_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAR_DEGREE_MAX");
+ gecode_SET_VAR_DEGREE_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAR_MIN_MIN");
+ gecode_SET_VAR_MIN_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAR_MIN_MAX");
+ gecode_SET_VAR_MIN_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAR_MAX_MIN");
+ gecode_SET_VAR_MAX_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAR_MAX_MAX");
+ gecode_SET_VAR_MAX_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAR_SIZE_MIN");
+ gecode_SET_VAR_SIZE_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAR_SIZE_MAX");
+ gecode_SET_VAR_SIZE_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAR_DEGREE_SIZE_MIN");
+ gecode_SET_VAR_DEGREE_SIZE_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAR_DEGREE_SIZE_MAX");
+ gecode_SET_VAR_DEGREE_SIZE_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAL_MIN_INC");
+ gecode_SET_VAL_MIN_INC = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAL_MED_INC");
+ gecode_SET_VAL_MED_INC = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAL_MAX_INC");
+ gecode_SET_VAL_MAX_INC = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAL_MIN_EXC");
+ gecode_SET_VAL_MIN_EXC = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAL_MED_EXC");
+ gecode_SET_VAL_MED_EXC = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("SET_VAL_MAX_EXC");
+ gecode_SET_VAL_MAX_EXC = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAR_NONE");
+ gecode_FLOAT_VAR_NONE = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAR_DEGREE_MIN");
+ gecode_FLOAT_VAR_DEGREE_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAR_DEGREE_MAX");
+ gecode_FLOAT_VAR_DEGREE_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAR_MIN_MIN");
+ gecode_FLOAT_VAR_MIN_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAR_MIN_MAX");
+ gecode_FLOAT_VAR_MIN_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAR_MAX_MIN");
+ gecode_FLOAT_VAR_MAX_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAR_MAX_MAX");
+ gecode_FLOAT_VAR_MAX_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAR_SIZE_MIN");
+ gecode_FLOAT_VAR_SIZE_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAR_SIZE_MAX");
+ gecode_FLOAT_VAR_SIZE_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAR_DEGREE_SIZE_MIN");
+ gecode_FLOAT_VAR_DEGREE_SIZE_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAR_DEGREE_SIZE_MAX");
+ gecode_FLOAT_VAR_DEGREE_SIZE_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAL_SPLIT_MIN");
+ gecode_FLOAT_VAL_SPLIT_MIN = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+ {
+ YAP_Atom X = YAP_LookupAtom("FLOAT_VAL_SPLIT_MAX");
+ gecode_FLOAT_VAL_SPLIT_MAX = YAP_MkAtomTerm(X);
+ YAP_AtomGetHold(X);
+ }
+#include "gecode_yap_cc_init_auto_generated.icc"
+ // opaque spaces
+ gecode_space_handler.fail_handler = gecode_space_fail_handler;
+ gecode_space_handler.write_handler = gecode_space_write_handler;
+ gecode_space_tag = YAP_NewOpaqueType(&gecode_space_handler);
+ YAP_UserCPredicate("gecode_new_space", gecode_new_space, 1);
+ // opaque engines
+ gecode_engine_handler.fail_handler = gecode_engine_fail_handler;
+ gecode_engine_handler.write_handler = gecode_engine_write_handler;
+ gecode_engine_tag = YAP_NewOpaqueType(&gecode_engine_handler);
+ YAP_UserCPredicate("gecode_new_engine", gecode_new_engine, 3);
+ // opaque reifications
+ gecode_reify_handler.fail_handler = NULL;
+ gecode_reify_handler.write_handler = gecode_reify_write_handler;
+ gecode_reify_tag = YAP_NewOpaqueType(&gecode_reify_handler);
+ YAP_UserCPredicate("gecode_new_reify", gecode_new_reify, 4);
+ // Opaque TupleSet
+ gecode_tupleset_handler.fail_handler = gecode_tupleset_fail_handler;
+ gecode_tupleset_handler.write_handler = gecode_tupleset_write_handler;
+ gecode_tupleset_tag = YAP_NewOpaqueType(&gecode_tupleset_handler);
+ YAP_UserCPredicate("gecode_new_tupleset", gecode_new_tupleset, 2);
+ // Opaque DFA
+ gecode_dfa_handler.fail_handler = gecode_dfa_fail_handler;
+ gecode_dfa_handler.write_handler = gecode_dfa_write_handler;
+ gecode_dfa_tag = YAP_NewOpaqueType(&gecode_dfa_handler);
+ YAP_UserCPredicate("gecode_new_dfa", gecode_new_dfa, 4);
+#ifdef DISJUNCTOR
+ // opaque disjunctors and clauses
+ gecode_disjunctor_handler.write_handler = gecode_disjunctor_write_handler;
+ gecode_disjunctor_tag = YAP_NewOpaqueType(&gecode_disjunctor_handler);
+ gecode_disjunctor_clause_handler.write_handler = gecode_clause_write_handler;
+ gecode_disjunctor_clause_tag =
+ YAP_NewOpaqueType(&gecode_disjunctor_clause_handler);
+ YAP_UserCPredicate("gecode_new_disjunctor", gecode_new_disjunctor, 2);
+ YAP_UserCPredicate("gecode_new_clause", gecode_new_clause, 2);
+ YAP_UserCPredicate("gecode_clause_intvar_forward",
+ gecode_clause_intvar_forward, 3);
+ YAP_UserCPredicate("gecode_clause_boolvar_forward",
+ gecode_clause_boolvar_forward, 3);
+ YAP_UserCPredicate("gecode_clause_setvar_forward",
+ gecode_clause_setvar_forward, 3);
+#endif
+ // backtracking search using an engine
+ YAP_UserBackCutCPredicate("gecode_engine_search", gecode_engine_search,
+ gecode_engine_search, NULL, 2, 0);
+ // creating variables
+ YAP_UserCPredicate("gecode_new_intvar_from_bounds",
+ gecode_new_intvar_from_bounds, 4);
+ YAP_UserCPredicate("gecode_new_intvar_from_intset",
+ gecode_new_intvar_from_intset, 3);
+ YAP_UserCPredicate("gecode_new_floatvar_from_bounds",
+ gecode_new_floatvar_from_bounds, 4);
+ YAP_UserCPredicate("gecode_new_boolvar", gecode_new_boolvar, 2);
+ YAP_UserCPredicate("gecode_new_setvar_1", gecode_new_setvar_1, 8);
+ YAP_UserCPredicate("gecode_new_setvar_2", gecode_new_setvar_2, 7);
+ YAP_UserCPredicate("gecode_new_setvar_3", gecode_new_setvar_3, 6);
+ YAP_UserCPredicate("gecode_new_setvar_4", gecode_new_setvar_4, 7);
+ YAP_UserCPredicate("gecode_new_setvar_5", gecode_new_setvar_5, 6);
+ YAP_UserCPredicate("gecode_new_setvar_6", gecode_new_setvar_6, 5);
+ YAP_UserCPredicate("gecode_new_setvar_7", gecode_new_setvar_7, 7);
+ YAP_UserCPredicate("gecode_new_setvar_8", gecode_new_setvar_8, 6);
+ YAP_UserCPredicate("gecode_new_setvar_9", gecode_new_setvar_9, 5);
+ YAP_UserCPredicate("gecode_new_setvar_10", gecode_new_setvar_10, 6);
+ YAP_UserCPredicate("gecode_new_setvar_11", gecode_new_setvar_11, 5);
+ YAP_UserCPredicate("gecode_new_setvar_12", gecode_new_setvar_12, 4);
+ YAP_UserCPredicate("gecode_space_minimize", gecode_space_minimize, 2);
+ YAP_UserCPredicate("gecode_space_maximize", gecode_space_maximize, 2);
+ YAP_UserCPredicate("gecode_space_minimize_ratio", gecode_space_minimize_ratio,
+ 3);
+ YAP_UserCPredicate("gecode_space_maximize_ratio", gecode_space_maximize_ratio,
+ 3);
+ // INFO ON INTVARS
+ YAP_UserCPredicate("gecode_intvar_assigned", gecode_intvar_assigned, 2);
+ YAP_UserCPredicate("gecode_intvar_min", gecode_intvar_min, 3);
+ YAP_UserCPredicate("gecode_intvar_max", gecode_intvar_max, 3);
+ YAP_UserCPredicate("gecode_intvar_med", gecode_intvar_med, 3);
+ YAP_UserCPredicate("gecode_intvar_val", gecode_intvar_val, 3);
+ YAP_UserCPredicate("gecode_intvar_size", gecode_intvar_size, 3);
+ YAP_UserCPredicate("gecode_intvar_width", gecode_intvar_width, 3);
+ YAP_UserCPredicate("gecode_intvar_regret_min", gecode_intvar_regret_min, 3);
+ YAP_UserCPredicate("gecode_intvar_regret_max", gecode_intvar_regret_max, 3);
+ YAP_UserCPredicate("gecode_intvar_ranges", gecode_intvar_ranges, 3);
+ YAP_UserCPredicate("gecode_intvar_values", gecode_intvar_values, 3);
+ // INFO ON BOOLVARS
+ YAP_UserCPredicate("gecode_boolvar_assigned", gecode_boolvar_assigned, 2);
+ YAP_UserCPredicate("gecode_boolvar_min", gecode_boolvar_min, 3);
+ YAP_UserCPredicate("gecode_boolvar_max", gecode_boolvar_max, 3);
+ YAP_UserCPredicate("gecode_boolvar_med", gecode_boolvar_med, 3);
+ YAP_UserCPredicate("gecode_boolvar_val", gecode_boolvar_val, 3);
+ YAP_UserCPredicate("gecode_boolvar_size", gecode_boolvar_size, 3);
+ YAP_UserCPredicate("gecode_boolvar_width", gecode_boolvar_width, 3);
+ YAP_UserCPredicate("gecode_boolvar_regret_min", gecode_boolvar_regret_min, 3);
+ YAP_UserCPredicate("gecode_boolvar_regret_max", gecode_boolvar_regret_max, 3);
+ // INFO ON SETVARS
+ YAP_UserCPredicate("gecode_setvar_assigned", gecode_setvar_assigned, 2);
+ YAP_UserCPredicate("gecode_setvar_glbSize", gecode_setvar_glbSize, 3);
+ YAP_UserCPredicate("gecode_setvar_lubSize", gecode_setvar_lubSize, 3);
+ YAP_UserCPredicate("gecode_setvar_unknownSize", gecode_setvar_unknownSize, 3);
+ YAP_UserCPredicate("gecode_setvar_cardMin", gecode_setvar_cardMin, 3);
+ YAP_UserCPredicate("gecode_setvar_cardMax", gecode_setvar_cardMax, 3);
+ YAP_UserCPredicate("gecode_setvar_lubMin", gecode_setvar_lubMin, 3);
+ YAP_UserCPredicate("gecode_setvar_lubMax", gecode_setvar_lubMax, 3);
+ YAP_UserCPredicate("gecode_setvar_glbMin", gecode_setvar_glbMin, 3);
+ YAP_UserCPredicate("gecode_setvar_glbMax", gecode_setvar_glbMax, 3);
+ YAP_UserCPredicate("gecode_setvar_glb_ranges", gecode_setvar_glb_ranges, 3);
+ YAP_UserCPredicate("gecode_setvar_lub_ranges", gecode_setvar_lub_ranges, 3);
+ YAP_UserCPredicate("gecode_setvar_unknown_ranges",
+ gecode_setvar_unknown_ranges, 3);
+ YAP_UserCPredicate("gecode_setvar_glb_values", gecode_setvar_glb_values, 3);
+ YAP_UserCPredicate("gecode_setvar_lub_values", gecode_setvar_lub_values, 3);
+ YAP_UserCPredicate("gecode_setvar_unknown_values",
+ gecode_setvar_unknown_values, 3);
+ YAP_UserCPredicate("gecode_space_use_keep_index", gecode_space_use_keep_index,
+ 2);
+ YAP_UserCPredicate("gecode_intvar_keep", gecode_intvar_keep, 3);
+ YAP_UserCPredicate("gecode_boolvar_keep", gecode_boolvar_keep, 3);
+ YAP_UserCPredicate("gecode_setvar_keep", gecode_setvar_keep, 3);
+ // INFO ON FLOATVARS
+ YAP_UserCPredicate("gecode_floatvar_assigned", gecode_floatvar_assigned, 2);
+ YAP_UserCPredicate("gecode_floatvar_min", gecode_floatvar_min, 3);
+ YAP_UserCPredicate("gecode_floatvar_max", gecode_floatvar_max, 3);
+ YAP_UserCPredicate("gecode_floatvar_med", gecode_floatvar_med, 3);
+ YAP_UserCPredicate("gecode_floatvar_size", gecode_floatvar_size, 3);
+}
}
diff --git a/packages/python/yap_kernel/setup.py.in b/packages/python/yap_kernel/setup.py.in
index 99af1e970..3eb5c9f82 100644
--- a/packages/python/yap_kernel/setup.py.in
+++ b/packages/python/yap_kernel/setup.py.in
@@ -108,12 +108,14 @@ if any(a.startswith(('bdist', 'build', 'install')) for a in sys.argv):
(pjoin('share', 'jupyter', 'kernels', KERNEL_NAME), glob(pjoin(dest, '*'))),
]
mode_loc = pjoin( sysconfig.get_path('platlib'), 'notebook', 'static', 'components', 'codemirror', 'mode', 'prolog')
+ custom_loc = pjoin( sysconfig.get_path('platlib'), 'notebook', 'static', 'custom')
try:
- os.mkdir(mode_loc)
+ os.makedirs(mode_loc)
+ shutil.copy( "${CMAKE_SOURCE_DIR}/misc/editors/prolog.js" , mode_loc)
except:
pass
- shutil.copy( "${CMAKE_SOURCE_DIR}/misc/editors/prolog.js" , mode_loc)
-
+ shutil.copy( pjoin( custom_loc, "custom.js") , pjoin( custom_loc, "custom.js.orig"))
+ shutil.copy( "${CMAKE_CURRENT_SOURCE_DIR}/custom.js" , pjoin( custom_loc, "custom.js"))
extras_require = setuptools_args['extras_require'] = {
'test:python_version=="2.7"': ['mock'],
@@ -124,4 +126,4 @@ if 'setuptools' in sys.modules:
setup_args.update(setuptools_args)
if __name__ == '__main__':
- setup(**setup_args)
+ setup(**setup_args)
\ No newline at end of file