44 namespace Gecode {
namespace Gist {
65 SpaceNode::recompute(NodeAllocator& na,
73 lastFixpoint = curNode;
75 std::stack<Branch> stck;
78 while (curNode->
copy == NULL) {
85 curBest == NULL ? NULL : ownBest);
99 while (!stck.empty()) {
102 curDist == rdist / 2) {
110 Branch
b = stck.top(); stck.pop();
112 if(middleNode == lastFixpoint) {
116 curSpace->
commit(*b.choice, b.alternative);
118 if (b.ownBest != NULL && b.ownBest != lastBest) {
119 b.ownBest->acquireSpace(na,curBest, c_d, a_d);
120 Space* ownBestSpace =
122 if (ownBestSpace->status() !=
SS_SOLVED) {
131 delete b.ownBest->copy;
132 b.ownBest->copy = ownBestSpace;
136 lastBest = b.ownBest;
139 middleNode = middleNode->getChild(na,b.alternative);
140 middleNode->setDistance(curDist);
150 BestNode* curBest,
int c_d,
int a_d) {
156 na.
best(idx) == NULL &&
157 p != NULL && curBest->
s != na.
best(parentIdx)) {
162 if (
copy == NULL && p != NULL && p->
copy != NULL &&
171 if (ownBest != NULL) {
173 Space* ownBestSpace =
185 delete ownBest->
copy;
186 ownBest->
copy = ownBestSpace;
192 if (d > c_d && c_d >= 0 &&
201 if (recompute(na, curBest, c_d, a_d) > c_d && c_d >= 0 &&
227 SpaceNode::closeChild(
const NodeAllocator& na,
228 bool hadFailures,
bool hadSolutions) {
232 bool allClosed =
true;
241 setHasOpenChildren(
false);
254 setHasSolvedChildren(
true);
256 while (p != NULL && !p->hasSolvedChildren()) {
257 p->setHasSolvedChildren(
true);
258 p = p->getParent(na);
263 while (p != NULL && !p->hasFailedChildren()) {
264 p->setHasFailedChildren(
true);
265 p = p->getParent(na);
273 :
Node(-1, root==NULL),
274 copy(root), choice(NULL), nstatus(0) {
277 setHasSolvedChildren(
false);
278 setHasFailedChildren(
true);
281 setHasSolvedChildren(
false);
282 setHasFailedChildren(
false);
306 setHasOpenChildren(
false);
307 setHasSolvedChildren(
false);
308 setHasFailedChildren(
true);
313 p->closeChild(na,
true,
false);
322 setHasOpenChildren(
false);
323 setHasSolvedChildren(
true);
324 setHasFailedChildren(
false);
326 if (curBest != NULL) {
331 p->closeChild(na,
false,
true);
338 setHasOpenChildren(
true);
339 if (dynamic_cast<const StopChoice*>(
choice)) {
349 static_cast<VisualNode*
>(
this)->changedStatus(na);
361 int noOfOpenChildren = 0;
364 return noOfOpenChildren;