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;
}
Exemple #2
0
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);
		}
	}
}
Exemple #3
0
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 */
}