@@ -125,12 +125,21 @@ Base.copy(d::SortedVectorDict{K,V}) where {K,V} = SortedVectorDict{K,V}(copy(d.k
125125Base. empty (:: SortedVectorDict , :: Type{K} , :: Type{V} ) where {K, V} = SortedVectorDict {K, V} ()
126126Base. 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+
128137function 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))
150159end
151160function 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