added WriteVarInt64 ReadVarInt64

This commit is contained in:
2026-06-08 15:56:02 +03:00
parent 101b10d92a
commit 78363e9036
3 changed files with 76 additions and 15 deletions

View File

@@ -3,7 +3,6 @@ package bin
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"math"
"strconv" "strconv"
"testing" "testing"
"time" "time"
@@ -655,7 +654,11 @@ func TestInt32(t *testing.T) {
byteOrder := HL byteOrder := HL
err := WriteInt32(buf, ^math.MaxInt32, byteOrder) //var origin int32 = -2147483648
//var origin int32 = math.MaxInt32
var origin int32 = 12141132
err := WriteInt32(buf, origin, byteOrder)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View File

@@ -917,7 +917,24 @@ func GetBool(a []byte) (bool, error) {
} }
} }
// VAR func WriteBool(w io.Writer, flag bool) (err error) {
var b byte
if flag {
b = 1
}
_, err = w.Write([]byte{b})
return
}
func ReadBool(src io.Reader) (bool, error) {
b, err := ReadByte(src)
if err != nil {
return false, err
}
return b == 1, nil
}
// WRITE & READ VAR INT/UINT
// WriteVarUint32 - записывает в Writer от 1 до 5 байт, возвращает количество // WriteVarUint32 - записывает в Writer от 1 до 5 байт, возвращает количество
// записанных байт. Порядок байт - от младшего к старшему. Значение последнего // записанных байт. Порядок байт - от младшего к старшему. Значение последнего
@@ -940,7 +957,7 @@ func WriteVarUint32(w io.Writer, num uint32) (i int) {
// ReadVarUint32 - читает из io.Reader от 1 до 5 байт, и декодирует их в uint32. // ReadVarUint32 - читает из io.Reader от 1 до 5 байт, и декодирует их в uint32.
func ReadVarUint32(src io.Reader) (num uint32, err error) { func ReadVarUint32(src io.Reader) (num uint32, err error) {
var b byte var b byte
for i := 0; i < 5; i++ { for i := range 5 {
b, err = ReadByte(src) b, err = ReadByte(src)
if err != nil { if err != nil {
return return
@@ -997,21 +1014,16 @@ func ReadVarUint64(src io.Reader) (num uint64, err error) {
return return
} }
func WriteBool(w io.Writer, flag bool) (err error) { func WriteVarInt64(w io.Writer, num int64) (int, error) {
var b byte return WriteVarUint64(w, EncodeZigZag(num))
if flag {
b = 1
}
_, err = w.Write([]byte{b})
return
} }
func ReadBool(src io.Reader) (bool, error) { func ReadVarInt64(r io.Reader) (int64, error) {
b, err := ReadByte(src) u64, err := ReadVarUint64(r)
if err != nil { if err != nil {
return false, err return 0, err
} }
return b == 1, nil return DecodeZigZag(u64), nil
} }
// READ/WRITE VAR SIZE // READ/WRITE VAR SIZE

View File

@@ -907,6 +907,52 @@ func TestPutGetVarUint64(t *testing.T) {
} }
} }
// WRITE & READ VAR UINT64
func TestWriteReadVarUint64(t *testing.T) {
for _, testCase := range varUint64TestCases {
w := bytes.NewBuffer(nil)
putCount, err := WriteVarUint64(w, testCase.Num)
if err != nil {
t.Fatalf("put %d: %s\n", testCase.Num, err)
}
decoded, err := ReadVarUint64(w)
if err != nil {
t.Fatalf("get %d: %s\n", testCase.Num, err)
}
if decoded != testCase.Num {
t.Fatalf("num %d not equal decoded %d", testCase.Num, decoded)
}
if putCount != testCase.Count {
t.Fatalf("count %d not equal put count %d of num %d",
testCase.Count, putCount, testCase.Num)
}
}
}
// WRITE & READ VAR INT64
func TestWriteReadVarInt64(t *testing.T) {
for _, testCase := range varInt64TestCases {
w := bytes.NewBuffer(nil)
putCount, err := WriteVarInt64(w, testCase.Num)
if err != nil {
t.Fatalf("put %d: %s\n", testCase.Num, err)
}
decoded, err := ReadVarInt64(w)
if err != nil {
t.Fatalf("get %d: %s\n", testCase.Num, err)
}
if decoded != testCase.Num {
t.Fatalf("num %d not equal decoded %d", testCase.Num, decoded)
}
if putCount != testCase.Count {
t.Fatalf("count %d not equal put count %d of num %d",
testCase.Count, putCount, testCase.Num)
}
}
}
// WRITE & READ VAR SIZE // WRITE & READ VAR SIZE
func TestWriteReadVarSize(t *testing.T) { func TestWriteReadVarSize(t *testing.T) {