diff -r bc86b64f958e -r b16a10926781 src/lemon/list_graph.h --- a/src/lemon/list_graph.h Sat Oct 30 16:30:12 2004 +0000 +++ b/src/lemon/list_graph.h Sat Oct 30 18:30:29 2004 +0000 @@ -38,6 +38,7 @@ class ListGraphBase { + protected: struct NodeT { int first_in,first_out; int prev, next; @@ -100,11 +101,6 @@ first_free_node(-1), edges(), first_free_edge(-1) {} - ///Using this it possible to avoid the superfluous memory allocation. - ///\todo more docs... - ///\todo It should be defined in ListGraph. - void reserveEdge(int n) { edges.reserve(n); }; - /// Maximum node ID. /// Maximum node ID. @@ -277,6 +273,32 @@ first_node = first_free_node = first_free_edge = -1; } + protected: + void _moveHead(Edge e, Node n) + { + if(edges[e.id].next_in != -1) + edges[edges[e.id].next_in].prev_in = edges[e.id].prev_in; + if(edges[e.id].prev_in != -1) + edges[edges[e.id].prev_in].next_in = edges[e.id].next_in; + else nodes[edges[e.id].head].first_in = edges[e.id].next_in; + edges[e.id].head = n.id; + edges[e.id].prev_in = -1; + edges[e.id].next_in = nodes[n.id].first_in; + nodes[n.id].first_in = e.id; + } + void _moveTail(Edge e, Node n) + { + if(edges[e.id].next_out != -1) + edges[edges[e.id].next_out].prev_out = edges[e.id].prev_out; + if(edges[e.id].prev_out != -1) + edges[edges[e.id].prev_out].next_out = edges[e.id].next_out; + else nodes[edges[e.id].tail].first_out = edges[e.id].next_out; + edges[e.id].tail = n.id; + edges[e.id].prev_out = -1; + edges[e.id].next_out = nodes[n.id].first_out; + nodes[n.id].first_out = e.id; + } + }; typedef AlterableGraphExtender AlterableListGraphBase; @@ -305,35 +327,19 @@ /// Moves the head of \c e to \c n /// - void moveHead(Edge e, Node n) - { - if(edges[e.n].next_in != -1) - edges[edges[e.n].next_in].prev_in = edges[e.n].prev_in; - if(edges[e.n].prev_in != -1) - edges[edges[e.n].prev_in].next_in = edges[e.n].next_in; - else nodes[edges[e.n].head].first_in = edges[e.n].next_in; - edges[e.n].head = n.n; - edges[e.n].prev_in = -1; - edges[e.n].next_in = nodes[n.n].first_in; - nodes[n.n].first_in = e.n; - } + void moveHead(Edge e, Node n) { _moveHead(e,n); } /// Moves the tail of \c e to \c n /// Moves the tail of \c e to \c n /// - void moveTail(Edge e, Node n) - { - if(edges[e.n].next_out != -1) - edges[edges[e.n].next_out].prev_out = edges[e.n].prev_out; - if(edges[e.n].prev_out != -1) - edges[edges[e.n].prev_out].next_out = edges[e.n].next_out; - else nodes[edges[e.n].tail].first_out = edges[e.n].next_out; - edges[e.n].tail = n.n; - edges[e.n].prev_out = -1; - edges[e.n].next_out = nodes[n.n].first_out; - nodes[n.n].first_out = e.n; - } - } + void moveTail(Edge e, Node n) { _moveTail(e,n); } + + ///Using this it possible to avoid the superfluous memory allocation. + ///\todo more docs... + void reserveEdge(int n) { edges.reserve(n); }; + + }; + /// @} } //namespace lemon