From 451823c22d77ae57160316837621b0501a3629f9 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 15 Apr 2010 09:04:45 +0200 Subject: Add support for resetting nodes/edges and deleting nodes --- cutl/container/graph.hxx | 53 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/cutl/container/graph.hxx b/cutl/container/graph.hxx index 2b796a1..9244351 100644 --- a/cutl/container/graph.hxx +++ b/cutl/container/graph.hxx @@ -16,6 +16,7 @@ namespace cutl namespace container { struct no_edge: exception {}; + struct no_node: exception {}; template class graph @@ -84,10 +85,6 @@ namespace cutl new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, A5 const&, A6 const&, A7 const&, A8 const&, A9 const&); - // template - // void - // delete_node (T& node); - public: template T& @@ -127,10 +124,56 @@ namespace cutl new_edge (L&, R&, A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, A5 const&); + // Functions to reset edge's nodes. + // + public: + template + void + reset_left_node (TE& edge, TN& node) + { + edge.set_left_node (node); + } + + template + void + reset_right_node (TE& edge, TN& node) + { + edge.set_right_node (node); + } + + // Functions to add edges to a node. + // + public: + template + void + add_edge_left (TN& node, TE& edge) + { + node.add_edge_left (edge); + } + + template + void + add_edge_right (TN& node, TE& edge) + { + node.add_edge_right (edge); + } + + // Functions to delete edges and nodes. In order to delete a + // a node without leaving any dangling edges you need to make + // sure that each edge pointing to it is either deleted or reset + // to some other node. + // public: template void - delete_edge (L&, R&, T& edge); + delete_edge (L& left_node, R& right_node, T& edge); + + void + delete_node (node_base& node) + { + if (nodes_.erase (&node) == 0) + throw no_node (); + } public: graph () {} -- cgit v1.1