]> Cypherpunks repositories - keks.git/commitdiff
Tiny optimisation of bad map keys check
authorSergey Matveev <stargrave@stargrave.org>
Tue, 21 Jan 2025 08:40:14 +0000 (11:40 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Mon, 10 Feb 2025 15:39:44 +0000 (18:39 +0300)
go/encode.go

index ae741be0308f6b6d03020e6ddafc65fb4d00895c488fc51147c555ada48a3b52..aca17b6e8e8a355f13ba52430ec7b03164d18e3b9e24b42ef6076982d459add2 100644 (file)
@@ -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))