]> git.lizzy.rs Git - mtmap.git/commitdiff
Improve node id mapping serialization performance v0.2.0
authorElias Fleckenstein <eliasfleckenstein@web.de>
Sat, 16 Jul 2022 19:25:37 +0000 (21:25 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Sat, 16 Jul 2022 19:25:37 +0000 (21:25 +0200)
deserialize.go
serialize.go

index c59837c2a4b86d1821bb2ac30a1e0868a99c4769..8722bd7fc95e55bf4ff80fe7baaa18ab658e9a67 100644 (file)
@@ -223,7 +223,7 @@ func Deserialize(r io.Reader, idNameMap map[string]mt.Content) *MapBlk {
                panic(err)
        }
 
-       nameIdMap := make(map[mt.Content]string)
+       var nameIdMap = make(map[mt.Content]string)
 
        for i := uint16(0); i < nameIdMapCount; i++ {
                var id mt.Content
index 4ec2b94186cdd179b8fad1080521c83bb38455f2..4001dc7535dd22606e71e9568c1c4feaf9efd517 100644 (file)
@@ -8,7 +8,7 @@ import (
        "io"
 )
 
-func Serialize(blk *MapBlk, w io.Writer, idNameMap map[string]mt.Content) {
+func Serialize(blk *MapBlk, w io.Writer, nameIdMap map[mt.Content]string) {
        if err := binary.Write(w, binary.BigEndian, &SerializeVer); err != nil {
                panic(err)
        }
@@ -151,21 +151,21 @@ func Serialize(blk *MapBlk, w io.Writer, idNameMap map[string]mt.Content) {
                panic(err)
        }
 
-       var exists = make(map[mt.Content]struct{})
+       var localNameIdMap = make(map[mt.Content]string)
        for i := 0; i < 4096; i++ {
-               exists[blk.Param0[i]] = struct{}{}
+               if _, ok := localNameIdMap[blk.Param0[i]]; ok {
+                       continue
+               }
+
+               localNameIdMap[blk.Param0[i]] = nameIdMap[blk.Param0[i]]
        }
 
-       var nameIdMapCount = uint16(len(exists))
+       var nameIdMapCount = uint16(len(localNameIdMap))
        if err := binary.Write(w, binary.BigEndian, &nameIdMapCount); err != nil {
                panic(err)
        }
 
-       for name, id := range idNameMap {
-               if _, ok := exists[id]; !ok {
-                       continue
-               }
-
+       for id, name := range localNameIdMap {
                if err := binary.Write(w, binary.BigEndian, &id); err != nil {
                        panic(err)
                }