From 800322969612ee461c3328a768881bdeb7bed90f Mon Sep 17 00:00:00 2001 From: Leither Date: Tue, 1 Dec 2015 08:50:42 +0800 Subject: [PATCH] LPut LPut add --- ledis/t_list.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/ledis/t_list.go b/ledis/t_list.go index 079498e..33c0c04 100644 --- a/ledis/t_list.go +++ b/ledis/t_list.go @@ -321,6 +321,37 @@ func (db *DB) LPop(key []byte) ([]byte, error) { func (db *DB) LPush(key []byte, args ...[]byte) (int64, error) { return db.lpush(key, listHeadSeq, args...) } +func (db *DB) LSet(key []byte, index int32, value []byte) error { + if err := checkKeySize(key); err != nil { + return err + } + + var seq int32 + var headSeq int32 + var tailSeq int32 + //var size int32 + var err error + t := db.listBatch + t.Lock() + defer t.Unlock() + metaKey := db.lEncodeMetaKey(key) + + headSeq, tailSeq, _, err = db.lGetMeta(nil, metaKey) + if err != nil { + return err + } + + if index >= 0 { + seq = headSeq + index + } else { + seq = tailSeq + index + 1 + } + + sk := db.lEncodeListKey(key, seq) + t.Put(sk, value) + err = t.Commit() + return err +} func (db *DB) LRange(key []byte, start int32, stop int32) ([][]byte, error) { if err := checkKeySize(key); err != nil {