path.hh
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __GECODE_SEARCH_PAR_PATH_HH__
00035 #define __GECODE_SEARCH_PAR_PATH_HH__
00036
00037 #include <algorithm>
00038
00039 #include <gecode/search.hh>
00040 #include <gecode/search/support.hh>
00041 #include <gecode/search/worker.hh>
00042 #include <gecode/search/nogoods.hh>
00043
00044 namespace Gecode { namespace Search { namespace Par {
00045
00059 template<class Tracer>
00060 class Path : public NoGoods {
00061 friend class Search::NoGoodsProp;
00062 public:
00064 typedef typename Tracer::ID ID;
00066 class Edge {
00067 protected:
00069 Space* _space;
00071 unsigned int _alt;
00073 unsigned int _alt_max;
00075 const Choice* _choice;
00077 ID _nid;
00078 public:
00080 Edge(void);
00082 Edge(Space* s, Space* c, unsigned int nid);
00083
00085 Space* space(void) const;
00087 void space(Space* s);
00088
00090 const Choice* choice(void) const;
00091
00093 unsigned int alt(void) const;
00095 unsigned int truealt(void) const;
00097 bool rightmost(void) const;
00099 bool lao(void) const;
00101 bool work(void) const;
00103 void next(void);
00105 unsigned int steal(void);
00106
00108 unsigned int nid(void) const;
00109
00111 void dispose(void);
00112 };
00113 protected:
00115 Support::DynamicStack<Edge,Heap> ds;
00117 unsigned int _ngdl;
00119 unsigned int n_work;
00120 public:
00122 Path(unsigned int l);
00124 unsigned int ngdl(void) const;
00126 void ngdl(unsigned int l);
00128 const Choice* push(Worker& stat, Space* s, Space* c, unsigned int nid);
00130 void next(void);
00132 Edge& top(void) const;
00134 bool empty(void) const;
00136 int lc(void) const;
00138 void unwind(int l, Tracer& t);
00140 void commit(Space* s, int i) const;
00142 Space* recompute(unsigned int& d, unsigned int a_d, Worker& s,
00143 Tracer& t);
00145 Space* recompute(unsigned int& d, unsigned int a_d, Worker& s,
00146 const Space& best, int& mark,
00147 Tracer& t);
00149 int entries(void) const;
00151 void reset(unsigned int l);
00153 bool steal(void) const;
00155 Space* steal(Worker& stat, unsigned long int& d,
00156 Tracer& myt, Tracer& ot);
00158 void virtual post(Space& home) const;
00159 };
00160
00161 }}}
00162
00163 #include <gecode/search/par/path.hpp>
00164
00165 #endif
00166
00167