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>
178 template<
class View,
class Val,
class Degree,
class StateIdx>
181 : _fst(INT_MAX), _lst(INT_MIN) {}
182 template<
class View,
class Val,
class Degree,
class StateIdx>
185 _fst=INT_MAX; _lst=INT_MIN;
187 template<
class View,
class Val,
class Degree,
class StateIdx>
192 template<
class View,
class Val,
class Degree,
class StateIdx>
198 template<
class View,
class Val,
class Degree,
class StateIdx>
203 template<
class View,
class Val,
class Degree,
class StateIdx>
215 template<
class View,
class Val,
class Degree,
class StateIdx>
220 template<
class View,
class Val,
class Degree,
class StateIdx>
233 template<
class View,
class Val,
class Degree,
class StateIdx>
244 template<
class View,
class Val,
class Degree,
class StateIdx>
249 unsigned int n_e = 0;
250 unsigned int n_s = 0;
252 for (
int i=
n; i--; ) {
261 assert(n_s <= n_states);
266 template<
class View,
class Val,
class Degree,
class StateIdx>
280 for (
int i=static_cast<int>(
max_states)*(
n+1); i--; )
282 for (
int i=
n+1; i--; )
292 for (
int i=0; i<
n; i++) {
300 if (
i_state(i,static_cast<StateIdx>(
t.i_state())).
i_deg != 0) {
311 s.
val =
static_cast<Val
>(nx.val());
324 o_state(n-1,static_cast<StateIdx>(s)).o_deg = 1;
327 for (
int i=n; i--; ) {
347 layers[i].x.subscribe(home, *new (home)
Index(home,*
this,
c,i));
363 d += static_cast<unsigned int>(
layers[n].states[j].i_deg);
366 static_cast<unsigned int>
370 if ((
layers[n].states[j].o_deg != 0) ||
389 StateIdx max_s = i_n;
391 for (
int i=n; i--; ) {
396 if ((
layers[i].states[j].o_deg != 0) ||
397 (
layers[i].states[j].i_deg != 0))
407 for (Degree deg=ls.
n_edges; deg--; ) {
416 for (
int i=n+1; i--; ) {
419 if ((
layers[i].states[j].o_deg != 0) ||
439 template<
class View,
class Val,
class Degree,
class StateIdx>
444 if (
layers[0].states == NULL) {
446 for (
unsigned int i=
n_states; i--; )
450 for (
int i=
n; i--; ) {
455 for (Degree deg=s.
n_edges; deg--; ) {
480 Val
n =
static_cast<Val
>(
layers[
i].
x.val());
486 for (Degree deg=s.
n_edges; deg--; ) {
492 assert(
layers[i].support[j].val == n);
499 for (Degree deg=ls.
n_edges; deg--; ) {
505 }
else if (
layers[i].
x.any(d)) {
511 if (ls.
val < static_cast<Val>(rx.min())) {
514 for (Degree deg=ls.
n_edges; deg--; ) {
520 }
else if (ls.
val > static_cast<Val>(rx.max())) {
533 for (Degree deg=ls.
n_edges; deg--; ) {
548 for (; (j<s) && (
layers[i].support[j].val <= max); j++) {
551 for (Degree deg=ls.
n_edges; deg--; ) {
567 if (o_mod && (i > 0)) {
570 if (i_mod && (i+1 <
n)) {
585 template<
class View,
class Val,
class Degree,
class StateIdx>
590 return sizeof(*this);
593 template<
class View,
class Val,
class Degree,
class StateIdx>
599 template<
class View,
class Val,
class Degree,
class StateIdx>
632 if (o_mod && (i > 0))
634 if (i_mod && (i+1 <
n))
666 if (o_mod && (i > 0))
683 template<
class View,
class Val,
class Degree,
class StateIdx>
695 assert(x.
size() > 0);
696 for (
int i=x.
size(); i--; ) {
706 template<
class View,
class Val,
class Degree,
class StateIdx>
720 for (
int i=
n; i--; ) {
740 template<
class View,
class Val,
class Degree,
class StateIdx>
747 template<
class View,
class Val,
class Degree,
class StateIdx>
769 n_edges -=
static_cast<unsigned int>(k);
783 assert((f >= 0) && (l <=
n));
795 if ((
layers[l].states[j].i_deg != 0) ||
813 for (
int i=l-1; i>=
f; i--) {
819 if ((
layers[i].states[j].o_deg != 0) ||
820 (
layers[i].states[j].i_deg != 0)) {
867 switch (t_state_idx) {
876 <
typename VarTraits<Var>::View,
short int,
unsigned short int,
unsigned char>
880 <
typename VarTraits<Var>::View,
short int,
unsigned int,
unsigned char>
893 <
typename VarTraits<Var>::View,
short int,
unsigned short int,
unsigned short int>
897 <
typename VarTraits<Var>::View,
short int,
unsigned int,
unsigned short int>
910 <
typename VarTraits<Var>::View,
short int,
unsigned short int,
unsigned int>
914 <
typename VarTraits<Var>::View,
short int,
unsigned int,
unsigned int>
923 switch (t_state_idx) {
932 <
typename VarTraits<Var>::View,int,
unsigned short int,
unsigned char>
936 <
typename VarTraits<Var>::View,int,
unsigned int,
unsigned char>
949 <
typename VarTraits<Var>::View,int,
unsigned short int,
unsigned short int>
953 <
typename VarTraits<Var>::View,int,
unsigned int,
unsigned short int>
966 <
typename VarTraits<Var>::View,int,
unsigned short int,
unsigned int>
970 <
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.
LayeredGraph(Space &home, LayeredGraph< View, Val, Degree, StateIdx > &p)
Constructor for cloning p.
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)
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.
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.
Post propagator for SetVar SetOpType SetVar SetRelType r
LayerValues(void)
Default constructor.
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Post propagator for f(x \diamond_{\mathit{op}} y) \sim_r z \f$ void rel(Home home
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.
Generic domain change information to be supplied to advisors.
struct Gecode::@585::NNF::@62::@64 a
For atomic nodes.
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)
Post propagator for SetVar x
Propagation has not computed fixpoint.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
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.
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.
IntRelType swap(IntRelType irt)
Return swapped relation type of irt.
Boolean view for Boolean variables.