added put/get and write/read bool
This commit is contained in:
@@ -710,6 +710,18 @@ func PutString16(a []byte, str string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func PutBool(a []byte, flag bool) error {
|
||||||
|
if len(a) == 0 {
|
||||||
|
return ErrNoSpace
|
||||||
|
}
|
||||||
|
if flag {
|
||||||
|
a[0] = 1
|
||||||
|
} else {
|
||||||
|
a[0] = 0
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// GET
|
// GET
|
||||||
|
|
||||||
// GetInt16 - читает из массива 2 байта и декодирует их в int16.
|
// GetInt16 - читает из массива 2 байта и декодирует их в int16.
|
||||||
@@ -893,6 +905,17 @@ func GetString16(a []byte) (string, error) {
|
|||||||
return string(a[pSize:end]), nil
|
return string(a[pSize:end]), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetBool(a []byte) (bool, error) {
|
||||||
|
if len(a) == 0 {
|
||||||
|
return false, io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
if a[0] == 1 {
|
||||||
|
return true, nil
|
||||||
|
} else {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// VAR
|
// VAR
|
||||||
|
|
||||||
// WriteVarUint32 - записывает в Writer от 1 до 5 байт, возвращает количество
|
// WriteVarUint32 - записывает в Writer от 1 до 5 байт, возвращает количество
|
||||||
@@ -990,6 +1013,15 @@ func WriteVarSize(w io.Writer, n int) (int, error) {
|
|||||||
return w.Write(a)
|
return w.Write(a)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WriteBool(w io.Writer, flag bool) (err error) {
|
||||||
|
var b byte
|
||||||
|
if flag {
|
||||||
|
b = 1
|
||||||
|
}
|
||||||
|
_, err = w.Write([]byte{b})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func ReadVarSize(src io.Reader) (_ int, err error) {
|
func ReadVarSize(src io.Reader) (_ int, err error) {
|
||||||
var (
|
var (
|
||||||
b byte
|
b byte
|
||||||
@@ -1014,3 +1046,11 @@ func ReadVarSize(src io.Reader) (_ int, err error) {
|
|||||||
num |= uint64(b) << 56
|
num |= uint64(b) << 56
|
||||||
return int(num), nil
|
return int(num), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ReadBool(src io.Reader) (bool, error) {
|
||||||
|
b, err := ReadByte(src)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return b == 1, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -330,6 +330,25 @@ func TestPutGetString16(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PUT/GET BOOL
|
||||||
|
func TestPutGetBool(t *testing.T) {
|
||||||
|
flags := []bool{
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
}
|
||||||
|
for _, flag := range flags {
|
||||||
|
a := make([]byte, 1)
|
||||||
|
PutBool(a, flag)
|
||||||
|
decoded, err := GetBool(a)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if decoded != flag {
|
||||||
|
t.Fatalf("flag %t not equal decoded %t", flag, decoded)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// WRITE/READ INT
|
// WRITE/READ INT
|
||||||
|
|
||||||
func TestWriteReadInt16(t *testing.T) {
|
func TestWriteReadInt16(t *testing.T) {
|
||||||
@@ -661,6 +680,29 @@ func TestWriteReadString16(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WRITE/READ BOOL
|
||||||
|
|
||||||
|
func TestWriteReadBool(t *testing.T) {
|
||||||
|
flags := []bool{
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
}
|
||||||
|
for _, flag := range flags {
|
||||||
|
w := bytes.NewBuffer(nil)
|
||||||
|
err := WriteBool(w, flag)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
decoded, err := ReadBool(w)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if decoded != flag {
|
||||||
|
t.Fatalf("flag %t not equal decoded %t", flag, decoded)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// HELPERS
|
// HELPERS
|
||||||
|
|
||||||
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
||||||
|
|||||||
Reference in New Issue
Block a user