36 namespace Gecode {
namespace Int {
namespace NValues {
83 dis = r.
alloc<
int>(
n); n_dis = 0;
139 if (
y.max() ==
vs.
size() + 1) {
142 for (
int i=n_dis;
i--; )
151 for (
int i=
x.
size(); i--; ) {
174 int* m = r.
alloc<
int>(n_dis*(n_dis-1));
175 for (
int i=n_dis;
i--; ) {
177 ovl_i[dis[
i]] = m; m += n_dis-1;
187 for (
int i=n_dis;
i--; )
195 for (
int i=n_dis; i--; )
212 for (
int i=0;
true; i++)
218 int di = re[
i].
view, dj = j.val();
219 if (!ovl.get(di,dj)) {
221 ovl_i[di][deg[di]++] = dj;
222 ovl_i[dj][deg[dj]++] = di;
225 cur.
set(static_cast<unsigned int>(re[i].view));
228 cur.
clear(static_cast<unsigned int>(re[i].view));
240 for (
int i=n_dis;
i--; ) {
241 assert(deg[dis[
i]] < n_dis);
242 n_ovl_i[dis[
i]] = deg[dis[
i]];
246 int* ind = r.
alloc<
int>(n_dis);
251 int d_min = deg[dis[i_min]];
252 unsigned int s_min =
x[dis[i_min]].
size();
255 for (
int i=n_dis-1;
i--; )
256 if ((d_min > deg[dis[
i]]) ||
257 ((d_min == deg[dis[i]]) && (s_min >
x[dis[i]].
size()))) {
264 ind[n_ind++] = dis[i_min]; dis[i_min] = dis[--n_dis];
267 for (
int i=n_dis; i--; )
268 if (ovl.get(dis[i],ind[n_ind-1])) {
270 for (
int j=n_ovl_i[dis[i]]; j--; )
271 deg[ovl_i[dis[i]][j]]--;
273 dis[
i] = dis[--n_dis];
280 if (
vs.
size() + n_ind ==
y.max()) {
283 for (
int i=n_ind;
i--; )
288 for (
int i=
x.
size(); i--; ) {
306 if (
y.min() == g.
size()) {
ExecStatus prune_lower(Space &home, int *dis, int n_dis)
void free(void)
Free allocate memory.
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
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.
virtual PropCost cost(const Space &, const ModEventDelta &) const
Cost function.
void sync(void)
Synchronize graph with new view domains.
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
ViewArray< IntView > x
Array of 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.
void dispose(Space &home)
Dispose value set.
Execution has resulted in failure.
int size(void) const
Return size (number of values)
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.
const Gecode::PropCond PC_INT_DOM
Propagate when domain changes.
void purge(void)
Purge graph if necessary (reset information to avoid overflow)
void update(Space &home, ValSet &vs)
Update value set during cloning.
size_t size
The size of the propagator (used during subsumption)
View-value graph for propagation of upper bound.
void set(unsigned int i)
Set bit i.
void cancel(Space &home, Propagator &p, PropCond pc)
Cancel subscription of propagator p with propagation condition pc to all 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.
Post propagator for SetVar SetOpType SetVar SetRelType r
void disjoint(Space &home, Region &r, int *&dis, int &n_dis)
Integer view for integer variables.
const int infinity
Infinity for integers.
Post propagator for SetVar SetOpType SetVar y
RangeEventType ret
The event type.
Range iterator for intersection of iterators.
Iter::Ranges::CompareStatus compare(View x) const
Compare view x with value set.
Symmetric diagonal bit matrix.
bool assigned(View x, int v)
Whether x is assigned to value v.
int size(void) const
Return size of maximal matching (excluding assigned views)
Post propagator for SetVar x
Class for storing values of already assigned views.
Gecode toplevel namespace
bool subset(View x) const
Whether all values of x are included in the value set.
Number of values propagator for integer views base class.
int size(void) const
Return size of array (number of elements)
int ModEventDelta
Modification event deltas.
Home class for posting propagators
#define GECODE_NEVER
Assert that this command is never executed.
void add(Space &home, int v)
Add value v to value set.
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.