use binary.Varint instead of binary.ReadVarint in UnmarshalIdRefsBunch
parent
596f4de970
commit
95aa490208
|
@ -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]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue