Skip to content

Commit 4f1559c

Browse files
author
Jutho Haegeman
committed
experiment with other searchsortedfirst implementation
1 parent 82c0bcf commit 4f1559c

1 file changed

Lines changed: 15 additions & 6 deletions

File tree

src/auxiliary/dicts.jl

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,21 @@ Base.copy(d::SortedVectorDict{K,V}) where {K,V} = SortedVectorDict{K,V}(copy(d.k
125125
Base.empty(::SortedVectorDict, ::Type{K}, ::Type{V}) where {K, V} = SortedVectorDict{K, V}()
126126
Base.empty!(d::SortedVectorDict) = (empty!(d.keys); empty!(d.values); return d)
127127

128+
# _searchsortedfirst(v::Vector, k) = searchsortedfirst(v, k)
129+
function _searchsortedfirst(v::Vector, k)
130+
i = 1
131+
@inbounds while i <= length(v) && isless(v[i], k)
132+
i += 1
133+
end
134+
return i
135+
end
136+
128137
function Base.delete!(d::SortedVectorDict{K}, k) where {K}
129138
key = convert(K, k)
130139
if !isequal(k, key)
131140
return d
132141
end
133-
i = searchsortedfirst(d.keys, key)
142+
i = _searchsortedfirst(d.keys, key)
134143
if i <= length(d) && isequal(d.keys[i], key)
135144
deleteat!(d.keys, i)
136145
deleteat!(d.values, i)
@@ -145,15 +154,15 @@ function Base.haskey(d::SortedVectorDict{K}, k) where {K}
145154
if !isequal(k, key)
146155
return false
147156
end
148-
i = searchsortedfirst(d.keys, key)
157+
i = _searchsortedfirst(d.keys, key)
149158
return (i <= length(d) && isequal(d.keys[i], key))
150159
end
151160
function Base.getindex(d::SortedVectorDict{K}, k) where {K}
152161
key = convert(K, k)
153162
if !isequal(k, key)
154163
throw(KeyError(k))
155164
end
156-
i = searchsortedfirst(d.keys, key)
165+
i = _searchsortedfirst(d.keys, key)
157166
@inbounds begin
158167
return (i <= length(d) && isequal(d.keys[i], key)) ? d.values[i] : throw(KeyError(key))
159168
end
@@ -163,7 +172,7 @@ function Base.setindex!(d::SortedVectorDict{K}, v, k) where {K}
163172
if !isequal(k, key)
164173
throw(ArgumentError("$k is not a valid key for type $K"))
165174
end
166-
i = searchsortedfirst(d.keys, key)
175+
i = _searchsortedfirst(d.keys, key)
167176
if i <= length(d) && isequal(d.keys[i], key)
168177
d.values[i] = v
169178
else
@@ -178,7 +187,7 @@ function Base.get(d::SortedVectorDict{K}, k, default) where {K}
178187
if !isequal(k, key)
179188
return default
180189
end
181-
i = searchsortedfirst(d.keys, key)
190+
i = _searchsortedfirst(d.keys, key)
182191
@inbounds begin
183192
return (i <= length(d) && isequal(d.keys[i], key)) ? d.values[i] : default
184193
end
@@ -188,7 +197,7 @@ function Base.get(f::Union{Function,Type}, d::SortedVectorDict{K}, k) where {K}
188197
if !isequal(k, key)
189198
return f()
190199
end
191-
i = searchsortedfirst(d.keys, key)
200+
i = _searchsortedfirst(d.keys, key)
192201
@inbounds begin
193202
return (i <= length(d) && isequal(d.keys[i], key)) ? d.values[i] : f()
194203
end

0 commit comments

Comments
 (0)