# HG changeset patch # User alpar # Date 1118310471 0 # Node ID be025fc1b13df64a92e55f2dc19f29e46205e613 # Parent 5289afbdb7201b7e1238c64954ba64cd1f330666 Serious bugfix in ListGraph::SnapShot and SmartGraph::SnapShot diff -r 5289afbdb720 -r be025fc1b13d lemon/list_graph.h --- a/lemon/list_graph.h Thu Jun 09 09:46:34 2005 +0000 +++ b/lemon/list_graph.h Thu Jun 09 09:47:51 2005 +0000 @@ -457,6 +457,13 @@ exit(1); } + ///\bug What is this used for? + /// + virtual void build() {} + ///\bug What is this used for? + /// + virtual void clear() {} + void regist(ListGraph &_g) { g=&_g; AlterationNotifier<Node>::ObserverBase:: @@ -517,13 +524,14 @@ /// ///\todo This function might be called undo(). void restore() { + ListGraph &old_g=*g; deregist(); while(!added_edges.empty()) { - g->erase(added_edges.front()); + old_g.erase(added_edges.front()); added_edges.pop_front(); } while(!added_nodes.empty()) { - g->erase(added_nodes.front()); + old_g.erase(added_nodes.front()); added_nodes.pop_front(); } } diff -r 5289afbdb720 -r be025fc1b13d lemon/smart_graph.h --- a/lemon/smart_graph.h Thu Jun 09 09:46:34 2005 +0000 +++ b/lemon/smart_graph.h Thu Jun 09 09:47:51 2005 +0000 @@ -280,14 +280,14 @@ protected: void restoreSnapShot(const SnapShot &s) { - while(s.edge_num>edges.size()) { + while(s.edge_num<edges.size()) { Parent::getNotifier(Edge()).erase(Edge(edges.size()-1)); nodes[edges.back().target].first_in=edges.back().next_in; nodes[edges.back().source].first_out=edges.back().next_out; edges.pop_back(); } //nodes.resize(s.nodes_num); - while(s.node_num>nodes.size()) { + while(s.node_num<nodes.size()) { Parent::getNotifier(Node()).erase(Node(nodes.size()-1)); nodes.pop_back(); }