/** A node to be added to the tree must not belong to any tree (including this one). */ void Tree::add (Tree::Node* n) throw (Tree::DuplicateNode, Tree::NodeInUse, Tree::EmptyNode) { if (n == 0) throw EmptyNode(); if (node_set.find(n) != node_set.end()) throw DuplicateNode(n); if (n->in_use) throw NodeInUse(n); if (root_node == 0) root_node = n; n->in_use = true; node_set.insert(n); preorder_needed = postorder_needed = rpostorder_needed = true; }
/*! A node to be added to the tree must not belong to any tree (including this one). */ void Tree::addNode(OA_ptr<Tree::Node> n) throw (Tree::DuplicateNode, Tree::NodeInUse, Tree::EmptyNode) { if (n.ptrEqual(0)) { throw EmptyNode(); } if (node_set->find(n) != node_set->end()) { throw DuplicateNode(n); } if (n->in_use) { throw NodeInUse(n); } if (root_node.ptrEqual(0)) { root_node = n; } n->in_use = true; node_set->insert(n); preorder_needed = postorder_needed = rpostorder_needed = true; }