@@ -39,74 +39,92 @@ EdgeDataDiGraph{I, T}(data) where {I, T} = EdgeDataDiGraph{I, T, vertextype(I)}(
3939
4040Graphs. is_directed (:: Type{<:EdgeDataDiGraph} ) = true
4141
42- const GenericEdgeDataGraph{I, T, V} =
43- Union{EdgeDataGraph{I, T, V}, EdgeDataDiGraph{I, T, V}}
44-
45- function (GType:: Type{<:GenericEdgeDataGraph{I, T, V}} )(data) where {I, T, V}
46- edges = keys (data)
47- vertices = union (src .(edges), dst .(edges))
48- graph = GType (undef, vertices)
49- copyto! (graph, data)
50- return graph
42+ for GType in (:EdgeDataGraph , :EdgeDataDiGraph )
43+ @eval begin
44+ function $GType {E, T, V} (data) where {V, E <: NamedEdge{V} , T}
45+ edges = keys (data)
46+ vertices = union (src .(edges), dst .(edges))
47+ graph = $ GType {E, T, V} (undef, vertices)
48+ copyto! (graph, data)
49+ return graph
50+ end
51+ end
5152end
5253
5354# ====================================== Graphs.jl ======================================= #
54- Graphs. edgetype (:: Type{<:GenericEdgeDataGraph{I, T}} ) where {I, T} = I
55-
56- function Graphs. has_vertex (graph:: GenericEdgeDataGraph , vertex)
57- return has_vertex (graph. underlying_graph, vertex)
58- end
59- function Graphs. has_edge (graph:: GenericEdgeDataGraph , edge:: NamedEdge )
60- return has_edge (graph. underlying_graph, edge)
61- end
6255
63- function Graphs. rem_edge! (graph:: GenericEdgeDataGraph , edge)
64- unset! (graph. edge_data, edge)
65- rem_edge! (graph. underlying_graph, edge)
66- return graph
67- end
68-
69- function Graphs. rem_vertex! (graph:: GenericEdgeDataGraph , vertex)
70- for edge in incident_edges (graph, vertex)
71- unset! (graph. edge_data, edge)
56+ for GType in (:EdgeDataGraph , :EdgeDataDiGraph )
57+ @eval begin
58+ Graphs. edgetype (:: Type{<:$GType{I, T, V}} ) where {I, T, V} = I
59+
60+ function Graphs. has_vertex (graph:: $GType , vertex)
61+ return has_vertex (graph. underlying_graph, vertex)
62+ end
63+ function Graphs. has_edge (graph:: $GType , edge:: NamedEdge )
64+ return has_edge (graph. underlying_graph, edge)
65+ end
66+
67+ function Graphs. rem_edge! (graph:: $GType , edge)
68+ unset! (graph. edge_data, edge)
69+ rem_edge! (graph. underlying_graph, edge)
70+ return graph
71+ end
72+
73+ function Graphs. rem_vertex! (graph:: $GType , vertex)
74+ for edge in incident_edges (graph, vertex)
75+ unset! (graph. edge_data, edge)
76+ end
77+ rem_vertex! (graph. underlying_graph, vertex)
78+ return graph
79+ end
80+
81+ Graphs. vertices (graph:: $GType ) = vertices (graph. underlying_graph)
7282 end
73- rem_vertex! (graph. underlying_graph, vertex)
74- return graph
7583end
7684
77- Graphs. vertices (graph:: GenericEdgeDataGraph ) = vertices (graph. underlying_graph)
78-
7985# ==================================== NamedGraphs.jl ==================================== #
8086
81- function NamedGraphs. vertex_positions (graph:: GenericEdgeDataGraph )
82- return vertex_positions (graph. underlying_graph)
83- end
87+ for GType in (:EdgeDataGraph , :EdgeDataDiGraph )
88+ @eval begin
89+ function NamedGraphs. vertex_positions (graph:: $GType )
90+ return vertex_positions (graph. underlying_graph)
91+ end
8492
85- function NamedGraphs. ordered_vertices (graph:: GenericEdgeDataGraph )
86- return ordered_vertices (graph. underlying_graph)
87- end
93+ function NamedGraphs. ordered_vertices (graph:: $GType )
94+ return ordered_vertices (graph. underlying_graph)
95+ end
8896
89- function NamedGraphs. position_graph (graph:: GenericEdgeDataGraph )
90- return position_graph (graph. underlying_graph)
97+ function NamedGraphs. position_graph (graph:: $GType )
98+ return position_graph (graph. underlying_graph)
99+ end
100+ end
91101end
92102
93103# ==================================== DataGraphs.jl ===================================== #
94104
95- edge_data_type (:: Type{<:GenericEdgeDataGraph{I, T}} ) where {I, T} = T
105+ for GType in (:EdgeDataGraph , :EdgeDataDiGraph )
106+ @eval begin
107+ edge_data_type (:: Type{<:$GType{I, T, V}} ) where {I, T, V} = T
96108
97- function set_edge_data! (graph:: GenericEdgeDataGraph , data, edge)
98- graph. edge_data[edge] = data
99- return graph
100- end
109+ function set_edge_data! (graph:: $GType , data, edge)
110+ graph. edge_data[edge] = data
111+ return graph
112+ end
101113
102- get_edge_data (graph:: GenericEdgeDataGraph , edge) = graph. edge_data[edge]
114+ get_edge_data (graph:: $GType , edge) = graph. edge_data[edge]
103115
104- is_vertex_assigned (:: GenericEdgeDataGraph , _vertex) = false
105- is_edge_assigned (graph:: GenericEdgeDataGraph , edge) = isassigned (graph. edge_data, edge)
116+ is_vertex_assigned (:: $GType , _vertex) = false
117+ is_edge_assigned (graph:: $GType , edge) = isassigned (graph. edge_data, edge)
118+ end
119+ end
106120
107121# =================================== Dictionaries.jl ==================================== #
108122
109- Dictionaries. isinsertable (:: Type{<:GenericEdgeDataGraph} , _edge) = true
123+ for GType in (:EdgeDataGraph , :EdgeDataDiGraph )
124+ @eval begin
125+ Dictionaries. isinsertable (:: Type{<:$GType} , _edge) = true
126+ end
127+ end
110128
111129function insert_edge_data! (graph:: AbstractEdgeDataGraph , edge:: AbstractEdge , data)
112130 if has_edge (graph, edge)
0 commit comments