Skip to content

Commit 8aa166e

Browse files
martinholtersoxinabox
authored andcommitted
Use KeySet instead of KeyIterator (#349)
...in argument types of `in` and `next` on newer Julia versions.
1 parent 71e6001 commit 8aa166e

File tree

2 files changed

+24
-7
lines changed

2 files changed

+24
-7
lines changed

src/default_dict.jl

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,13 @@ DefaultDictBase{K,V}(default::F) where {K,V,F} = DefaultDictBase{K,V,F,Dict{K,V}
5858
@delegate_return_parent DefaultDictBase.d [ delete!, empty!, setindex!, sizehint! ]
5959

6060
similar(d::DefaultDictBase{K,V,F}) where {K,V,F} = DefaultDictBase{K,V,F}(d.default)
61-
in(key, v::Base.KeyIterator{T}) where {T<:DefaultDictBase} = key in keys(v.dict.d)
62-
next(v::Base.KeyIterator{T}, i) where {T<:DefaultDictBase} = (v.dict.d.keys[i], Base.skip_deleted(v.dict.d,i+1))
61+
if isdefined(Base, :KeySet) # 0.7.0-DEV.2722
62+
in(key, v::Base.KeySet{K,T}) where {K,T<:DefaultDictBase{K}} = key in keys(v.dict.d)
63+
next(v::Base.KeySet{K,T}, i) where {K,T<:DefaultDictBase{K}} = (v.dict.d.keys[i], Base.skip_deleted(v.dict.d,i+1))
64+
else
65+
in(key, v::Base.KeyIterator{T}) where {T<:DefaultDictBase} = key in keys(v.dict.d)
66+
next(v::Base.KeyIterator{T}, i) where {T<:DefaultDictBase} = (v.dict.d.keys[i], Base.skip_deleted(v.dict.d,i+1))
67+
end
6368
next(v::Base.ValueIterator{T}, i) where {T<:DefaultDictBase} = (v.dict.d.vals[i], Base.skip_deleted(v.dict.d,i+1))
6469

6570
getindex(d::DefaultDictBase, key) = get!(d.d, key, d.default)
@@ -138,7 +143,11 @@ for _Dict in [:Dict, :OrderedDict]
138143
push!(d::$DefaultDict, p, q, r...) = push!(push!(push!(d, p), q), r...)
139144

140145
similar(d::$DefaultDict{K,V,F}) where {K,V,F} = $DefaultDict{K,V,F}(d.d.default)
141-
in(key, v::Base.KeyIterator{T}) where {T<:$DefaultDict} = key in keys(v.dict.d.d)
146+
if isdefined(Base, :KeySet) # 0.7.0-DEV.2722
147+
in(key, v::Base.KeySet{K,T}) where {K,T<:$DefaultDict{K}} = key in keys(v.dict.d.d)
148+
else
149+
in(key, v::Base.KeyIterator{T}) where {T<:$DefaultDict} = key in keys(v.dict.d.d)
150+
end
142151
end
143152
end
144153

@@ -182,4 +191,4 @@ isordered(::Type{T}) where {T<:DefaultOrderedDict} = true
182191
# @delegate_return_parent DefaultSortedDict.d [ delete!, empty!, setindex!, sizehint! ]
183192

184193
# similar{K,V,F}(d::DefaultSortedDict{K,V,F}) = DefaultSortedDict{K,V,F}(d.d.default)
185-
# in{T<:DefaultSortedDict}(key, v::Base.KeyIterator{T}) = key in keys(v.dict.d.d)
194+
# in{T<:DefaultSortedDict}(key, v::Base.KeySet{T}) = key in keys(v.dict.d.d)

src/ordered_dict.jl

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Base: haskey, get, get!, getkey, delete!, push!, pop!, empty!,
44
setindex!, getindex, length, isempty, start,
55
next, done, keys, values, setdiff, setdiff!,
66
union, union!, intersect, filter, filter!,
7-
hash, eltype, KeyIterator, ValueIterator, convert, copy,
7+
hash, eltype, ValueIterator, convert, copy,
88
merge
99

1010
"""
@@ -376,7 +376,11 @@ function get(default::Base.Callable, h::OrderedDict{K,V}, key) where {K,V}
376376
end
377377

378378
haskey(h::OrderedDict, key) = (ht_keyindex(h, key, true) >= 0)
379-
in(key, v::KeyIterator{T}) where {T<:OrderedDict} = (ht_keyindex(v.dict, key, true) >= 0)
379+
if isdefined(Base, :KeySet) # 0.7.0-DEV.2722
380+
in(key, v::Base.KeySet{K,T}) where {K,T<:OrderedDict{K}} = (ht_keyindex(v.dict, key, true) >= 0)
381+
else
382+
in(key, v::Base.KeyIterator{T}) where {T<:OrderedDict} = (ht_keyindex(v.dict, key, true) >= 0)
383+
end
380384

381385
function getkey(h::OrderedDict{K,V}, key, default) where {K,V}
382386
index = ht_keyindex(h, key, true)
@@ -429,7 +433,11 @@ end
429433
done(t::OrderedDict, i) = done(t.keys, i)
430434
next(t::OrderedDict, i) = (Pair(t.keys[i],t.vals[i]), i+1)
431435

432-
next(v::KeyIterator{T}, i) where {T<:OrderedDict} = (v.dict.keys[i], i+1)
436+
if isdefined(Base, :KeySet) # 0.7.0-DEV.2722
437+
next(v::Base.KeySet{K,T}, i) where {K,T<:OrderedDict{K}} = (v.dict.keys[i], i+1)
438+
else
439+
next(v::Base.KeyIterator{T}, i) where {T<:OrderedDict} = (v.dict.keys[i], i+1)
440+
end
433441
next(v::ValueIterator{T}, i) where {T<:OrderedDict} = (v.dict.vals[i], i+1)
434442

435443
function merge(d::OrderedDict, others::Associative...)

0 commit comments

Comments
 (0)