47 namespace Gecode {
namespace Gist {
68 SpaceNode::recompute(NodeAllocator& na,
76 lastFixpoint = curNode;
78 std::stack<Branch> stck;
81 while (curNode->
copy == NULL) {
88 curBest == NULL ? NULL : ownBest);
110 while (!stck.empty()) {
113 curDist == rdist / 2) {
121 Branch
b = stck.top(); stck.pop();
123 if(middleNode == lastFixpoint) {
127 curSpace->
commit(*b.choice, b.alternative);
129 if (b.ownBest != NULL && b.ownBest != lastBest) {
130 b.ownBest->acquireSpace(na,curBest, c_d, a_d);
131 Space* ownBestSpace =
133 if (ownBestSpace->status() !=
SS_SOLVED) {
142 delete b.ownBest->copy;
143 b.ownBest->copy = ownBestSpace;
147 lastBest = b.ownBest;
150 middleNode = middleNode->getChild(na,b.alternative);
151 middleNode->setDistance(curDist);
161 BestNode* curBest,
int c_d,
int a_d) {
167 na.
best(idx) == NULL &&
168 p != NULL && curBest->
s != na.
best(parentIdx)) {
173 if (
copy == NULL && p != NULL && p->
copy != NULL &&
182 if (ownBest != NULL) {
184 Space* ownBestSpace =
196 delete ownBest->
copy;
197 ownBest->
copy = ownBestSpace;
203 if (d > c_d && c_d >= 0 &&
212 if (recompute(na, curBest, c_d, a_d) > c_d && c_d >= 0 &&
235 SpaceNode::closeChild(
const NodeAllocator& na,
236 bool hadFailures,
bool hadSolutions) {
240 bool allClosed =
true;
249 setHasOpenChildren(
false);
262 setHasSolvedChildren(
true);
264 while (p != NULL && !p->hasSolvedChildren()) {
265 p->setHasSolvedChildren(
true);
266 p = p->getParent(na);
271 while (p != NULL && !p->hasFailedChildren()) {
272 p->setHasFailedChildren(
true);
273 p = p->getParent(na);
281 :
Node(-1, root==NULL),
282 copy(root), choice(NULL), nstatus(0) {
285 setHasSolvedChildren(
false);
286 setHasFailedChildren(
true);
289 setHasSolvedChildren(
false);
290 setHasFailedChildren(
false);
309 QVector<QString> labels;
315 setHasOpenChildren(
false);
316 setHasSolvedChildren(
false);
317 setHasFailedChildren(
true);
322 p->closeChild(na,
true,
false);
331 setHasOpenChildren(
false);
332 setHasSolvedChildren(
true);
333 setHasFailedChildren(
false);
335 if (curBest != NULL) {
340 p->closeChild(na,
false,
true);
348 setHasOpenChildren(
true);
349 if (dynamic_cast<const StopChoice*>(
choice)) {
356 for (
int i=0;
i<kids;
i++) {
357 std::ostringstream oss;
359 labels.push_back(QString(oss.str().c_str()));
364 static_cast<VisualNode*
>(
this)->changedStatus(na);
376 int noOfOpenChildren = 0;
379 return noOfOpenChildren;