size.go 596 B

123456789101112131415161718192021222324252627282930313233
  1. package protocol
  2. import (
  3. "math/bits"
  4. )
  5. func sizeOfVarString(s string) int {
  6. return sizeOfVarInt(int64(len(s))) + len(s)
  7. }
  8. func sizeOfVarNullBytes(b []byte) int {
  9. if b == nil {
  10. return sizeOfVarInt(-1)
  11. }
  12. n := len(b)
  13. return sizeOfVarInt(int64(n)) + n
  14. }
  15. func sizeOfVarNullBytesIface(b Bytes) int {
  16. if b == nil {
  17. return sizeOfVarInt(-1)
  18. }
  19. n := b.Len()
  20. return sizeOfVarInt(int64(n)) + n
  21. }
  22. func sizeOfVarInt(i int64) int {
  23. return sizeOfUnsignedVarInt(uint64((i << 1) ^ (i >> 63))) // zig-zag encoding
  24. }
  25. func sizeOfUnsignedVarInt(i uint64) int {
  26. return (bits.Len64(i|1) + 6) / 7
  27. }