From: Sergey Matveev Date: Tue, 21 Jan 2025 08:40:14 +0000 (+0300) Subject: Tiny optimisation of bad map keys check X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ca68a945d87409a8315916ebb2e42de7cbc257024e60ccb030c30663e2d6ffb8;p=keks.git Tiny optimisation of bad map keys check --- diff --git a/go/encode.go b/go/encode.go index ae741be..aca17b6 100644 --- a/go/encode.go +++ b/go/encode.go @@ -153,22 +153,28 @@ func Encode(w io.Writer, v any, opts *EncodeOpts) (written int64, err error) { } written++ keys := vv.MapKeys() - sort.Sort(keksort.ByLenFirstRV(keys)) - var n64 int64 - for _, k := range keys { - if k.Kind() != reflect.String || k.String() == "" { + if len(keys) > 0 { + sort.Sort(keksort.ByLenFirstRV(keys)) + if keys[0].String() == "" { err = ErrMapBadKey return } - n64, err = StrEncode(w, k.String()) - written += n64 - if err != nil { - return - } - n64, err = Encode(w, vv.MapIndex(k).Interface(), opts) - written += n64 - if err != nil { - return + var n64 int64 + for _, k := range keys { + if k.Kind() != reflect.String { + err = ErrMapBadKey + return + } + n64, err = StrEncode(w, k.String()) + written += n64 + if err != nil { + return + } + n64, err = Encode(w, vv.MapIndex(k).Interface(), opts) + written += n64 + if err != nil { + return + } } } _, err = ByteEncode(w, byte(AtomEOC))