use binary.Varint instead of binary.ReadVarint in UnmarshalIdRefsBunch

master
Oliver Tonnhofer 2013-11-19 08:41:39 +01:00
parent 596f4de970
commit 95aa490208
1 changed files with 20 additions and 17 deletions

37
cache/binary/diff.go vendored
View File

@ -1,7 +1,6 @@
package binary package binary
import ( import (
"bytes"
"encoding/binary" "encoding/binary"
"imposm3/element" "imposm3/element"
@ -48,38 +47,42 @@ func MarshalIdRefsBunch(idRefs []element.IdRefs) []byte {
} }
func UnmarshalIdRefsBunch(buf []byte) []element.IdRefs { func UnmarshalIdRefsBunch(buf []byte) []element.IdRefs {
r := bytes.NewBuffer(buf) length, n := binary.Uvarint(buf)
n, err := binary.ReadUvarint(r) if n <= 0 {
if err != nil {
return nil return nil
} }
idRefs := make([]element.IdRefs, n) offset := n
idRefs := make([]element.IdRefs, length)
last := int64(0) last := int64(0)
for i := 0; uint64(i) < n; i++ { for i := 0; uint64(i) < length; i++ {
idRefs[i].Id, err = binary.ReadVarint(r) idRefs[i].Id, n = binary.Varint(buf[offset:])
if err != nil { if n <= 0 {
panic(err) panic("no data")
} }
offset += n
idRefs[i].Id += last idRefs[i].Id += last
last = idRefs[i].Id last = idRefs[i].Id
} }
var numRefs uint64 var numRefs uint64
for i := 0; uint64(i) < n; i++ { for i := 0; uint64(i) < length; i++ {
numRefs, err = binary.ReadUvarint(r) numRefs, n = binary.Uvarint(buf[offset:])
if err != nil { if n <= 0 {
panic(err) panic("no data")
} }
offset += n
idRefs[i].Refs = make([]int64, numRefs) idRefs[i].Refs = make([]int64, numRefs)
} }
last = 0 last = 0
for idIdx := 0; uint64(idIdx) < n; idIdx++ { for idIdx := 0; uint64(idIdx) < length; idIdx++ {
for refIdx := 0; refIdx < len(idRefs[idIdx].Refs); refIdx++ { for refIdx := 0; refIdx < len(idRefs[idIdx].Refs); refIdx++ {
idRefs[idIdx].Refs[refIdx], err = binary.ReadVarint(r) idRefs[idIdx].Refs[refIdx], n = binary.Varint(buf[offset:])
if err != nil { if n <= 0 {
panic(err) panic("no data")
} }
offset += n
idRefs[idIdx].Refs[refIdx] += last idRefs[idIdx].Refs[refIdx] += last
last = idRefs[idIdx].Refs[refIdx] last = idRefs[idIdx].Refs[refIdx]
} }