| 983 | } |
| 984 | |
| 985 | void p_bin_packing_load(FlatZincSpace& s, const ConExpr& ce, |
| 986 | AST::Node* ann) { |
| 987 | int minIdx = ce[3]->getInt(); |
| 988 | IntVarArgs load = s.arg2intvarargs(ce[0]); |
| 989 | IntVarArgs l; |
| 990 | IntVarArgs bin = s.arg2intvarargs(ce[1]); |
| 991 | for (int i=bin.size(); i--;) |
| 992 | rel(s, bin[i] >= minIdx); |
| 993 | if (minIdx > 0) { |
| 994 | for (int i=minIdx; i--;) |
| 995 | l << IntVar(s,0,0); |
| 996 | } else if (minIdx < 0) { |
| 997 | IntVarArgs bin2(bin.size()); |
| 998 | for (int i=bin.size(); i--;) |
| 999 | bin2[i] = expr(s, bin[i]-minIdx, s.ann2ipl(ann)); |
| 1000 | bin = bin2; |
| 1001 | } |
| 1002 | l << load; |
| 1003 | IntArgs sizes = s.arg2intargs(ce[2]); |
| 1004 | |
| 1005 | IntVarArgs allvars = l + bin; |
| 1006 | unshare(s, allvars); |
| 1007 | binpacking(s, allvars.slice(0,1,l.size()), allvars.slice(l.size(),1,bin.size()), |
| 1008 | sizes, s.ann2ipl(ann)); |
| 1009 | } |
| 1010 | |
| 1011 | void p_global_cardinality(FlatZincSpace& s, const ConExpr& ce, |
| 1012 | AST::Node* ann) { |
nothing calls this directly
no test coverage detected