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
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
// GetInt16 - читает из массива 2 байта и декодирует их в int16.
|
||||
@@ -893,6 +905,17 @@ func GetString16(a []byte) (string, error) {
|
||||
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
|
||||
|
||||
// WriteVarUint32 - записывает в Writer от 1 до 5 байт, возвращает количество
|
||||
@@ -990,6 +1013,15 @@ func WriteVarSize(w io.Writer, n int) (int, error) {
|
||||
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) {
|
||||
var (
|
||||
b byte
|
||||
@@ -1014,3 +1046,11 @@ func ReadVarSize(src io.Reader) (_ int, err error) {
|
||||
num |= uint64(b) << 56
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
||||
|
||||
Reference in New Issue
Block a user