38 #ifndef __GECODE_SEARCH_PARALLEL_PATH_HH__
39 #define __GECODE_SEARCH_PARALLEL_PATH_HH__
46 namespace Gecode {
namespace Search {
namespace Parallel {
90 unsigned int alt(
void)
const;
92 unsigned int truealt(
void)
const;
98 bool work(
void)
const;
102 unsigned int steal(
void);
118 int ngdl(
void)
const;
128 bool empty(
void)
const;
145 bool steal(
void)
const;
162 : _space(c), _alt(0), _choice(s->choice()) {
181 assert(_alt < _choice->alternatives());
186 return _alt >= _alt_max;
190 return _alt > _alt_max;
194 return _alt < _alt_max;
240 if (!
ds.empty() &&
ds.top().lao()) {
248 stat.
stack_depth(static_cast<unsigned long int>(
ds.entries()));
255 if (
ds.top().rightmost()) {
258 assert(
ds.top().work());
260 if (!
ds.top().work())
286 int l =
ds.entries()-1;
287 while (
ds[l].space() == NULL)
299 assert((
ds[l].space() == NULL) ||
ds[l].space()->failed());
300 int n =
ds.entries();
301 for (
int i=l;
i<
n;
i++) {
306 assert(
ds.entries() ==
l);
325 int n =
ds.entries()-1;
334 while (
ds[l].space() == NULL)
338 for (
int i=l;
i<
n;
i++)
345 d = stat.
steal_depth(static_cast<unsigned long int>(n+1));
360 if ((
ds.top().space() != NULL) &&
ds.top().rightmost()) {
363 assert(
ds.entries()-1 ==
lc());
364 ds.top().space(NULL);
366 if (
ds.entries() >
ngdl())
373 int n =
ds.entries();
375 d =
static_cast<unsigned int>(n -
l);
381 for (
int i=l;
i<
n;
i++)
384 int m = l +
static_cast<int>(d >> 1);
390 for (; (i<
n) &&
ds[i].rightmost(); i++)
408 d =
static_cast<unsigned int>(n-
i);
425 if ((
ds.top().space() != NULL) &&
ds.top().rightmost()) {
428 assert(
ds.entries()-1 ==
lc());
429 if (mark >
ds.entries()-1) {
430 mark =
ds.entries()-1;
433 ds.top().space(NULL);
435 if (
ds.entries() >
ngdl())
442 int n =
ds.entries();
444 d =
static_cast<unsigned int>(n -
l);
470 for (
int i=l;
i<
n;
i++)
473 int m = l +
static_cast<int>(d >> 1);
479 for (; (i<
n) &&
ds[i].rightmost(); i++)
500 d =
static_cast<unsigned int>(n-
i);