43 namespace Gecode {
namespace Int {
namespace GCC {
74 return new (home)
Val<Card>(home,share,*
this);
100 for (
int i = k.
size();
i--; ) {
101 removed += k[
i].counter();
102 sum_min += k[
i].min();
108 for (
int i = k.
size();
i--; )
114 for (
int i = x.
size();
i--; )
126 for (
int i = k.
size();
i--; )
140 for (
int i = k.
size();
i--; ) {
141 int ci = count[
i] + k[
i].counter();
157 if ((req == non) && (n_r == 1)) {
159 for (
int i = x.
size();
i--; ) {
163 assert((single >= 0) && (single < k.
size()));
167 assert((single >= 0) && (single < k.
size()));
169 for (
int i = k.
size();
i--; )
177 for (
int i = k.
size();
i--; ) {
178 int ci = count[
i] + k[
i].counter();
179 if (ci == k[
i].
max()) {
181 rem.
set(static_cast<unsigned int>(
i));
186 if (ci > k[
i].
max()) {
191 if (Card::propagate) {
193 int occupied = t_noa - ci;
204 for (
int i = n_x;
i--; ) {
210 if (rem.
get(static_cast<unsigned int>(idx)))
220 int* p = r.alloc<
int>(k.
size());
224 p[n_p++] = k[
i.val()].card();
226 for (
int i = x.
size();
i--;) {
233 bool all_assigned =
true;
235 for (
int i = x.
size();
i--; ) {
243 all_assigned =
false;
248 for (
int i = k.
size();
i--; )
254 if (Card::propagate) {
258 for (
int i = k.
size();
i--; ) {
259 if (k[
i].counter() > k[
i].max()) {
262 allmax += k[
i].max() - k[
i].counter();
263 if (k[
i].counter() < k[
i].
min())
264 reqmin += k[
i].min() - k[
i].counter();
268 if ((x.
size() < reqmin) || (allmax < x.
size())) {
279 return prop_val<Card>(home, *
this, x, k);
288 if (isDistinct<Card>(home,x,k))