53 bool operator ()(
const std::pair<X,int>& lhs,
54 const std::pair<X,int>& rhs) {
55 return lhs.second < rhs.second;
60 IntVar unify(Home home, IntVar
x, IntVar y) {
65 IntSet unify(Home,
const IntSet&
x,
const IntSet& y) {
68 Iter::Ranges::Inter<IntSetRanges,IntSetRanges>
i(xr,yr);
75 void removeDuplicates(Home home, A&
c, IntArgs&
v) {
76 typedef typename A::value_type S;
77 typedef std::pair<S,int> P;
79 P*
a = re.alloc<P>(c.size());
86 int cur = a[0].second-1;
87 for (
int i=0; i<c.size(); i++) {
88 if (a[i].second==cur) {
89 cc[cc.size()-1] = unify(home, cc[cc.size()-1], a[
i].first);
96 re.free<P>(
a,c.size());
116 removeDuplicates(home,c,v);
121 for (
int i = v.
size(); i--; )
122 cv[i].init(c[i],v[i]);
142 for (
int i = c.
size(); i--; )
158 for (
int i=c.
size(); i--; ) {
167 removeDuplicates(home,c,v);
171 for (
int i = v.
size(); i--; ) {
172 if (c[i].ranges() > 1) {
175 for (
int j = v.
size(); j--; )
176 cv[j].init(home,c[j],v[j]);
197 for (
int i = c.
size(); i--; )
198 cv[i].init(home,c[i].
min(),c[
i].max(),v[
i]);
219 for (
int i = c.
size(); i--; )
228 for (
int i = v.
size(); i--; )
230 count(home, x, cards, v, icl);