Skip to content

Commit 599ef81

Browse files
authored
Avoid materializing intermediate adjacency list (#372)
* Avoid materializing intermediate adjacency list * Do the same for undirected graphs * Fix bug
1 parent 48c42c7 commit 599ef81

File tree

1 file changed

+5
-7
lines changed

1 file changed

+5
-7
lines changed

src/SimpleGraphs/simpleedgeiter.jl

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,23 @@ eltype(::Type{SimpleEdgeIter{SimpleDiGraph{T}}}) where {T} = SimpleDiGraphEdge{T
3232
eit::SimpleEdgeIter{G}, state=(one(eltype(eit.g)), 1)
3333
) where {G <: AbstractSimpleGraph; !IsDirected{G}}
3434
g = eit.g
35-
fadjlist = fadj(g)
3635
T = eltype(g)
3736
n = T(nv(g))
3837
u, i = state
3938

4039
@inbounds while u < n
41-
list_u = fadjlist[u]
40+
list_u = fadj(g, u)
4241
if i > length(list_u)
4342
u += one(u)
44-
i = searchsortedfirst(fadjlist[u], u)
43+
i = searchsortedfirst(fadj(g, u), u)
4544
continue
4645
end
4746
e = SimpleEdge(u, list_u[i])
4847
state = (u, i + 1)
4948
return e, state
5049
end
5150

52-
@inbounds (n == 0 || i > length(fadjlist[n])) && return nothing
51+
@inbounds (n == 0 || i > length(fadj(g, n))) && return nothing
5352

5453
e = SimpleEdge(n, n)
5554
state = (u, i + 1)
@@ -60,20 +59,19 @@ end
6059
eit::SimpleEdgeIter{G}, state=(one(eltype(eit.g)), 1)
6160
) where {G <: AbstractSimpleGraph; IsDirected{G}}
6261
g = eit.g
63-
fadjlist = fadj(g)
6462
T = eltype(g)
6563
n = T(nv(g))
6664
u, i = state
6765

6866
n == 0 && return nothing
6967

7068
@inbounds while true
71-
list_u = fadjlist[u]
69+
list_u = fadj(g, u)
7270
if i > length(list_u)
7371
u == n && return nothing
7472

7573
u += one(u)
76-
list_u = fadjlist[u]
74+
list_u = fadj(g, u)
7775
i = 1
7876
continue
7977
end

0 commit comments

Comments
 (0)