forked from mirror/ledisdb
63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package ledis
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"errors"
|
|
)
|
|
|
|
var (
|
|
errBinLogDeleteType = errors.New("invalid bin log delete type")
|
|
errBinLogPutType = errors.New("invalid bin log put type")
|
|
errBinLogCommandType = errors.New("invalid bin log command type")
|
|
)
|
|
|
|
func encodeBinLogDelete(key []byte) []byte {
|
|
buf := make([]byte, 1+len(key))
|
|
buf[0] = BinLogTypeDeletion
|
|
copy(buf[1:], key)
|
|
return buf
|
|
}
|
|
|
|
func decodeBinLogDelete(sz []byte) ([]byte, error) {
|
|
if len(sz) < 1 || sz[0] != BinLogTypeDeletion {
|
|
return nil, errBinLogDeleteType
|
|
}
|
|
|
|
return sz[1:], nil
|
|
}
|
|
|
|
func encodeBinLogPut(key []byte, value []byte) []byte {
|
|
buf := make([]byte, 3+len(key)+len(value))
|
|
buf[0] = BinLogTypePut
|
|
pos := 1
|
|
binary.BigEndian.PutUint16(buf[pos:], uint16(len(key)))
|
|
pos += 2
|
|
copy(buf[pos:], key)
|
|
pos += len(key)
|
|
copy(buf[pos:], value)
|
|
|
|
return buf
|
|
}
|
|
|
|
func decodeBinLogPut(sz []byte) ([]byte, []byte, error) {
|
|
if len(sz) < 3 || sz[0] != BinLogTypePut {
|
|
return nil, nil, errBinLogPutType
|
|
}
|
|
|
|
keyLen := int(binary.BigEndian.Uint16(sz[1:]))
|
|
if 3+keyLen > len(sz) {
|
|
return nil, nil, errBinLogPutType
|
|
}
|
|
|
|
return sz[3 : 3+keyLen], sz[3+keyLen:], nil
|
|
}
|
|
|
|
func encodeBinLogCommand(commandType uint8, args ...[]byte) []byte {
|
|
//to do
|
|
return nil
|
|
}
|
|
|
|
func decodeBinLogCommand(sz []byte) (uint8, [][]byte, error) {
|
|
return 0, nil, errBinLogCommandType
|
|
}
|