added WriteVarInt64 ReadVarInt64
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user