Changeset 2098:12f67fa3df7d in lemon-0.x
- Timestamp:
- 05/30/06 12:33:50 (17 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2768
- Location:
- lemon
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/bits/graph_extender.h
r2076 r2098 1478 1478 void erase(const Node& node) { 1479 1479 UEdge uedge; 1480 bool dir; 1481 Parent::firstInc(uedge, dir, node); 1482 while (uedge != INVALID ) { 1483 erase(uedge); 1484 Parent::firstInc(uedge, dir, node); 1485 } 1480 if (Parent::aNode(node)) { 1481 Parent::firstFromANode(uedge, node); 1482 while (uedge != INVALID) { 1483 erase(uedge); 1484 Parent::firstFromANode(uedge, node); 1485 } 1486 } else { 1487 Parent::firstFromBNode(uedge, node); 1488 while (uedge != INVALID) { 1489 erase(uedge); 1490 Parent::firstFromBNode(uedge, node); 1491 } 1492 } 1486 1493 1487 1494 getNotifier(Node()).erase(node); -
lemon/list_graph.h
r2076 r2098 649 649 650 650 struct NodeT { 651 int first_edge, next_node;651 int first_edge, prev, next; 652 652 }; 653 653 … … 709 709 } 710 710 void nextANode(Node& node) const { 711 node.id = aNodes[node.id >> 1].next _node;711 node.id = aNodes[node.id >> 1].next; 712 712 } 713 713 714 714 void firstBNode(Node& node) const { 715 node.id = 715 node.id = first_bnode != -1 ? (first_bnode << 1) + 1 : -1; 716 716 } 717 717 void nextBNode(Node& node) const { 718 node.id = bNodes[node.id >> 1].next _node;718 node.id = bNodes[node.id >> 1].next; 719 719 } 720 720 … … 730 730 void next(Node& node) const { 731 731 if (aNode(node)) { 732 node.id = aNodes[node.id >> 1].next _node;732 node.id = aNodes[node.id >> 1].next; 733 733 if (node.id == -1) { 734 734 if (first_bnode != -1) { … … 737 737 } 738 738 } else { 739 node.id = bNodes[node.id >> 1].next _node;739 node.id = bNodes[node.id >> 1].next; 740 740 } 741 741 } … … 744 744 int aNodeId = first_anode; 745 745 while (aNodeId != -1 && aNodes[aNodeId].first_edge == -1) { 746 aNodeId = aNodes[aNodeId].next _node!= -1 ?747 aNodes[aNodeId].next _node>> 1 : -1;746 aNodeId = aNodes[aNodeId].next != -1 ? 747 aNodes[aNodeId].next >> 1 : -1; 748 748 } 749 749 if (aNodeId != -1) { … … 757 757 edge.id = edges[edge.id].next_out; 758 758 if (edge.id == -1) { 759 aNodeId = aNodes[aNodeId].next _node!= -1 ?760 aNodes[aNodeId].next _node>> 1 : -1;759 aNodeId = aNodes[aNodeId].next != -1 ? 760 aNodes[aNodeId].next >> 1 : -1; 761 761 while (aNodeId != -1 && aNodes[aNodeId].first_edge == -1) { 762 aNodeId = aNodes[aNodeId].next _node!= -1 ?763 aNodes[aNodeId].next _node>> 1 : -1;762 aNodeId = aNodes[aNodeId].next != -1 ? 763 aNodes[aNodeId].next >> 1 : -1; 764 764 } 765 765 if (aNodeId != -1) { … … 850 850 } else { 851 851 aNodeId = first_free_anode; 852 first_free_anode = aNodes[first_free_anode].next_node; 853 } 854 aNodes[aNodeId].next_node = 855 first_anode != -1 ? (first_anode << 1) : -1; 852 first_free_anode = aNodes[first_free_anode].next; 853 } 854 if (first_anode != -1) { 855 aNodes[aNodeId].next = first_anode << 1; 856 aNodes[first_anode].prev = aNodeId << 1; 857 } else { 858 aNodes[aNodeId].next = -1; 859 } 860 aNodes[aNodeId].prev = -1; 856 861 first_anode = aNodeId; 857 862 aNodes[aNodeId].first_edge = -1; … … 866 871 } else { 867 872 bNodeId = first_free_bnode; 868 first_free_bnode = bNodes[first_free_bnode].next_node; 869 } 870 bNodes[bNodeId].next_node = 871 first_bnode != -1 ? (first_bnode << 1) + 1 : -1; 873 first_free_bnode = bNodes[first_free_bnode].next; 874 } 875 if (first_bnode != -1) { 876 bNodes[bNodeId].next = (first_bnode << 1) + 1; 877 bNodes[first_bnode].prev = (bNodeId << 1) + 1; 878 } else { 879 bNodes[bNodeId].next = -1; 880 } 872 881 first_bnode = bNodeId; 873 882 bNodes[bNodeId].first_edge = -1; … … 910 919 if (aNode(node)) { 911 920 int aNodeId = node.id >> 1; 912 aNodes[aNodeId].next_node = first_free_anode; 921 if (aNodes[aNodeId].prev != -1) { 922 aNodes[aNodes[aNodeId].prev >> 1].next = aNodes[aNodeId].next; 923 } else { 924 first_anode = aNodes[aNodeId].next >> 1; 925 } 926 if (aNodes[aNodeId].next != -1) { 927 aNodes[aNodes[aNodeId].next >> 1].prev = aNodes[aNodeId].prev; 928 } 929 aNodes[aNodeId].next = first_free_anode; 913 930 first_free_anode = aNodeId; 914 931 } else { 915 932 int bNodeId = node.id >> 1; 916 bNodes[bNodeId].next_node = first_free_bnode; 933 if (bNodes[bNodeId].prev != -1) { 934 bNodes[bNodes[bNodeId].prev >> 1].next = bNodes[bNodeId].next; 935 } else { 936 first_bnode = bNodes[bNodeId].next >> 1; 937 } 938 if (bNodes[bNodeId].next != -1) { 939 bNodes[bNodes[bNodeId].next >> 1].prev = bNodes[bNodeId].prev; 940 } 941 bNodes[bNodeId].next = first_free_bnode; 917 942 first_free_bnode = bNodeId; 918 943 } … … 920 945 921 946 void erase(const UEdge& edge) { 947 922 948 if (edges[edge.id].prev_out != -1) { 923 949 edges[edges[edge.id].prev_out].next_out = edges[edge.id].next_out; 924 950 } else { 925 aNodes[edges[edge.id].aNode ].first_edge = edges[edge.id].next_out;951 aNodes[edges[edge.id].aNode >> 1].first_edge = edges[edge.id].next_out; 926 952 } 927 953 if (edges[edge.id].next_out != -1) { 928 954 edges[edges[edge.id].next_out].prev_out = edges[edge.id].prev_out; 929 955 } 956 930 957 if (edges[edge.id].prev_in != -1) { 931 958 edges[edges[edge.id].prev_in].next_in = edges[edge.id].next_in; 932 959 } else { 933 bNodes[edges[edge.id].bNode ].first_edge = edges[edge.id].next_in;960 bNodes[edges[edge.id].bNode >> 1].first_edge = edges[edge.id].next_in; 934 961 } 935 962 if (edges[edge.id].next_in != -1) { 936 963 edges[edges[edge.id].next_in].prev_in = edges[edge.id].prev_in; 937 964 } 965 938 966 edges[edge.id].next_out = first_free_edge; 939 967 first_free_edge = edge.id;
Note: See TracChangeset
for help on using the changeset viewer.