@@ -30,7 +30,7 @@ import (
30
30
"net/http"
31
31
"os"
32
32
"runtime"
33
- "sort "
33
+ "slices "
34
34
"strconv"
35
35
"sync"
36
36
"sync/atomic"
@@ -181,13 +181,11 @@ func (v *Map) addKey(key string) {
181
181
v .keysMu .Lock ()
182
182
defer v .keysMu .Unlock ()
183
183
// Using insertion sort to place key into the already-sorted v.keys.
184
- if i := sort .SearchStrings (v .keys , key ); i >= len (v .keys ) {
185
- v .keys = append (v .keys , key )
186
- } else if v .keys [i ] != key {
187
- v .keys = append (v .keys , "" )
188
- copy (v .keys [i + 1 :], v .keys [i :])
189
- v .keys [i ] = key
184
+ i , found := slices .BinarySearch (v .keys , key )
185
+ if found {
186
+ return
190
187
}
188
+ v .keys = slices .Insert (v .keys , i , key )
191
189
}
192
190
193
191
func (v * Map ) Get (key string ) Var {
@@ -248,10 +246,9 @@ func (v *Map) AddFloat(key string, delta float64) {
248
246
func (v * Map ) Delete (key string ) {
249
247
v .keysMu .Lock ()
250
248
defer v .keysMu .Unlock ()
251
- i := sort .SearchStrings (v .keys , key )
252
- if i < len (v .keys ) && key == v .keys [i ] {
253
- v .keys = append (v .keys [:i ], v .keys [i + 1 :]... )
254
- v .m .Delete (key )
249
+ i , found := slices .BinarySearch (v .keys , key )
250
+ if found {
251
+ v .keys = slices .Delete (v .keys , i , i + 1 )
255
252
}
256
253
}
257
254
@@ -318,7 +315,7 @@ func Publish(name string, v Var) {
318
315
vars .keysMu .Lock ()
319
316
defer vars .keysMu .Unlock ()
320
317
vars .keys = append (vars .keys , name )
321
- sort . Strings (vars .keys )
318
+ slices . Sort (vars .keys )
322
319
}
323
320
324
321
// Get retrieves a named exported variable. It returns nil if the name has
0 commit comments