예제 #1
0
파일: Tree.C 프로젝트: Qilewuqiong/MIAMI
//--------------------------------------------------------------------------------------------------------------------
void
Tree::remove (Tree::Edge* e)
  throw (Tree::NonexistentEdge, Tree::EmptyEdge)
{
  if (e == 0)
    throw EmptyEdge();
  if (edge_set.erase(e) == 0)
    throw NonexistentEdge(e);
  preorder_needed = postorder_needed = rpostorder_needed = true;
  e->in_use = false;
  deque_erase<Edge*>(e->parent_node->outgoing, e);
  e->child_node->incoming = 0;
}
예제 #2
0
파일: Tree.cpp 프로젝트: Vladimir84/rcc
//--------------------------------------------------------------------
void
Tree::removeEdge (OA_ptr<Tree::Edge>  e)
  throw (Tree::NonexistentEdge, Tree::EmptyEdge)
{
  if (e.ptrEqual(0)) {
    throw EmptyEdge();
  }
  if (edge_set->erase(e) == 0) {
    throw NonexistentEdge(e);
  }
  preorder_needed = postorder_needed = rpostorder_needed = true;
  e->in_use = false;
  deque_erase<OA_ptr<Edge> >(*(e->parent_node->outgoing), e);
  e->child_node->incoming = 0;
}