| 1922 | * @internal |
| 1923 | */ |
| 1924 | const rebuildAdjacency = <N, E, T extends Kind = "directed">( |
| 1925 | mutable: GraphImpl<N, E, T> |
| 1926 | ): void => { |
| 1927 | mutable.adjacency.clear() |
| 1928 | mutable.reverseAdjacency.clear() |
| 1929 | |
| 1930 | for (const nodeIndex of mutable.nodes.keys()) { |
| 1931 | mutable.adjacency.set(nodeIndex, []) |
| 1932 | mutable.reverseAdjacency.set(nodeIndex, []) |
| 1933 | } |
| 1934 | |
| 1935 | for (const [edgeIndex, edgeData] of mutable.edges) { |
| 1936 | mutable.adjacency.get(edgeData.source)!.push(edgeIndex) |
| 1937 | mutable.reverseAdjacency.get(edgeData.target)!.push(edgeIndex) |
| 1938 | |
| 1939 | if (mutable.type === "undirected") { |
| 1940 | mutable.adjacency.get(edgeData.target)!.push(edgeIndex) |
| 1941 | mutable.reverseAdjacency.get(edgeData.source)!.push(edgeIndex) |
| 1942 | } |
| 1943 | } |
| 1944 | } |
| 1945 | |
| 1946 | /** |
| 1947 | * Swaps source and target nodes for every edge in a mutable graph. |