Solving the challenge 0102
This commit is contained in:
+47
-2
@@ -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/
|
||||
|
||||
Reference in New Issue
Block a user