From 6888f8fd5b7b38b68b76c42a4abbceb26901a07a Mon Sep 17 00:00:00 2001 From: edipretoro Date: Mon, 20 Jul 2026 07:03:18 +0200 Subject: [PATCH] Solving the challenge 0102 --- 0102/kv_entry.go | 49 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/0102/kv_entry.go b/0102/kv_entry.go index bd356fd..a0d427f 100644 --- a/0102/kv_entry.go +++ b/0102/kv_entry.go @@ -1,6 +1,8 @@ package db0102 import ( + "encoding/binary" + "errors" "io" ) @@ -9,8 +11,51 @@ type Entry struct { val []byte } -func (ent *Entry) Encode() []byte +func (ent *Entry) Encode() []byte { + data := make([]byte, 4+4+len(ent.key)+len(ent.val)) + binary.LittleEndian.PutUint32(data[0:4], uint32(len(ent.key))) + binary.LittleEndian.PutUint32(data[4:8], uint32(len(ent.val))) + copy(data[8:], ent.key) + copy(data[8+len(ent.key):], ent.val) + return data +} -func (ent *Entry) Decode(r io.Reader) error +func (ent *Entry) Decode(r io.Reader) error { + key_len := make([]byte, 4) + s, err := r.Read(key_len) + if err != nil { + return err + } + if s != 4 { + return errors.New("invalid size when reading key length") + } + val_len := make([]byte, 4) + s, err = r.Read(val_len) + if err != nil { + return err + } + if s != 4 { + return errors.New("invalid size when reading val length") + } + key_data := make([]byte, binary.LittleEndian.Uint32(key_len)) + s, err = r.Read(key_data) + if err != nil { + return err + } + if s != int(binary.LittleEndian.Uint32(key_len)) { + return errors.New("invalid size when reading key data") + } + val_data := make([]byte, binary.LittleEndian.Uint32(val_len)) + s, err = r.Read(val_data) + if err != nil { + return err + } + if s != int(binary.LittleEndian.Uint32(val_len)) { + return errors.New("invalid size when reading val data") + } + ent.key = key_data + ent.val = val_data + return nil +} // QzBQWVJJOUhU https://trialofcode.org/