| 160 | } |
| 161 | |
| 162 | void |
| 163 | argmin(Home home, const IntVarArgs& x, IntVar y, bool tiebreak, |
| 164 | IntPropLevel) { |
| 165 | using namespace Int; |
| 166 | if (x.size() == 0) |
| 167 | throw TooFewArguments("Int::argmin"); |
| 168 | if (same(x,y)) |
| 169 | throw ArgumentSame("Int::argmin"); |
| 170 | GECODE_POST; |
| 171 | // Constrain y properly |
| 172 | IntView yv(y); |
| 173 | GECODE_ME_FAIL(yv.gq(home,0)); |
| 174 | GECODE_ME_FAIL(yv.le(home,x.size())); |
| 175 | // Construct index view array |
| 176 | IdxViewArray<MinusView> ix(home,x.size()); |
| 177 | for (int i=0; i<x.size(); i++) { |
| 178 | ix[i].idx=i; ix[i].view=MinusView(x[i]); |
| 179 | } |
| 180 | if (tiebreak) |
| 181 | GECODE_ES_FAIL((Arithmetic::ArgMax<MinusView,IntView,true> |
| 182 | ::post(home,ix,yv))); |
| 183 | else |
| 184 | GECODE_ES_FAIL((Arithmetic::ArgMax<MinusView,IntView,false> |
| 185 | ::post(home,ix,yv))); |
| 186 | } |
| 187 | |
| 188 | void |
| 189 | argmin(Home home, const IntVarArgs& x, int o, IntVar y, bool tiebreak, |
no test coverage detected