MCPcopy Create free account
hub / github.com/Gecode/gecode / p_int_lin_CMP

Function p_int_lin_CMP

gecode/flatzinc/registry.cpp:197–226  ·  view source on GitHub ↗

linear (in-)equations */

Source from the content-addressed store, hash-verified

195
196 /* linear (in-)equations */
197 void p_int_lin_CMP(FlatZincSpace& s, IntRelType irt, const ConExpr& ce,
198 AST::Node* ann) {
199 IntArgs ia = s.arg2intargs(ce[0]);
200 int singleIntVar;
201 if (s.isBoolArray(ce[1],singleIntVar)) {
202 if (singleIntVar != -1) {
203 if (std::abs(ia[singleIntVar]) == 1 && ce[2]->getInt() == 0) {
204 IntVar siv = s.arg2IntVar(ce[1]->getArray()->a[singleIntVar]);
205 BoolVarArgs iv = s.arg2boolvarargs(ce[1], 0, singleIntVar);
206 IntArgs ia_tmp(ia.size()-1);
207 int count = 0;
208 for (int i=0; i<ia.size(); i++) {
209 if (i != singleIntVar)
210 ia_tmp[count++] = ia[singleIntVar] == -1 ? ia[i] : -ia[i];
211 }
212 IntRelType t = (ia[singleIntVar] == -1 ? irt : swap(irt));
213 linear(s, ia_tmp, iv, t, siv, s.ann2ipl(ann));
214 } else {
215 IntVarArgs iv = s.arg2intvarargs(ce[1]);
216 linear(s, ia, iv, irt, ce[2]->getInt(), s.ann2ipl(ann));
217 }
218 } else {
219 BoolVarArgs iv = s.arg2boolvarargs(ce[1]);
220 linear(s, ia, iv, irt, ce[2]->getInt(), s.ann2ipl(ann));
221 }
222 } else {
223 IntVarArgs iv = s.arg2intvarargs(ce[1]);
224 linear(s, ia, iv, irt, ce[2]->getInt(), s.ann2ipl(ann));
225 }
226 }
227 void p_int_lin_CMP_reif(FlatZincSpace& s, IntRelType irt, ReifyMode rm,
228 const ConExpr& ce, AST::Node* ann) {
229 if (rm == RM_EQV && ce[2]->isBool()) {

Callers 7

p_int_lin_CMP_reifFunction · 0.85
p_int_lin_eqFunction · 0.85
p_int_lin_neFunction · 0.85
p_int_lin_leFunction · 0.85
p_int_lin_ltFunction · 0.85
p_int_lin_geFunction · 0.85
p_int_lin_gtFunction · 0.85

Calls 11

arg2intargsMethod · 0.80
isBoolArrayMethod · 0.80
getIntMethod · 0.80
arg2IntVarMethod · 0.80
getArrayMethod · 0.80
arg2boolvarargsMethod · 0.80
ann2iplMethod · 0.80
arg2intvarargsMethod · 0.80
absFunction · 0.50
linearFunction · 0.50
sizeMethod · 0.45

Tested by

no test coverage detected