lemon/smart_graph.h
changeset 2381 0248790c66ea
parent 2350 eb371753e814
child 2386 81b47fc5c444
     1.1 --- a/lemon/smart_graph.h	Thu Mar 01 16:04:12 2007 +0000
     1.2 +++ b/lemon/smart_graph.h	Thu Mar 01 16:47:23 2007 +0000
     1.3 @@ -286,14 +286,14 @@
     1.4      {
     1.5        while(s.edge_num<edges.size()) {
     1.6          Edge edge = edgeFromId(edges.size()-1);
     1.7 -	Parent::getNotifier(Edge()).erase(edge);
     1.8 +	Parent::notifier(Edge()).erase(edge);
     1.9  	nodes[edges.back().source].first_out=edges.back().next_out;
    1.10  	nodes[edges.back().target].first_in=edges.back().next_in;
    1.11  	edges.pop_back();
    1.12        }
    1.13        while(s.node_num<nodes.size()) {
    1.14          Node node = nodeFromId(nodes.size()-1);
    1.15 -	Parent::getNotifier(Node()).erase(node);
    1.16 +	Parent::notifier(Node()).erase(node);
    1.17  	nodes.pop_back();
    1.18        }
    1.19      }    
    1.20 @@ -505,13 +505,23 @@
    1.21  
    1.22      void firstInc(UEdge &edge, bool& d, const Node& v) const {
    1.23        int de = nodes[v.id].first_out;
    1.24 -      edge.id = de / 2;
    1.25 -      d = ((de & 1) == 1);
    1.26 +      if (de != -1) {
    1.27 +        edge.id = de / 2;
    1.28 +        d = ((de & 1) == 1);
    1.29 +      } else {
    1.30 +        edge.id = -1;
    1.31 +        d = true;
    1.32 +      }
    1.33      }
    1.34      void nextInc(UEdge &edge, bool& d) const {
    1.35        int de = (edges[(edge.id * 2) | (d ? 1 : 0)].next_out);
    1.36 -      edge.id = de / 2;
    1.37 -      d = ((de & 1) == 1);
    1.38 +      if (de != -1) {
    1.39 +        edge.id = de / 2;
    1.40 +        d = ((de & 1) == 1);
    1.41 +      } else {
    1.42 +        edge.id = -1;
    1.43 +        d = true;      
    1.44 +      }
    1.45      }
    1.46      
    1.47      static int id(Node v) { return v.id; }
    1.48 @@ -641,11 +651,11 @@
    1.49        while(s.edge_num<edges.size()) {
    1.50          int n=edges.size()-1;
    1.51          UEdge edge=uEdgeFromId(n/2);
    1.52 -	Parent::getNotifier(UEdge()).erase(edge);
    1.53 +	Parent::notifier(UEdge()).erase(edge);
    1.54          std::vector<Edge> dir;
    1.55          dir.push_back(edgeFromId(n));
    1.56          dir.push_back(edgeFromId(n-1));
    1.57 -	Parent::getNotifier(Edge()).erase(dir);
    1.58 +	Parent::notifier(Edge()).erase(dir);
    1.59  	nodes[edges[n].target].first_out=edges[n].next_out;
    1.60  	nodes[edges[n-1].target].first_out=edges[n-1].next_out;
    1.61  	edges.pop_back();
    1.62 @@ -654,7 +664,7 @@
    1.63        while(s.node_num<nodes.size()) {
    1.64          int n=nodes.size()-1;
    1.65          Node node = nodeFromId(n);
    1.66 -	Parent::getNotifier(Node()).erase(node);
    1.67 +	Parent::notifier(Node()).erase(node);
    1.68  	nodes.pop_back();
    1.69        }
    1.70      }    
    1.71 @@ -1023,25 +1033,25 @@
    1.72      {
    1.73        while(s.edge_num<edges.size()) {
    1.74          UEdge edge = uEdgeFromId(edges.size()-1);
    1.75 -	Parent::getNotifier(UEdge()).erase(edge);
    1.76 +	Parent::notifier(UEdge()).erase(edge);
    1.77          std::vector<Edge> dir;
    1.78          dir.push_back(Parent::direct(edge, true));
    1.79          dir.push_back(Parent::direct(edge, false));
    1.80 -	Parent::getNotifier(Edge()).erase(dir);
    1.81 +	Parent::notifier(Edge()).erase(dir);
    1.82  	aNodes[edges.back().aNode >> 1].first=edges.back().next_out;
    1.83  	bNodes[edges.back().bNode >> 1].first=edges.back().next_in;
    1.84  	edges.pop_back();
    1.85        }
    1.86        while(s.anode_num<aNodes.size()) {
    1.87          Node node = nodeFromANodeId(aNodes.size() - 1);
    1.88 -	Parent::getNotifier(ANode()).erase(node);
    1.89 -	Parent::getNotifier(Node()).erase(node);
    1.90 +	Parent::notifier(ANode()).erase(node);
    1.91 +	Parent::notifier(Node()).erase(node);
    1.92  	aNodes.pop_back();
    1.93        }
    1.94        while(s.bnode_num<bNodes.size()) {
    1.95          Node node = nodeFromBNodeId(bNodes.size() - 1);
    1.96 -	Parent::getNotifier(BNode()).erase(node);
    1.97 -	Parent::getNotifier(Node()).erase(node);
    1.98 +	Parent::notifier(BNode()).erase(node);
    1.99 +	Parent::notifier(Node()).erase(node);
   1.100  	bNodes.pop_back();
   1.101        }
   1.102      }