added put/get and write/read bool

This commit is contained in:
2025-09-11 11:06:45 +00:00
parent 654fcbb06b
commit 73642af14f
2 changed files with 82 additions and 0 deletions

View File

@@ -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
}

View File

@@ -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"