@@ -37,24 +37,62 @@ public:
37
37
raiseTypeError (vm,MOZART_STR (" InvalidIntegerConsistencyLevel" ),l);
38
38
return Gecode::ICL_DEF;
39
39
}
40
+
41
+ static Gecode::IntVarBranch atomToIntVarBranch (VM vm, In bvar){
42
+ atom_t a = getArgument<atom_t >(vm,bvar,MOZART_STR (" Atom" ));
43
+ if (a == vm->coreatoms .int_var_none ) return Gecode::INT_VAR_NONE;
44
+ if (a == vm->coreatoms .int_var_rnd ) return Gecode::INT_VAR_RND;
45
+ if (a == vm->coreatoms .int_var_degree_min ) return Gecode::INT_VAR_DEGREE_MIN;
46
+ if (a == vm->coreatoms .int_var_degree_max ) return Gecode::INT_VAR_DEGREE_MAX;
47
+ if (a == vm->coreatoms .int_var_afc_min ) return Gecode::INT_VAR_AFC_MIN;
48
+ if (a == vm->coreatoms .int_var_min_min ) return Gecode::INT_VAR_MIN_MIN;
49
+ if (a == vm->coreatoms .int_var_min_max ) return Gecode::INT_VAR_MIN_MAX;
50
+ if (a == vm->coreatoms .int_var_max_min ) return Gecode::INT_VAR_MAX_MIN;
51
+ if (a == vm->coreatoms .int_var_max_max ) return Gecode::INT_VAR_MAX_MAX;
52
+ if (a == vm->coreatoms .int_var_size_min ) return Gecode::INT_VAR_SIZE_MIN;
53
+ if (a == vm->coreatoms .int_var_size_max ) return Gecode::INT_VAR_SIZE_MAX;
54
+ if (a == vm->coreatoms .int_var_size_degree_min ) return Gecode::INT_VAR_SIZE_DEGREE_MIN;
55
+ if (a == vm->coreatoms .int_var_size_degree_max ) return Gecode::INT_VAR_SIZE_DEGREE_MAX;
56
+ if (a == vm->coreatoms .int_var_size_afc_min ) return Gecode::INT_VAR_SIZE_AFC_MIN;
57
+ if (a == vm->coreatoms .int_var_size_afc_max ) return Gecode::INT_VAR_SIZE_AFC_MAX;
58
+ if (a == vm->coreatoms .int_var_regret_min_min ) return Gecode::INT_VAR_REGRET_MIN_MIN;
59
+ if (a == vm->coreatoms .int_var_regret_min_max ) return Gecode::INT_VAR_REGRET_MIN_MAX;
60
+ if (a == vm->coreatoms .int_var_regret_max_min ) return Gecode::INT_VAR_REGRET_MAX_MIN;
61
+ if (a == vm->coreatoms .int_var_regret_max_max ) return Gecode::INT_VAR_REGRET_MAX_MAX;
62
+ raiseTypeError (vm,MOZART_STR (" InvalidIntegerBranchType" ),bvar);
63
+ return Gecode::INT_VAR_NONE;
64
+ }
65
+
66
+ static Gecode::IntValBranch atomToIntValBranch (VM vm, In bval){
67
+ atom_t a = getArgument<atom_t >(vm,bval,MOZART_STR (" Atom" ));
68
+ if (a == vm->coreatoms .int_val_min ) return Gecode::INT_VAL_MIN;
69
+ if (a == vm->coreatoms .int_val_med ) return Gecode::INT_VAL_MED;
70
+ if (a == vm->coreatoms .int_val_max ) return Gecode::INT_VAL_MAX;
71
+ if (a == vm->coreatoms .int_val_rad ) return Gecode::INT_VAL_RND;
72
+ if (a == vm->coreatoms .int_val_split_min ) return Gecode::INT_VAL_SPLIT_MIN;
73
+ if (a == vm->coreatoms .int_val_split_max ) return Gecode::INT_VAL_SPLIT_MAX;
74
+ if (a == vm->coreatoms .int_val_range_min ) return Gecode::INT_VAL_RANGE_MIN;
75
+ if (a == vm->coreatoms .int_val_range_max ) return Gecode::INT_VAL_RANGE_MAX;
76
+ if (a == vm->coreatoms .int_values_min ) return Gecode::INT_VALUES_MIN;
77
+ if (a == vm->coreatoms .int_values_max ) return Gecode::INT_VALUES_MAX;
78
+ raiseTypeError (vm,MOZART_STR (" InvalidIntegerBranchType" ),bval);
79
+ return Gecode::INT_VAL_MIN;
80
+ }
40
81
41
82
static Gecode::IntVarArgs getIntVarArgs (VM vm, In x){
42
83
size_t width;
43
84
44
85
if (x.is <Tuple>()){
45
86
width = x.as <Tuple>().getWidth ();
46
87
Gecode::IntVarArgs v (width);
47
- std::cout << " Is tuple" << width << std::endl;
88
+ // std::cout << "Is tuple" << width << std::endl;
48
89
for (int i=0 ; i<width; i++){
49
90
StableNode* t=x.as <Tuple>().getElement (i);
50
91
UnstableNode a = Reference::build (vm, t);
51
92
RichNode tt = a;
52
93
assert (tt.is <CstIntVar>());
53
94
v[i] = IntVarLike (tt.as <CstIntVar>()).intVar (vm);
54
95
}
55
- for (int i=0 ; i<width; i++){
56
- std::cout << v[i].min () << std::endl;
57
- }
58
96
return v;
59
97
}else if (x.is <Cons>()){
60
98
std::cout << " Args is Cons" << std::endl;
@@ -91,6 +129,18 @@ public:
91
129
}
92
130
};
93
131
132
+ class Branch : public Builtin <Branch> {
133
+ public:
134
+ Branch (): Builtin(" branch" ) {}
135
+ static void call (VM vm, In x, In bvar, In bval) {
136
+ assert (vm->getCurrentSpace ()->hasConstraintSpace ());
137
+ GecodeSpace& home = vm->getCurrentSpace ()->getCstSpace ();
138
+ Gecode::IntVarBranch bvart = atomToIntVarBranch (vm,bvar);
139
+ Gecode::IntValBranch bvalt = atomToIntValBranch (vm,bval);
140
+ Gecode::branch (home,getIntVarArgs (vm,x),bvart,bvalt);
141
+ }
142
+ };
143
+
94
144
}; // class ModIntVarProp
95
145
} // namespace builtins
96
146
} // namespace mozart
0 commit comments