41 namespace Gecode {
namespace Int {
namespace Extensional {
47 template<
class View,
bool subscribe>
51 :
Propagator(home),
x(x0), tupleSet(t), last_data(NULL) {
55 assert(
ts()->finalized());
62 template<
class View,
bool subscribe>
66 x.update(home, share, p.
x);
72 template<
class View,
bool subscribe>
75 if (last_data == NULL) {
76 int literals =
static_cast<int>(ts()->domsize*
x.size());
78 for (
int i = literals;
i--; )
79 last_data[
i] = ts()->tuple_data+(source[
i]-base);
83 template<
class View,
bool subscribe>
86 return tupleSet.implementation();
89 template<
class View,
bool subscribe>
95 #define GECODE_LAST_TUPLE(l) (*(l))
97 template<
class View,
bool subscribe>
103 template<
class View,
bool subscribe>
106 assert(last(i,n) != NULL);
107 assert(last(i,n)[i] == n+ts()->
min);
108 int pos = (i*
static_cast<int>(ts()->domsize)) +
n;
110 if (last(i,n)[
i] != (n+ts()->min))
111 last_data[
pos] = ts()->nullpointer;
116 template<
class View,
bool subscribe>
119 unsigned int domsize = ts()->domsize;
120 for (
int i =
x.size();
i--; ) {
121 dom[
i].
init(home, domsize);
123 dom[i].set(static_cast<unsigned int>(vv.val()-ts()->min));
127 template<
class View,
bool subscribe>
130 for (
int i =
x.size();
i--; )
131 if (!dom[
i].
get(static_cast<unsigned int>(t[
i]-ts()->
min)))
135 #undef GECODE_LAST_TUPLE
136 template<
class View,
bool subscribe>
140 while ((l != NULL) && !
valid(l, dom))
146 template<
class View,
bool subscribe>
154 unsigned int literals = ts()->domsize*
x.size();
155 home.
rfree(last_data,
sizeof(
Tuple*)*literals);
156 (void) tupleSet.~TupleSet();
157 return sizeof(*this);