github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/skl/skl_iterator.go (about) 1 package skl 2 3 type sklIter struct { 4 s *skl 5 node *element 6 } 7 8 func (it *sklIter) First() (ok bool) { 9 nele := it.s.links[0].next 10 if nele != nil { 11 ok = true 12 it.node = nele 13 } 14 return 15 } 16 17 func (it *sklIter) SeekGE(key int64) (ok bool) { 18 19 prevs := it.s.getPrevLinks(key) 20 21 ele := prevs[0].next 22 if ele != nil { 23 ok = true 24 it.node = ele 25 } 26 27 return 28 } 29 30 func (it *sklIter) Next() (ok bool) { 31 ele := it.node.links[0].next 32 if ele != nil { 33 ok = true 34 it.node = ele 35 } 36 return 37 } 38 39 func (it *sklIter) Valid() bool { 40 return it.node != nil 41 } 42 43 func (it *sklIter) Key() int64 { 44 return it.node.key 45 } 46 47 func (it *sklIter) KeyValue() (int64, interface{}) { 48 return it.node.key, it.node.value 49 }