@@ -163,11 +163,16 @@ end
163
163
Base. nameof (l:: ConnectionElement ) = renamespace (nameof (l. sys), getname (l. v))
164
164
Base. isequal (l1:: ConnectionElement , l2:: ConnectionElement ) = l1 == l2
165
165
function Base.:(== )(l1:: ConnectionElement , l2:: ConnectionElement )
166
- nameof (l1. sys) == nameof (l2. sys) && isequal (l1. v, l2. v) && l1 . isouter == l2 . isouter
166
+ l1 . isouter == l2 . isouter && nameof (l1. sys) == nameof (l2. sys) && isequal (l1. v, l2. v)
167
167
end
168
168
169
169
const _debug_mode = Base. JLOptions (). check_bounds == 1
170
170
171
+ function Base. show (io:: IO , c:: ConnectionElement )
172
+ @unpack sys, v, isouter = c
173
+ print (io, nameof (sys), " ." , v, " ::" , isouter ? " outer" : " inner" )
174
+ end
175
+
171
176
function Base. hash (e:: ConnectionElement , salt:: UInt )
172
177
if _debug_mode
173
178
@assert e. h === _hash_impl (e. sys, e. v, e. isouter)
@@ -189,6 +194,8 @@ struct ConnectionSet
189
194
end
190
195
ConnectionSet () = ConnectionSet (ConnectionElement[])
191
196
Base. copy (c:: ConnectionSet ) = ConnectionSet (copy (c. set))
197
+ Base.:(== )(a:: ConnectionSet , b:: ConnectionSet ) = a. set == b. set
198
+ Base. sort (a:: ConnectionSet ) = ConnectionSet (sort (a. set, by = string))
192
199
193
200
function Base. show (io:: IO , c:: ConnectionSet )
194
201
print (io, " <" )
@@ -389,21 +396,25 @@ function Base.merge(csets::AbstractVector{<:ConnectionSet}, allouter = false)
389
396
id
390
397
end
391
398
end
399
+ # isequal might not be equal? lol
400
+ if v. sys. namespace != = nothing
401
+ idx2ele[id] = v
402
+ end
392
403
if j > 1
393
404
union! (union_find, prev_id[], id)
394
405
end
395
406
prev_id[] = id
396
407
end
397
- id2set = Dict {Int, ConnectionSet } ()
408
+ id2set = Dict {Int, Int } ()
398
409
merged_set = ConnectionSet[]
399
410
for (id, ele) in enumerate (idx2ele)
400
411
rid = find_root (union_find, id)
401
- set = get! (id2set, rid) do
412
+ set_idx = get! (id2set, rid) do
402
413
set = ConnectionSet ()
403
414
push! (merged_set, set)
404
- set
415
+ length (merged_set)
405
416
end
406
- push! (set . set, ele)
417
+ push! (merged_set[set_idx] . set, ele)
407
418
end
408
419
merged_set
409
420
end
0 commit comments