Changeset 2381:0248790c66ea in lemon-0.x
- Timestamp:
- 03/01/07 17:47:23 (17 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@3212
- Location:
- lemon
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/list_graph.h
r2343 r2381 528 528 } 529 529 virtual void build() { 530 NodeNotifier* notifier = getNotifier();530 NodeNotifier* _notifier = notifier(); 531 531 Node node; 532 532 std::vector<Node> nodes; 533 for (notifier->first(node); node != INVALID; notifier->next(node)) { 533 for (_notifier->first(node); node != INVALID; 534 _notifier->next(node)) { 534 535 nodes.push_back(node); 535 536 } … … 539 540 } 540 541 virtual void clear() { 541 NodeNotifier* notifier = getNotifier();542 NodeNotifier* _notifier = notifier(); 542 543 Node node; 543 for (notifier->first(node); node != INVALID; notifier->next(node)) { 544 for (_notifier->first(node); node != INVALID; 545 _notifier->next(node)) { 544 546 snapshot.eraseNode(node); 545 547 } … … 578 580 } 579 581 virtual void build() { 580 EdgeNotifier* notifier = getNotifier();582 EdgeNotifier* _notifier = notifier(); 581 583 Edge edge; 582 584 std::vector<Edge> edges; 583 for (notifier->first(edge); edge != INVALID; notifier->next(edge)) { 585 for (_notifier->first(edge); edge != INVALID; 586 _notifier->next(edge)) { 584 587 edges.push_back(edge); 585 588 } … … 589 592 } 590 593 virtual void clear() { 591 EdgeNotifier* notifier = getNotifier();594 EdgeNotifier* _notifier = notifier(); 592 595 Edge edge; 593 for ( notifier->first(edge); edge != INVALID;notifier->next(edge)) {596 for (_notifier->first(edge); edge != INVALID; _notifier->next(edge)) { 594 597 snapshot.eraseEdge(edge); 595 598 } … … 640 643 void attach(ListGraph &_graph) { 641 644 graph = &_graph; 642 node_observer_proxy.attach(graph-> getNotifier(Node()));643 edge_observer_proxy.attach(graph-> getNotifier(Edge()));645 node_observer_proxy.attach(graph->notifier(Node())); 646 edge_observer_proxy.attach(graph->notifier(Edge())); 644 647 } 645 648 … … 912 915 void firstInc(UEdge &e, bool& d, const Node& v) const { 913 916 int de = nodes[v.id].first_out; 914 e.id = de / 2; 915 d = ((de & 1) == 1); 917 if (de != -1 ) { 918 e.id = de / 2; 919 d = ((de & 1) == 1); 920 } else { 921 e.id = -1; 922 d = true; 923 } 916 924 } 917 925 void nextInc(UEdge &e, bool& d) const { 918 926 int de = (edges[(e.id * 2) | (d ? 1 : 0)].next_out); 919 e.id = de / 2; 920 d = ((de & 1) == 1); 927 if (de != -1 ) { 928 e.id = de / 2; 929 d = ((de & 1) == 1); 930 } else { 931 e.id = -1; 932 d = true; 933 } 921 934 } 922 935 … … 1262 1275 } 1263 1276 virtual void build() { 1264 NodeNotifier* notifier = getNotifier();1277 NodeNotifier* _notifier = notifier(); 1265 1278 Node node; 1266 1279 std::vector<Node> nodes; 1267 for (notifier->first(node); node != INVALID; notifier->next(node)) { 1280 for (_notifier->first(node); node != INVALID; 1281 _notifier->next(node)) { 1268 1282 nodes.push_back(node); 1269 1283 } … … 1273 1287 } 1274 1288 virtual void clear() { 1275 NodeNotifier* notifier = getNotifier();1289 NodeNotifier* _notifier = notifier(); 1276 1290 Node node; 1277 for (notifier->first(node); node != INVALID; notifier->next(node)) { 1291 for (_notifier->first(node); node != INVALID; 1292 _notifier->next(node)) { 1278 1293 snapshot.eraseNode(node); 1279 1294 } … … 1312 1327 } 1313 1328 virtual void build() { 1314 UEdgeNotifier* notifier = getNotifier();1329 UEdgeNotifier* _notifier = notifier(); 1315 1330 UEdge edge; 1316 1331 std::vector<UEdge> edges; 1317 for (notifier->first(edge); edge != INVALID; notifier->next(edge)) { 1332 for (_notifier->first(edge); edge != INVALID; 1333 _notifier->next(edge)) { 1318 1334 edges.push_back(edge); 1319 1335 } … … 1323 1339 } 1324 1340 virtual void clear() { 1325 UEdgeNotifier* notifier = getNotifier();1341 UEdgeNotifier* _notifier = notifier(); 1326 1342 UEdge edge; 1327 for (notifier->first(edge); edge != INVALID; notifier->next(edge)) { 1343 for (_notifier->first(edge); edge != INVALID; 1344 _notifier->next(edge)) { 1328 1345 snapshot.eraseUEdge(edge); 1329 1346 } … … 1374 1391 void attach(ListUGraph &_graph) { 1375 1392 graph = &_graph; 1376 node_observer_proxy.attach(graph-> getNotifier(Node()));1377 edge_observer_proxy.attach(graph-> getNotifier(UEdge()));1393 node_observer_proxy.attach(graph->notifier(Node())); 1394 edge_observer_proxy.attach(graph->notifier(UEdge())); 1378 1395 } 1379 1396 … … 2040 2057 } 2041 2058 virtual void build() { 2042 NodeNotifier* notifier = getNotifier();2059 NodeNotifier* _notifier = notifier(); 2043 2060 Node node; 2044 2061 std::vector<Node> nodes; 2045 for (notifier->first(node); node != INVALID; notifier->next(node)) { 2062 for (_notifier->first(node); node != INVALID; 2063 _notifier->next(node)) { 2046 2064 nodes.push_back(node); 2047 2065 } … … 2051 2069 } 2052 2070 virtual void clear() { 2053 NodeNotifier* notifier = getNotifier();2071 NodeNotifier* _notifier = notifier(); 2054 2072 Node node; 2055 for (notifier->first(node); node != INVALID; notifier->next(node)) { 2073 for (_notifier->first(node); node != INVALID; 2074 _notifier->next(node)) { 2056 2075 snapshot.eraseNode(node); 2057 2076 } … … 2090 2109 } 2091 2110 virtual void build() { 2092 UEdgeNotifier* notifier = getNotifier();2111 UEdgeNotifier* _notifier = notifier(); 2093 2112 UEdge edge; 2094 2113 std::vector<UEdge> edges; 2095 for (notifier->first(edge); edge != INVALID; notifier->next(edge)) { 2114 for (_notifier->first(edge); edge != INVALID; 2115 _notifier->next(edge)) { 2096 2116 edges.push_back(edge); 2097 2117 } … … 2101 2121 } 2102 2122 virtual void clear() { 2103 UEdgeNotifier* notifier = getNotifier();2123 UEdgeNotifier* _notifier = notifier(); 2104 2124 UEdge edge; 2105 for (notifier->first(edge); edge != INVALID; notifier->next(edge)) { 2125 for (_notifier->first(edge); edge != INVALID; 2126 _notifier->next(edge)) { 2106 2127 snapshot.eraseUEdge(edge); 2107 2128 } … … 2152 2173 void attach(ListBpUGraph &_graph) { 2153 2174 graph = &_graph; 2154 node_observer_proxy.attach(graph-> getNotifier(Node()));2155 edge_observer_proxy.attach(graph-> getNotifier(UEdge()));2175 node_observer_proxy.attach(graph->notifier(Node())); 2176 edge_observer_proxy.attach(graph->notifier(UEdge())); 2156 2177 } 2157 2178 -
lemon/smart_graph.h
r2350 r2381 287 287 while(s.edge_num<edges.size()) { 288 288 Edge edge = edgeFromId(edges.size()-1); 289 Parent:: getNotifier(Edge()).erase(edge);289 Parent::notifier(Edge()).erase(edge); 290 290 nodes[edges.back().source].first_out=edges.back().next_out; 291 291 nodes[edges.back().target].first_in=edges.back().next_in; … … 294 294 while(s.node_num<nodes.size()) { 295 295 Node node = nodeFromId(nodes.size()-1); 296 Parent:: getNotifier(Node()).erase(node);296 Parent::notifier(Node()).erase(node); 297 297 nodes.pop_back(); 298 298 } … … 506 506 void firstInc(UEdge &edge, bool& d, const Node& v) const { 507 507 int de = nodes[v.id].first_out; 508 edge.id = de / 2; 509 d = ((de & 1) == 1); 508 if (de != -1) { 509 edge.id = de / 2; 510 d = ((de & 1) == 1); 511 } else { 512 edge.id = -1; 513 d = true; 514 } 510 515 } 511 516 void nextInc(UEdge &edge, bool& d) const { 512 517 int de = (edges[(edge.id * 2) | (d ? 1 : 0)].next_out); 513 edge.id = de / 2; 514 d = ((de & 1) == 1); 518 if (de != -1) { 519 edge.id = de / 2; 520 d = ((de & 1) == 1); 521 } else { 522 edge.id = -1; 523 d = true; 524 } 515 525 } 516 526 … … 642 652 int n=edges.size()-1; 643 653 UEdge edge=uEdgeFromId(n/2); 644 Parent:: getNotifier(UEdge()).erase(edge);654 Parent::notifier(UEdge()).erase(edge); 645 655 std::vector<Edge> dir; 646 656 dir.push_back(edgeFromId(n)); 647 657 dir.push_back(edgeFromId(n-1)); 648 Parent:: getNotifier(Edge()).erase(dir);658 Parent::notifier(Edge()).erase(dir); 649 659 nodes[edges[n].target].first_out=edges[n].next_out; 650 660 nodes[edges[n-1].target].first_out=edges[n-1].next_out; … … 655 665 int n=nodes.size()-1; 656 666 Node node = nodeFromId(n); 657 Parent:: getNotifier(Node()).erase(node);667 Parent::notifier(Node()).erase(node); 658 668 nodes.pop_back(); 659 669 } … … 1024 1034 while(s.edge_num<edges.size()) { 1025 1035 UEdge edge = uEdgeFromId(edges.size()-1); 1026 Parent:: getNotifier(UEdge()).erase(edge);1036 Parent::notifier(UEdge()).erase(edge); 1027 1037 std::vector<Edge> dir; 1028 1038 dir.push_back(Parent::direct(edge, true)); 1029 1039 dir.push_back(Parent::direct(edge, false)); 1030 Parent:: getNotifier(Edge()).erase(dir);1040 Parent::notifier(Edge()).erase(dir); 1031 1041 aNodes[edges.back().aNode >> 1].first=edges.back().next_out; 1032 1042 bNodes[edges.back().bNode >> 1].first=edges.back().next_in; … … 1035 1045 while(s.anode_num<aNodes.size()) { 1036 1046 Node node = nodeFromANodeId(aNodes.size() - 1); 1037 Parent:: getNotifier(ANode()).erase(node);1038 Parent:: getNotifier(Node()).erase(node);1047 Parent::notifier(ANode()).erase(node); 1048 Parent::notifier(Node()).erase(node); 1039 1049 aNodes.pop_back(); 1040 1050 } 1041 1051 while(s.bnode_num<bNodes.size()) { 1042 1052 Node node = nodeFromBNodeId(bNodes.size() - 1); 1043 Parent:: getNotifier(BNode()).erase(node);1044 Parent:: getNotifier(Node()).erase(node);1053 Parent::notifier(BNode()).erase(node); 1054 Parent::notifier(Node()).erase(node); 1045 1055 bNodes.pop_back(); 1046 1056 } -
lemon/ugraph_adaptor.h
r2096 r2381 152 152 typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier; 153 153 154 NodeNotifier& getNotifier(Node) const {155 return graph-> getNotifier(Node());154 NodeNotifier& notifier(Node) const { 155 return graph->notifier(Node()); 156 156 } 157 157 158 158 typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier; 159 159 160 EdgeNotifier& getNotifier(Edge) const {161 return graph-> getNotifier(Edge());160 EdgeNotifier& notifier(Edge) const { 161 return graph->notifier(Edge()); 162 162 } 163 163 164 164 typedef typename ItemSetTraits<Graph, UEdge>::ItemNotifier UEdgeNotifier; 165 165 166 UEdgeNotifier& getNotifier(UEdge) const {167 return graph-> getNotifier(UEdge());166 UEdgeNotifier& notifier(UEdge) const { 167 return graph->notifier(UEdge()); 168 168 } 169 169 … … 312 312 Parent::firstInc(i, d, n); 313 313 while (i!=INVALID && (!(*uedge_filter_map)[i] 314 || !(*node_filter_map)[Parent::source(i)] 314 315 || !(*node_filter_map)[Parent::target(i)])) Parent::nextInc(i, d); 315 316 } … … 348 349 void nextInc(UEdge& i, bool& d) const { 349 350 Parent::nextInc(i, d); 350 while (i!=INVALID && (!(*uedge_filter_map)[i] 351 || !(*node_filter_map)[Parent::source(i)])) Parent::nextInc(i, d); 351 while (i!=INVALID && (!(*uedge_filter_map)[i] 352 || !(*node_filter_map)[Parent::source(i)] 353 || !(*node_filter_map)[Parent::target(i)])) Parent::nextInc(i, d); 352 354 } 353 355 … … 988 990 typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier; 989 991 990 NodeNotifier& getNotifier(Node) const {991 return graph-> getNotifier(Node());992 NodeNotifier& notifier(Node) const { 993 return graph->notifier(Node()); 992 994 } 993 995 994 996 typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier; 995 997 996 EdgeNotifier& getNotifier(Edge) const {997 return graph-> getNotifier(Edge());998 EdgeNotifier& notifier(Edge) const { 999 return graph->notifier(Edge()); 998 1000 } 999 1001
Note: See TracChangeset
for help on using the changeset viewer.