contractsdk/go/exec/kv_iterator.go
(开头部分) 1KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
package exec
import (
"github.com/xuperchain/xuperunion/contractsdk/go/code"
pb "github.com/xuperchain/xuperunion/contractsdk/go/pb"
)
var (
_ code.Iterator = (*kvIterator)(nil)
)
const MAX_ITERATOR_CAP = 100
// kvIterator is a private struct
type kvIterator struct {
buf []*pb.IteratorItem // current buffer of the kv items
curBuf *pb.IteratorItem // pointer of current position
curIdx int // next index
c *contractContext // where we can get the kv items
err error
start, limit []byte
}
// newkvIterator return a code.Iterator
func newKvIterator(c *contractContext, start, limit []byte) code.Iterator {
return &kvIterator{
start: start,
limit: limit,
c: c,
}
}
// load loads the data from xbrigde, called when buf is empty, maintains the curIdx and starter
func (ki *kvIterator) load() {
//clean the buf at beginning
ki.buf = ki.buf[0:0]
req := &pb.IteratorRequest{
Start: ki.start,
Limit: ki.limit,
Cap: MAX_ITERATOR_CAP,
Header: &ki.c.header,
}
resp := new(pb.IteratorResponse)
if err := ki.c.bridgeCallFunc("NewIterator", req, resp); err != nil {
ki.err = err
return
}
if len(resp.Items) == 0 {
ki.start = ki.limit
return
}
ki.curIdx = 0
ki.buf = resp.Items
ki.start = resp.Items[len(resp.Items)-1].Key
}
func (ki *kvIterator) Key() []byte {
return ki.curBuf.Key
}
后面还有 21 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
