41 namespace Gecode {
namespace Int {
namespace Extensional {
80 template<
class View,
class Val,
class Degree,
class StateIdx>
87 template<
class View,
class Val,
class Degree,
class StateIdx>
90 return layers[
i].states[is];
92 template<
class View,
class Val,
class Degree,
class StateIdx>
98 template<
class View,
class Val,
class Degree,
class StateIdx>
102 return --i_state(i,e).o_deg == 0;
104 template<
class View,
class Val,
class Degree,
class StateIdx>
107 return layers[i+1].states[os];
109 template<
class View,
class Val,
class Degree,
class StateIdx>
115 template<
class View,
class Val,
class Degree,
class StateIdx>
119 return --o_state(i,e).i_deg == 0;
126 template<
class View,
class Val,
class Degree,
class StateIdx>
129 template<
class View,
class Val,
class Degree,
class StateIdx>
133 : s1(l.support), s2(l.support+l.
size) {}
134 template<
class View,
class Val,
class Degree,
class StateIdx>
139 template<
class View,
class Val,
class Degree,
class StateIdx>
145 template<
class View,
class Val,
class Degree,
class StateIdx>
150 template<
class View,
class Val,
class Degree,
class StateIdx>
161 template<
class View,
class Val,
class Degree,
class StateIdx>
168 template<
class View,
class Val,
class Degree,
class StateIdx>
172 :
Advisor(home,share,a), i(a.i) {}
179 template<
class View,
class Val,
class Degree,
class StateIdx>
182 : _fst(INT_MAX), _lst(INT_MIN) {}
183 template<
class View,
class Val,
class Degree,
class StateIdx>
186 _fst=INT_MAX; _lst=INT_MIN;
188 template<
class View,
class Val,
class Degree,
class StateIdx>
193 template<
class View,
class Val,
class Degree,
class StateIdx>
199 template<
class View,
class Val,
class Degree,
class StateIdx>
204 template<
class View,
class Val,
class Degree,
class StateIdx>
216 template<
class View,
class Val,
class Degree,
class StateIdx>
221 template<
class View,
class Val,
class Degree,
class StateIdx>
234 template<
class View,
class Val,
class Degree,
class StateIdx>
245 template<
class View,
class Val,
class Degree,
class StateIdx>
250 unsigned int n_e = 0;
251 unsigned int n_s = 0;
253 for (
int i=
n; i--; ) {
262 assert(n_s <= n_states);
267 template<
class View,
class Val,
class Degree,
class StateIdx>
281 for (
int i=static_cast<int>(
max_states)*(
n+1); i--; )
283 for (
int i=
n+1; i--; )
293 for (
int i=0; i<
n; i++) {
301 if (
i_state(i,static_cast<StateIdx>(
t.i_state())).
i_deg != 0) {
312 s.
val =
static_cast<Val
>(nx.val());
325 o_state(n-1,static_cast<StateIdx>(s)).o_deg = 1;
328 for (
int i=n; i--; ) {
348 layers[i].x.subscribe(home, *new (home)
Index(home,*
this,
c,i));
364 d += static_cast<unsigned int>(
layers[n].states[j].i_deg);
367 static_cast<unsigned int>
371 if ((
layers[n].states[j].o_deg != 0) ||
390 StateIdx max_s = i_n;
392 for (
int i=n; i--; ) {
394 std::swap(o_map,i_map); i_n=0;
397 if ((
layers[i].states[j].o_deg != 0) ||
398 (
layers[i].states[j].i_deg != 0))
408 for (Degree deg=ls.
n_edges; deg--; ) {
417 for (
int i=n+1; i--; ) {
420 if ((
layers[i].states[j].o_deg != 0) ||
440 template<
class View,
class Val,
class Degree,
class StateIdx>
445 if (
layers[0].states == NULL) {
447 for (
unsigned int i=
n_states; i--; )
451 for (
int i=
n; i--; ) {
456 for (Degree deg=s.
n_edges; deg--; ) {
481 Val
n =
static_cast<Val
>(
layers[
i].
x.val());
487 for (Degree deg=s.
n_edges; deg--; ) {
493 assert(
layers[i].support[j].val == n);
500 for (Degree deg=ls.
n_edges; deg--; ) {
506 }
else if (
layers[i].
x.any(d)) {
512 if (ls.
val < static_cast<Val>(rx.min())) {
515 for (Degree deg=ls.
n_edges; deg--; ) {
521 }
else if (ls.
val > static_cast<Val>(rx.max())) {
534 for (Degree deg=ls.
n_edges; deg--; ) {
549 for (; (j<s) && (
layers[i].support[j].val <= max); j++) {
552 for (Degree deg=ls.
n_edges; deg--; ) {
568 if (o_mod && (i > 0)) {
571 if (i_mod && (i+1 <
n)) {
586 template<
class View,
class Val,
class Degree,
class StateIdx>
591 return sizeof(*this);
594 template<
class View,
class Val,
class Degree,
class StateIdx>
600 template<
class View,
class Val,
class Degree,
class StateIdx>
633 if (o_mod && (i > 0))
635 if (i_mod && (i+1 <
n))
667 if (o_mod && (i > 0))
684 template<
class View,
class Val,
class Degree,
class StateIdx>
696 assert(x.
size() > 0);
697 for (
int i=x.
size(); i--; ) {
707 template<
class View,
class Val,
class Degree,
class StateIdx>
715 c.update(home,share,p.
c);
722 for (
int i=
n; i--; ) {
742 template<
class View,
class Val,
class Degree,
class StateIdx>
749 template<
class View,
class Val,
class Degree,
class StateIdx>
771 n_edges -=
static_cast<unsigned int>(k);
785 assert((f >= 0) && (l <=
n));
797 if ((
layers[l].states[j].i_deg != 0) ||
815 for (
int i=l-1; i>=f; i--) {
817 std::swap(o_map,i_map); i_n=0;
821 if ((
layers[i].states[j].o_deg != 0) ||
822 (
layers[i].states[j].i_deg != 0)) {
869 switch (t_state_idx) {
878 <
typename VarTraits<Var>::View,
short int,
unsigned short int,
unsigned char>
882 <
typename VarTraits<Var>::View,
short int,
unsigned int,
unsigned char>
895 <
typename VarTraits<Var>::View,
short int,
unsigned short int,
unsigned short int>
899 <
typename VarTraits<Var>::View,
short int,
unsigned int,
unsigned short int>
912 <
typename VarTraits<Var>::View,
short int,
unsigned short int,
unsigned int>
916 <
typename VarTraits<Var>::View,
short int,
unsigned int,
unsigned int>
925 switch (t_state_idx) {
934 <
typename VarTraits<Var>::View,int,
unsigned short int,
unsigned char>
938 <
typename VarTraits<Var>::View,int,
unsigned int,
unsigned char>
951 <
typename VarTraits<Var>::View,int,
unsigned short int,
unsigned short int>
955 <
typename VarTraits<Var>::View,int,
unsigned int,
unsigned short int>
968 <
typename VarTraits<Var>::View,int,
unsigned short int,
unsigned int>
972 <
typename VarTraits<Var>::View,int,
unsigned int,
unsigned int>
IndexRange i_ch
Index range with in-degree modifications.
int fst(void) const
Return first position.
void init(void)
Initialize links (self-linked)
static T * copy(T *d, const T *s, long unsigned int n)
Copy n objects starting at s to d.
int final_fst(void) const
Return the number of the first final state.
int size(void) const
Return size of array (number of elements)
void audit(void)
Perform consistency check on data structures.
Edge defined by in-state and out-state
static PropCost linear(PropCost::Mod m, unsigned int n)
Linear complexity for modifier pcm and size measure n.
Council< Index > c
The advisor council.
Iterator for DFA symbols.
ExecStatus ES_SUBSUMED(Propagator &p)
const FloatNum max
Largest allowed float value.
int n
Number of layers (and views)
Iterator for telling variable domains by scanning support.
IndexRange a_ch
Index range for any change (for compression)
StateIdx n_states
Number of states used by outgoing edges.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
Traits class for variables.
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
unsigned int n_states
Total number of states.
Index(Space &home, Propagator &p, Council< Index > &c, int i)
Create index advisor.
IntType u_type(unsigned int n)
Return type required to represent n.
void init(const Layer &l)
Initialize for support of layer l.
StateIdx i_state
Number of in-state.
Base-class for propagators.
ExecStatus ES_NOFIX_DISPOSE(Council< A > &c, A &a)
Advisor a must be disposed and its propagator must be run
Class to iterate over advisors of a council.
Value iterator for integer views.
void lshift(int n)
Shift index range by n elements to the left.
Propagation has computed fixpoint.
Int::IntView View
The variable type of an IntView.
Support information for a value
bool i_dec(int i, const Edge &e)
Decrement out degree for in state of edge e for layer i.
IndexRange o_ch
Index range with out-degree modifications.
Base-class for both propagators and branchers.
Range iterator for integer views.
IntType s_type(signed int n)
Return type required to represent n.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from space heap.
State & o_state(int i, StateIdx os)
Return out state for layer i and state index os.
ValSize size
Number of supported values.
StateIdx o_state
Number of out-state.
Deterministic finite automaton (DFA)
struct Gecode::@554::NNF::@60::@62 a
For atomic nodes.
int p
Number of positive literals for node type.
const FloatNum min
Smallest allowed float value.
Gecode::IntArgs i(4, 1, 2, 3, 4)
void operator++(void)
Move to next supported value.
Support * support
Supported values.
Execution has resulted in failure.
Range approximation of which positions have changed.
const Gecode::ModEvent ME_INT_VAL
Domain operation has resulted in a value (assigned variable)
bool assigned(void) const
Test if all variables are assigned.
int lst(void) const
Return last position.
Layer for a view in the layered graph
Degree n_edges
Number of supporting edges.
int symbol_max(void) const
Return largest symbol in DFA.
unsigned int size(I &i)
Size of all ranges of range iterator i.
LayeredGraph(Space &home, bool share, LayeredGraph< View, Val, Degree, StateIdx > &p)
Constructor for cloning p.
size_t size
The size of the propagator (used during subsumption)
Layer * layers
The layers of the graph.
StateIdx max_states
Maximal number of states per layer.
ExecStatus post_lgp(Home home, const VarArgArray< Var > &x, const DFA &dfa)
Select small types for the layered graph propagator.
void reset(void)
Reset range to be empty.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
Traits to for information about integer types.
Degree o_deg
The out-degree (number of outgoing edges) Initialize with zeroes.
State * states
States used by outgoing edges.
Boolean integer variables.
Domain consistent layered graph (regular) propagator.
LayerValues(void)
Default constructor.
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Integer view for integer variables.
static ExecStatus post(Home home, const VarArgArray< Var > &x, const DFA &dfa)
Post propagator on views x and DFA dfa.
Node * x
Pointer to corresponding Boolean expression node.
Generic domain change information to be supplied to advisors.
bool empty(void) const
Test whether range is empty.
Advisors for views (by position in array)
unsigned int max_degree(void) const
Return maximal degree (in-degree and out-degree) of any state.
virtual size_t dispose(Space &home)
Delete actor and return its size.
void dispose(Space &home, Council< A > &c)
Dispose the advisor.
const Gecode::ModEvent ME_INT_DOM
Domain operation has changed the domain.
IndexRange(void)
Initialize range as empty.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Iterator for DFA transitions (sorted by symbols)
Propagation has not computed fixpoint.
int n_states(void) const
Return the number of states.
bool operator()(void) const
Test whether more values supported.
void add(int i)
Add index i to range.
Edge * edges
Supporting edges in layered graph.
Int::BoolView View
The variable type of an IntView.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function (defined as high linear)
State & i_state(int i, StateIdx is)
Return in state for layer i and state index is.
Gecode toplevel namespace
Argument array for variables.
int symbol_min(void) const
Return smallest symbol in DFA.
ExecStatus initialize(Space &home, const VarArgArray< Var > &x, const DFA &dfa)
Initialize layered graph.
States are described by number of incoming and outgoing edges.
Degree i_deg
The in-degree (number of incoming edges)
virtual void reschedule(Space &home)
Schedule function.
bool o_dec(int i, const Edge &e)
Decrement in degree for out state of edge e for layer i.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
IntType
Description of integer types.
int final_lst(void) const
Return the number of the last final state.
int ModEventDelta
Modification event deltas.
Home class for posting propagators
#define GECODE_NEVER
Assert that this command is never executed.
int val(void) const
Return supported value.
unsigned int n_edges
Total number of edges.
virtual Actor * copy(Space &home, bool share)
Copy propagator during cloning.
Gecode::Support::IntTypeTraits< Val >::utype ValSize
Type for support size.
virtual ExecStatus advise(Space &home, Advisor &a, const Delta &d)
Give advice to propagator.
int i
The position of the view in the view array.
Boolean view for Boolean variables.