@@ -149,15 +149,18 @@ function Graphs.add_vertex!(meta_graph::MetaGraph, label, data)
149
149
if haskey (meta_graph, label)
150
150
return false
151
151
end
152
- nvnum = nv (meta_graph. graph)
152
+ nv_prev = nv (meta_graph. graph)
153
+ code = nv_prev + 1
154
+ meta_graph. vertex_labels[code] = label
155
+ meta_graph. vertex_properties[label] = (code, data)
153
156
add_vertex! (meta_graph. graph)
154
- added = nvnum + 1 == nv (meta_graph. graph)
155
- if added
156
- code = nv (meta_graph)
157
- meta_graph. vertex_labels[code] = label
158
- meta_graph. vertex_properties[label] = (code, data)
157
+ if nv (meta_graph. graph) == nv_prev # undo
158
+ delete! (meta_graph. vertex_labels, code)
159
+ delete! (meta_graph. vertex_properties, label)
160
+ return false
161
+ else
162
+ return true
159
163
end
160
- return added
161
164
end
162
165
163
166
function Graphs. add_vertex! (meta_graph:: MetaGraph{<:Any,<:Any,<:Any,Nothing} , label)
@@ -173,12 +176,20 @@ If the `EdgeData` type of `meta_graph` is `Nothing`, `data` can be omitted.
173
176
Return `true` if the edge has been added, `false` otherwise.
174
177
"""
175
178
function Graphs. add_edge! (meta_graph:: MetaGraph , label_1, label_2, data)
179
+ if ! haskey (meta_graph, label_1) || ! haskey (meta_graph, label_2)
180
+ return false
181
+ end
176
182
code_1, code_2 = code_for (meta_graph, label_1), code_for (meta_graph, label_2)
177
- added = add_edge! (meta_graph. graph, code_1, code_2)
178
- if added
179
- meta_graph. edge_data[arrange (meta_graph, label_1, label_2, code_1, code_2)] = data
183
+ label_tup = arrange (meta_graph, label_1, label_2, code_1, code_2)
184
+ meta_graph. edge_data[label_tup] = data
185
+ ne_prev = ne (meta_graph. graph)
186
+ add_edge! (meta_graph. graph, code_1, code_2)
187
+ if ne (meta_graph. graph) == ne_prev # undo
188
+ delete! (meta_graph. edge_data, label_tup)
189
+ return false
190
+ else
191
+ return true
180
192
end
181
- return added
182
193
end
183
194
184
195
function Graphs. add_edge! (
0 commit comments