ExecStatus ReLq<View,CtrlView,rm>::post(Home home, View x0, View x1, CtrlView b) { if (b.one()) { if (rm == RM_PMI) return ES_OK; return Lq<View>::post(home,x0,x1); } if (b.zero()) { if (rm == RM_IMP) return ES_OK; return Le<View>::post(home,x1,x0); } if (!same(x0,x1)) { switch (rtest_lq(x0,x1)) { case RT_TRUE: if (rm != RM_IMP) GECODE_ME_CHECK(b.one_none(home)); break; case RT_FALSE: if (rm != RM_PMI) GECODE_ME_CHECK(b.zero_none(home)); break; case RT_MAYBE: if (!x0.assigned() || !x1.assigned()) (void) new (home) ReLq<View,CtrlView,rm>(home,x0,x1,b); else { if (rm != RM_IMP) GECODE_ME_CHECK(b.one_none(home)); } break; default: GECODE_NEVER; } } else if (rm != RM_IMP) { GECODE_ME_CHECK(b.one_none(home)); } return ES_OK; }