You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
596 B
33 lines
596 B
package protocol
|
|
|
|
import (
|
|
"math/bits"
|
|
)
|
|
|
|
func sizeOfVarString(s string) int {
|
|
return sizeOfVarInt(int64(len(s))) + len(s)
|
|
}
|
|
|
|
func sizeOfVarNullBytes(b []byte) int {
|
|
if b == nil {
|
|
return sizeOfVarInt(-1)
|
|
}
|
|
n := len(b)
|
|
return sizeOfVarInt(int64(n)) + n
|
|
}
|
|
|
|
func sizeOfVarNullBytesIface(b Bytes) int {
|
|
if b == nil {
|
|
return sizeOfVarInt(-1)
|
|
}
|
|
n := b.Len()
|
|
return sizeOfVarInt(int64(n)) + n
|
|
}
|
|
|
|
func sizeOfVarInt(i int64) int {
|
|
return sizeOfUnsignedVarInt(uint64((i << 1) ^ (i >> 63))) // zig-zag encoding
|
|
}
|
|
|
|
func sizeOfUnsignedVarInt(i uint64) int {
|
|
return (bits.Len64(i|1) + 6) / 7
|
|
}
|
|
|