[Lemon-commits] deba: r3213 - lemon/trunk/lemon

Lemon SVN svn at lemon.cs.elte.hu
Thu Mar 1 17:47:24 CET 2007


Author: deba
Date: Thu Mar  1 17:47:23 2007
New Revision: 3213

Modified:
   lemon/trunk/lemon/list_graph.h
   lemon/trunk/lemon/smart_graph.h
   lemon/trunk/lemon/ugraph_adaptor.h

Log:
Bug fix



Modified: lemon/trunk/lemon/list_graph.h
==============================================================================
--- lemon/trunk/lemon/list_graph.h	(original)
+++ lemon/trunk/lemon/list_graph.h	Thu Mar  1 17:47:23 2007
@@ -527,10 +527,11 @@
           }
         }
         virtual void build() {
-          NodeNotifier* notifier = getNotifier();
+          NodeNotifier* _notifier = notifier();
           Node node;
           std::vector<Node> 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<Edge> 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<Node> 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<UEdge> 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<Node> 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<UEdge> 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() {

Modified: lemon/trunk/lemon/smart_graph.h
==============================================================================
--- lemon/trunk/lemon/smart_graph.h	(original)
+++ lemon/trunk/lemon/smart_graph.h	Thu Mar  1 17:47:23 2007
@@ -286,14 +286,14 @@
     {
       while(s.edge_num<edges.size()) {
         Edge edge = edgeFromId(edges.size()-1);
-	Parent::getNotifier(Edge()).erase(edge);
+	Parent::notifier(Edge()).erase(edge);
 	nodes[edges.back().source].first_out=edges.back().next_out;
 	nodes[edges.back().target].first_in=edges.back().next_in;
 	edges.pop_back();
       }
       while(s.node_num<nodes.size()) {
         Node node = nodeFromId(nodes.size()-1);
-	Parent::getNotifier(Node()).erase(node);
+	Parent::notifier(Node()).erase(node);
 	nodes.pop_back();
       }
     }    
@@ -505,13 +505,23 @@
 
     void firstInc(UEdge &edge, bool& d, const Node& v) const {
       int de = nodes[v.id].first_out;
-      edge.id = de / 2;
-      d = ((de & 1) == 1);
+      if (de != -1) {
+        edge.id = de / 2;
+        d = ((de & 1) == 1);
+      } else {
+        edge.id = -1;
+        d = true;
+      }
     }
     void nextInc(UEdge &edge, bool& d) const {
       int de = (edges[(edge.id * 2) | (d ? 1 : 0)].next_out);
-      edge.id = de / 2;
-      d = ((de & 1) == 1);
+      if (de != -1) {
+        edge.id = de / 2;
+        d = ((de & 1) == 1);
+      } else {
+        edge.id = -1;
+        d = true;      
+      }
     }
     
     static int id(Node v) { return v.id; }
@@ -641,11 +651,11 @@
       while(s.edge_num<edges.size()) {
         int n=edges.size()-1;
         UEdge edge=uEdgeFromId(n/2);
-	Parent::getNotifier(UEdge()).erase(edge);
+	Parent::notifier(UEdge()).erase(edge);
         std::vector<Edge> 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<nodes.size()) {
         int n=nodes.size()-1;
         Node node = nodeFromId(n);
-	Parent::getNotifier(Node()).erase(node);
+	Parent::notifier(Node()).erase(node);
 	nodes.pop_back();
       }
     }    
@@ -1023,25 +1033,25 @@
     {
       while(s.edge_num<edges.size()) {
         UEdge edge = uEdgeFromId(edges.size()-1);
-	Parent::getNotifier(UEdge()).erase(edge);
+	Parent::notifier(UEdge()).erase(edge);
         std::vector<Edge> 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<aNodes.size()) {
         Node node = nodeFromANodeId(aNodes.size() - 1);
-	Parent::getNotifier(ANode()).erase(node);
-	Parent::getNotifier(Node()).erase(node);
+	Parent::notifier(ANode()).erase(node);
+	Parent::notifier(Node()).erase(node);
 	aNodes.pop_back();
       }
       while(s.bnode_num<bNodes.size()) {
         Node node = nodeFromBNodeId(bNodes.size() - 1);
-	Parent::getNotifier(BNode()).erase(node);
-	Parent::getNotifier(Node()).erase(node);
+	Parent::notifier(BNode()).erase(node);
+	Parent::notifier(Node()).erase(node);
 	bNodes.pop_back();
       }
     }    

Modified: lemon/trunk/lemon/ugraph_adaptor.h
==============================================================================
--- lemon/trunk/lemon/ugraph_adaptor.h	(original)
+++ lemon/trunk/lemon/ugraph_adaptor.h	Thu Mar  1 17:47:23 2007
@@ -151,20 +151,20 @@
 
     typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier;
 
-    NodeNotifier& getNotifier(Node) const {
-      return graph->getNotifier(Node());
+    NodeNotifier& notifier(Node) const {
+      return graph->notifier(Node());
     } 
 
     typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier;
 
-    EdgeNotifier& getNotifier(Edge) const {
-      return graph->getNotifier(Edge());
+    EdgeNotifier& notifier(Edge) const {
+      return graph->notifier(Edge());
     } 
 
     typedef typename ItemSetTraits<Graph, UEdge>::ItemNotifier UEdgeNotifier;
 
-    UEdgeNotifier& getNotifier(UEdge) const {
-      return graph->getNotifier(UEdge());
+    UEdgeNotifier& notifier(UEdge) const {
+      return graph->notifier(UEdge());
     } 
 
     template <typename _Value>
@@ -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<Graph, Node>::ItemNotifier NodeNotifier;
 
-    NodeNotifier& getNotifier(Node) const {
-      return graph->getNotifier(Node());
+    NodeNotifier& notifier(Node) const {
+      return graph->notifier(Node());
     } 
 
     typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier;
 
-    EdgeNotifier& getNotifier(Edge) const {
-      return graph->getNotifier(Edge());
+    EdgeNotifier& notifier(Edge) const {
+      return graph->notifier(Edge());
     } 
 
     template <typename _Value>



More information about the Lemon-commits mailing list