# HG changeset patch # User deba # Date 1172767643 0 # Node ID 0248790c66eaac717f70ab63e08386820012a46b # Parent 7b0558c52de3b0e4f01d2f0a48e6f0304df15a14 Bug fix diff -r 7b0558c52de3 -r 0248790c66ea lemon/list_graph.h --- a/lemon/list_graph.h Thu Mar 01 16:04:12 2007 +0000 +++ b/lemon/list_graph.h Thu Mar 01 16:47:23 2007 +0000 @@ -527,10 +527,11 @@ } } virtual void build() { - NodeNotifier* notifier = getNotifier(); + NodeNotifier* _notifier = notifier(); Node node; std::vector nodes; - for (notifier->first(node); node != INVALID; notifier->next(node)) { + for (_notifier->first(node); node != INVALID; + _notifier->next(node)) { nodes.push_back(node); } for (int i = nodes.size() - 1; i >= 0; --i) { @@ -538,9 +539,10 @@ } } virtual void clear() { - NodeNotifier* notifier = getNotifier(); + NodeNotifier* _notifier = notifier(); Node node; - for (notifier->first(node); node != INVALID; notifier->next(node)) { + for (_notifier->first(node); node != INVALID; + _notifier->next(node)) { snapshot.eraseNode(node); } } @@ -577,10 +579,11 @@ } } virtual void build() { - EdgeNotifier* notifier = getNotifier(); + EdgeNotifier* _notifier = notifier(); Edge edge; std::vector edges; - for (notifier->first(edge); edge != INVALID; notifier->next(edge)) { + for (_notifier->first(edge); edge != INVALID; + _notifier->next(edge)) { edges.push_back(edge); } for (int i = edges.size() - 1; i >= 0; --i) { @@ -588,9 +591,9 @@ } } virtual void clear() { - EdgeNotifier* notifier = getNotifier(); + EdgeNotifier* _notifier = notifier(); Edge edge; - for (notifier->first(edge); edge != INVALID; notifier->next(edge)) { + for (_notifier->first(edge); edge != INVALID; _notifier->next(edge)) { snapshot.eraseEdge(edge); } } @@ -639,8 +642,8 @@ void attach(ListGraph &_graph) { graph = &_graph; - node_observer_proxy.attach(graph->getNotifier(Node())); - edge_observer_proxy.attach(graph->getNotifier(Edge())); + node_observer_proxy.attach(graph->notifier(Node())); + edge_observer_proxy.attach(graph->notifier(Edge())); } void detach() { @@ -911,13 +914,23 @@ void firstInc(UEdge &e, bool& d, const Node& v) const { int de = nodes[v.id].first_out; - e.id = de / 2; - d = ((de & 1) == 1); + if (de != -1 ) { + e.id = de / 2; + d = ((de & 1) == 1); + } else { + e.id = -1; + d = true; + } } void nextInc(UEdge &e, bool& d) const { int de = (edges[(e.id * 2) | (d ? 1 : 0)].next_out); - e.id = de / 2; - d = ((de & 1) == 1); + if (de != -1 ) { + e.id = de / 2; + d = ((de & 1) == 1); + } else { + e.id = -1; + d = true; + } } static int id(Node v) { return v.id; } @@ -1261,10 +1274,11 @@ } } virtual void build() { - NodeNotifier* notifier = getNotifier(); + NodeNotifier* _notifier = notifier(); Node node; std::vector nodes; - for (notifier->first(node); node != INVALID; notifier->next(node)) { + for (_notifier->first(node); node != INVALID; + _notifier->next(node)) { nodes.push_back(node); } for (int i = nodes.size() - 1; i >= 0; --i) { @@ -1272,9 +1286,10 @@ } } virtual void clear() { - NodeNotifier* notifier = getNotifier(); + NodeNotifier* _notifier = notifier(); Node node; - for (notifier->first(node); node != INVALID; notifier->next(node)) { + for (_notifier->first(node); node != INVALID; + _notifier->next(node)) { snapshot.eraseNode(node); } } @@ -1311,10 +1326,11 @@ } } virtual void build() { - UEdgeNotifier* notifier = getNotifier(); + UEdgeNotifier* _notifier = notifier(); UEdge edge; std::vector edges; - for (notifier->first(edge); edge != INVALID; notifier->next(edge)) { + for (_notifier->first(edge); edge != INVALID; + _notifier->next(edge)) { edges.push_back(edge); } for (int i = edges.size() - 1; i >= 0; --i) { @@ -1322,9 +1338,10 @@ } } virtual void clear() { - UEdgeNotifier* notifier = getNotifier(); + UEdgeNotifier* _notifier = notifier(); UEdge edge; - for (notifier->first(edge); edge != INVALID; notifier->next(edge)) { + for (_notifier->first(edge); edge != INVALID; + _notifier->next(edge)) { snapshot.eraseUEdge(edge); } } @@ -1373,8 +1390,8 @@ void attach(ListUGraph &_graph) { graph = &_graph; - node_observer_proxy.attach(graph->getNotifier(Node())); - edge_observer_proxy.attach(graph->getNotifier(UEdge())); + node_observer_proxy.attach(graph->notifier(Node())); + edge_observer_proxy.attach(graph->notifier(UEdge())); } void detach() { @@ -2039,10 +2056,11 @@ } } virtual void build() { - NodeNotifier* notifier = getNotifier(); + NodeNotifier* _notifier = notifier(); Node node; std::vector nodes; - for (notifier->first(node); node != INVALID; notifier->next(node)) { + for (_notifier->first(node); node != INVALID; + _notifier->next(node)) { nodes.push_back(node); } for (int i = nodes.size() - 1; i >= 0; --i) { @@ -2050,9 +2068,10 @@ } } virtual void clear() { - NodeNotifier* notifier = getNotifier(); + NodeNotifier* _notifier = notifier(); Node node; - for (notifier->first(node); node != INVALID; notifier->next(node)) { + for (_notifier->first(node); node != INVALID; + _notifier->next(node)) { snapshot.eraseNode(node); } } @@ -2089,10 +2108,11 @@ } } virtual void build() { - UEdgeNotifier* notifier = getNotifier(); + UEdgeNotifier* _notifier = notifier(); UEdge edge; std::vector edges; - for (notifier->first(edge); edge != INVALID; notifier->next(edge)) { + for (_notifier->first(edge); edge != INVALID; + _notifier->next(edge)) { edges.push_back(edge); } for (int i = edges.size() - 1; i >= 0; --i) { @@ -2100,9 +2120,10 @@ } } virtual void clear() { - UEdgeNotifier* notifier = getNotifier(); + UEdgeNotifier* _notifier = notifier(); UEdge edge; - for (notifier->first(edge); edge != INVALID; notifier->next(edge)) { + for (_notifier->first(edge); edge != INVALID; + _notifier->next(edge)) { snapshot.eraseUEdge(edge); } } @@ -2151,8 +2172,8 @@ void attach(ListBpUGraph &_graph) { graph = &_graph; - node_observer_proxy.attach(graph->getNotifier(Node())); - edge_observer_proxy.attach(graph->getNotifier(UEdge())); + node_observer_proxy.attach(graph->notifier(Node())); + edge_observer_proxy.attach(graph->notifier(UEdge())); } void detach() { diff -r 7b0558c52de3 -r 0248790c66ea lemon/smart_graph.h --- a/lemon/smart_graph.h Thu Mar 01 16:04:12 2007 +0000 +++ b/lemon/smart_graph.h Thu Mar 01 16:47:23 2007 +0000 @@ -286,14 +286,14 @@ { while(s.edge_num dir; dir.push_back(edgeFromId(n)); dir.push_back(edgeFromId(n-1)); - Parent::getNotifier(Edge()).erase(dir); + Parent::notifier(Edge()).erase(dir); nodes[edges[n].target].first_out=edges[n].next_out; nodes[edges[n-1].target].first_out=edges[n-1].next_out; edges.pop_back(); @@ -654,7 +664,7 @@ while(s.node_num dir; dir.push_back(Parent::direct(edge, true)); dir.push_back(Parent::direct(edge, false)); - Parent::getNotifier(Edge()).erase(dir); + Parent::notifier(Edge()).erase(dir); aNodes[edges.back().aNode >> 1].first=edges.back().next_out; bNodes[edges.back().bNode >> 1].first=edges.back().next_in; edges.pop_back(); } while(s.anode_num::ItemNotifier NodeNotifier; - NodeNotifier& getNotifier(Node) const { - return graph->getNotifier(Node()); + NodeNotifier& notifier(Node) const { + return graph->notifier(Node()); } typedef typename ItemSetTraits::ItemNotifier EdgeNotifier; - EdgeNotifier& getNotifier(Edge) const { - return graph->getNotifier(Edge()); + EdgeNotifier& notifier(Edge) const { + return graph->notifier(Edge()); } typedef typename ItemSetTraits::ItemNotifier UEdgeNotifier; - UEdgeNotifier& getNotifier(UEdge) const { - return graph->getNotifier(UEdge()); + UEdgeNotifier& notifier(UEdge) const { + return graph->notifier(UEdge()); } template @@ -311,6 +311,7 @@ void firstInc(UEdge& i, bool& d, const Node& n) const { Parent::firstInc(i, d, n); while (i!=INVALID && (!(*uedge_filter_map)[i] + || !(*node_filter_map)[Parent::source(i)] || !(*node_filter_map)[Parent::target(i)])) Parent::nextInc(i, d); } @@ -347,8 +348,9 @@ void nextInc(UEdge& i, bool& d) const { Parent::nextInc(i, d); - while (i!=INVALID && (!(*uedge_filter_map)[i] - || !(*node_filter_map)[Parent::source(i)])) Parent::nextInc(i, d); + while (i!=INVALID && (!(*uedge_filter_map)[i] + || !(*node_filter_map)[Parent::source(i)] + || !(*node_filter_map)[Parent::target(i)])) Parent::nextInc(i, d); } /// \brief Hide the given node in the graph. @@ -987,14 +989,14 @@ typedef typename ItemSetTraits::ItemNotifier NodeNotifier; - NodeNotifier& getNotifier(Node) const { - return graph->getNotifier(Node()); + NodeNotifier& notifier(Node) const { + return graph->notifier(Node()); } typedef typename ItemSetTraits::ItemNotifier EdgeNotifier; - EdgeNotifier& getNotifier(Edge) const { - return graph->getNotifier(Edge()); + EdgeNotifier& notifier(Edge) const { + return graph->notifier(Edge()); } template