Skip to content

Commit c72bd3e

Browse files
add IntEdgeListFormat
1 parent 6db4c3d commit c72bd3e

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

src/Edgelist/Edgelist.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,6 @@ loadgraph(io::IO, gname::String, ::EdgeListFormat) = loadedgelist(io, gname)
5252
loadgraphs(io::IO, ::EdgeListFormat) = Dict("graph" => loadedgelist(io, "graph"))
5353
savegraph(io::IO, g::AbstractGraph, gname::String, ::EdgeListFormat) = saveedgelist(io, g, gname)
5454

55+
include("IntEdgeList.jl")
56+
5557
end

src/Edgelist/IntEdgeList.jl

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
export IntEdgeListFormat
2+
3+
struct IntEdgeListFormat <: AbstractGraphFormat
4+
offset::Int64
5+
end
6+
IntEdgeListFormat(;offset = 0) = IntEdgeListFormat(offset)
7+
8+
function loadintedgelist(io::IO, gname::String, offset::Int64)
9+
elist = Vector{Tuple{Int64, Int64}}()
10+
nvg = 0
11+
neg = 0
12+
fadjlist = Vector{Vector{Int64}}()
13+
for x in eachline(io)
14+
i = 1
15+
while x[i] != ' ' && x[i] != ','
16+
i += 1
17+
end
18+
s = parse(Int64, x[1:i-1])
19+
while x[i] == ' ' || x[i] == ','
20+
i += 1
21+
end
22+
ii = i
23+
while i <= length(x) && x[i] != ' '
24+
i += 1
25+
end
26+
d = parse(Int64, x[ii:i-1])
27+
s = s-offset
28+
d = d-offset
29+
if nvg < max(s, d)
30+
nvg = max(s, d)
31+
append!(fadjlist, [Vector{Int64}() for _ in 1:nvg-length(fadjlist)])
32+
end
33+
push!(fadjlist[s], d)
34+
neg += 1
35+
end
36+
sort!.(fadjlist)
37+
badjlist = [Vector{Int64}() for _ in 1:nvg]
38+
for u = 1:nvg
39+
for v in fadjlist[u]
40+
push!(badjlist[v], u)
41+
end
42+
end
43+
return LightGraphs.DiGraph(neg, fadjlist, badjlist)
44+
end
45+
46+
loadgraph(io::IO, gname::String, fmt::IntEdgeListFormat) = loadintedgelist(io, gname, fmt.offset)
47+
loadgraphs(io::IO, fmt::IntEdgeListFormat) = Dict("graph" => loadintedgelist(io, "graph", fmt.offset))
48+
savegraph(io::IO, g::AbstractGraph, gname::String, ::IntEdgeListFormat) = saveedgelist(io, g, gname)

test/Edgelist/runtests.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
using Test
22
using GraphIO.EdgeList
3+
using GraphIO.EdgeList: IntEdgeListFormat
34

45
@testset "EdgeList" begin
56
for g in values(digraphs)
67
readback_test(EdgeListFormat(), g)
8+
readback_test(IntEdgeListFormat(), g)
79
end
810
end
911

0 commit comments

Comments
 (0)