bool Skein::IsValidNode(Node* testNode, Node* node) { if (node == NULL) node = m_inst.root; if (testNode == node) return true; for (int i = 0; i < node->GetNumChildren(); i++) { if (IsValidNode(testNode,node->GetChild(i))) return true; } return false; }
void CSTRPath::Traversal(CObject* pObject,CSTRNode * parent) { CSTRNode child; int x = parent->cellX, y = parent->cellY; for( int i = -1 ; i < 2 ; ++i ) { for( int j = -1 ; j < 2 ; ++j ) { child.cellX = x+i; child.cellY = y+j; if (i == 0 && j == 0 || !IsValidNode(child.cellX, child.cellY, pObject)) continue; TraversalChild(parent, &child); } } }
void simplify_pos_unsupported(NODEptr as_leaf) { ASI asi = Delay(as_leaf); PNDE pde; DL dl; DE de, tmp_de; ASI used_asi, de_asi; NODEptr used_as_leaf; #ifdef DEBUG_DELAYVAR fprintf(stddbg, ">>>> start simplify_pos_unsupported()\n"); #endif while ((pde = asi_pdes(asi))) { dl = pnde_dl(pde); /* dl: to be removed */ used_as_leaf = dl_asl(dl); if (IsValidNode(used_as_leaf) && (used_asi = Delay(used_as_leaf)) != NULL) { de = dl_de_list(dl); /* to release all DEs in dl */ while (de) { tmp_de = de_next(de); if (de_ans_subst(de) == NULL) { /* is NDE */ remove_pnde(subg_nde_list(de_subgoal(de)), de_pnde(de)); } else { /* is PDE */ de_asi = Delay(de_ans_subst(de)); remove_pnde(asi_pdes(de_asi), de_pnde(de)); } #ifdef DEBUG_DELAYVAR fprintf(stddbg, ">>>> release DE (in simplify_pos_unsupported)"); #endif release_entry(de, released_des, de_next); de = tmp_de; /* next DE */ } /* while */ if (!remove_dl_from_dl_list(dl, used_asi)) { handle_unsupported_answer_subst(used_as_leaf); } } /* if */ } /* while */ }