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  }