40 namespace Gecode {
namespace Int {
namespace NValues {
76 vs.add(home,
x[
i].val());
87 dis = r.
alloc<
int>(
n); n_dis = 0;
91 switch (vs.compare(
x[i])) {
114 if (vs.subset(
x[
i])) {
126 assert(
x.size() > 0);
130 for (
int i=
x.size()-1;
i--; ) {
137 if (static_cast<unsigned int>(
x.size()+vs.size()) < s)
138 return x.size() + vs.size();
140 return static_cast<int>(s);
146 for (
int i=
x.size();
i--; ) {
164 if (y.max() == vs.size() + 1) {
167 for (
int i=n_dis;
i--; )
176 for (
int i=
x.size(); i--; ) {
187 int* deg = r.
alloc<
int>(
x.size());
189 int** ovl_i = r.
alloc<
int*>(
x.size());
191 int* n_ovl_i = r.
alloc<
int>(
x.size());
195 for (
int i=
x.size();
i--; )
199 int* m = r.
alloc<
int>(n_dis*(n_dis-1));
200 for (
int i=n_dis;
i--; ) {
202 ovl_i[dis[
i]] = m; m += n_dis-1;
212 for (
int i=n_dis;
i--; )
219 for (
int i=n_dis; i--; )
235 for (
int i=0;
true; i++)
241 int di = re[
i].
view, dj = j.val();
242 if (!ovl.get(di,dj)) {
244 ovl_i[di][deg[di]++] = dj;
245 ovl_i[dj][deg[dj]++] = di;
248 cur.
set(static_cast<unsigned int>(re[i].view));
251 cur.
clear(static_cast<unsigned int>(re[i].view));
263 for (
int i=n_dis;
i--; ) {
264 assert(deg[dis[
i]] < n_dis);
265 n_ovl_i[dis[
i]] = deg[dis[
i]];
269 int* ind = r.
alloc<
int>(n_dis);
274 int d_min = deg[dis[i_min]];
275 unsigned int s_min =
x[dis[i_min]].size();
278 for (
int i=n_dis-1;
i--; )
279 if ((d_min > deg[dis[
i]]) ||
280 ((d_min == deg[dis[i]]) && (s_min >
x[dis[i]].
size()))) {
283 s_min =
x[dis[
i]].size();
287 ind[n_ind++] = dis[i_min]; dis[i_min] = dis[--n_dis];
290 for (
int i=n_dis; i--; )
291 if (ovl.get(dis[i],ind[n_ind-1])) {
293 for (
int j=n_ovl_i[dis[i]]; j--; )
294 deg[ovl_i[dis[i]][j]]--;
296 dis[
i] = dis[--n_dis];
303 if (vs.size() + n_ind == y.max()) {
306 for (
int i=n_ind;
i--; )
311 for (
int i=
x.size(); i--; ) {
329 if (y.min() == g.
size()) {
331 if (vs.size() +
x.size() == g.
size()) {
333 for (
int i=
x.size();
i--; ) {
ExecStatus prune_lower(Space &home, int *dis, int n_dis)
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
bool initialized(void) const
Test whether graph has been initialized.
Event for range-based overlap analysis.
void add(Space &home)
Add values of assigned views to value set.
static PropCost quadratic(PropCost::Mod m, unsigned int n)
Quadratic complexity for modifier m and size measure n.
int size(Space &home) const
Return a size estimate based on the union of all values.
ExecStatus ES_SUBSUMED(Propagator &p)
void clear(unsigned int i)
Clear bit i.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
Mixed (n+1)-ary propagator.
First is subset of second iterator.
Domain consistent distinct propagator.
int val
The value for the range (first or last value, depending on type)
void eliminate(Space &home)
Eliminate subsumed views (all values included in the value set vs)
Range iterator for integer variable views
Value iterator for values in a bitset.
#define GECODE_ES_CHECK(es)
Check whether execution status es is failed or subsumed, and forward failure or subsumption.
ExecStatus all_in_valset(Space &home)
Propagate that all views must take values from value set.
int p
Number of positive literals for node type.
Gecode::IntArgs i(4, 1, 2, 3, 4)
void quicksort(Type *l, Type *r, Less &less)
Standard quick sort.
int n
Number of negative literals for node type.
void reset(void)
Reset iterator to start.
Execution has resulted in failure.
const Gecode::PropCond PC_INT_BND
Propagate when minimum or maximum of a view changes.
IntBase(Home home, ValSet &vs, ViewArray< IntView > &x, VY y)
Constructor for posting.
ExecStatus prune_upper(Space &home, Graph &g)
Range iterator for union of iterators.
int view
Which view does this range belong to.
unsigned int size(I &i)
Size of all ranges of range iterator i.
const Gecode::PropCond PC_INT_DOM
Propagate when domain changes.
void purge(void)
Purge graph if necessary (reset information to avoid overflow)
View-value graph for propagation of upper bound.
void set(unsigned int i)
Set bit i.
int size(void) const
Return size of maximal matching (excluding assigned views)
ValSet vs
Value set storing the values of already assigned views.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
void sync(Space &home)
Synchronize graph with new view domains.
union Gecode::@518::NNF::@57 u
Union depending on nodetype t.
void disjoint(Space &home, Region &r, int *&dis, int &n_dis)
Integer view for integer variables.
const int infinity
Infinity for integers.
RangeEventType ret
The event type.
Node * x
Pointer to corresponding Boolean expression node.
Range iterator for intersection of iterators.
Symmetric diagonal bit matrix.
bool assigned(View x, int v)
Whether x is assigned to value v.
void free(T *b, long unsigned int n)
Delete n objects allocated from the region starting at b.
Class for storing values of already assigned views.
Gecode toplevel namespace
void update(Space &home, bool share, ValSet &vs)
Update value set during cloning.
Number of values propagator for integer views base class.
int ModEventDelta
Modification event deltas.
virtual PropCost cost(const Space &, const ModEventDelta &) const
Cost function.
Home class for posting propagators
#define GECODE_NEVER
Assert that this command is never executed.
void init(Space &home, const ValSet &vs, const ViewArray< IntView > &x)
Initialize graph including values in vs.
ExecStatus prune(Space &home)
Prune all values corresponding to unused edges.