From 73642af14faf875ba5a469f5865328abd5d6b3f1 Mon Sep 17 00:00:00 2001 From: dima <1.e4.kc6@gmail.com> Date: Thu, 11 Sep 2025 11:06:45 +0000 Subject: [PATCH] added put/get and write/read bool --- little/little.go | 40 ++++++++++++++++++++++++++++++++++++++++ little/little_test.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/little/little.go b/little/little.go index bf31207..b160059 100644 --- a/little/little.go +++ b/little/little.go @@ -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 +} diff --git a/little/little_test.go b/little/little_test.go index a954257..0f29cea 100644 --- a/little/little_test.go +++ b/little/little_test.go @@ -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"