38 #ifndef __GECODE_SEARCH_SEQUENTIAL_PATH_HH__
39 #define __GECODE_SEARCH_SEQUENTIAL_PATH_HH__
43 namespace Gecode {
namespace Search {
namespace Sequential {
84 unsigned int alt(
void)
const;
108 bool empty(
void)
const;
123 size_t size(
void)
const;
138 : _space(c), _alt(0), _choice(s->choice()) {}
155 return _alt+1 >= _choice->alternatives();
159 return _alt >= _choice->alternatives();
189 if (!
ds.empty() &&
ds.top().lao()) {
191 stat.
pop(
ds.top().space(),
ds.top().choice());
196 stat.
stack_depth(static_cast<unsigned long int>(
ds.entries()));
203 if (
ds.top().rightmost()) {
204 stat.
pop(
ds.top().space(),
ds.top().choice());
232 int l =
ds.entries()-1;
233 while (
ds[l].space() == NULL)
250 assert((
ds[l].space() == NULL) ||
ds[l].space()->failed());
251 int n =
ds.entries();
252 for (
int i=l;
i<
n;
i++)
254 assert(
ds.entries() ==
l);
270 if ((
ds.top().space() != NULL) &&
ds.top().rightmost()) {
274 assert(
ds.entries()-1 ==
lc());
275 ds.top().space(NULL);
283 int n =
ds.entries();
285 d =
static_cast<unsigned int>(n -
l);
291 for (
int i=l;
i<
n;
i++)
294 int m = l +
static_cast<int>(d >> 1);
300 for (; (i<
n) &&
ds[i].rightmost(); i++)
319 d =
static_cast<unsigned int>(n-
i);
336 if ((
ds.top().space() != NULL) &&
ds.top().rightmost()) {
340 assert(
ds.entries()-1 ==
lc());
341 if (mark >
ds.entries()-1) {
342 mark =
ds.entries()-1;
345 ds.top().space(NULL);
353 int n =
ds.entries();
355 d =
static_cast<unsigned int>(n -
l);
382 for (
int i=l;
i<
n;
i++)
385 int m = l +
static_cast<int>(d >> 1);
391 for (; (i<
n) &&
ds[i].rightmost(); i++)
413 d =
static_cast<unsigned int>(n-
i);