Example #1
0
 inline ExecStatus
 Single<View>::post(Home home, ViewArray<View>& x, int s, int t) {
   {
     int alpha = 0;
     while ((alpha < x.size()) && !x[alpha].in(s))
       GECODE_ME_CHECK(x[alpha++].nq(home,t));
     x.drop_fst(alpha);
     if (x.size() == 0)
       return ES_OK;
   }
   // alpha has been normalized to 0
   int beta = 0, gamma = 0;
   GECODE_ME_CHECK(x[0].nq(home,t));
   do {
     gamma++;
   } while ((gamma < x.size()) && !assigned(x[gamma],t));
   do {
     beta++;
   } while ((beta < x.size()) && !x[beta].in(s));
   if (beta > gamma) {
     GECODE_ME_CHECK(x[0].eq(home, s));
     return ES_OK;
   }
   if (gamma < x.size())
     x.drop_lst(gamma);
   (void) new (home) Single<View>(home, x, s, t, beta, gamma);
   return ES_OK;
 }