github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/iavl/fast_iterator_okc.go (about)

     1  package iavl
     2  
     3  import dbm "github.com/fibonacci-chain/fbc/libs/tm-db"
     4  
     5  type FastIteratorWithCache struct {
     6  	*UnsavedFastIterator
     7  }
     8  
     9  var _ dbm.Iterator = (*FastIteratorWithCache)(nil)
    10  
    11  func NewFastIteratorWithCache(start, end []byte, ascending bool, ndb *nodeDB) *FastIteratorWithCache {
    12  	iter := &FastIteratorWithCache{
    13  		UnsavedFastIterator: &UnsavedFastIterator{},
    14  	}
    15  
    16  	if ndb == nil {
    17  		iter.UnsavedFastIterator = newUnsavedFastIterator(start, end, ascending, ndb, nil, nil)
    18  		return iter
    19  	}
    20  	var fnc *fastNodeChanges
    21  
    22  	if ndb.tpfv != nil {
    23  		fnc = ndb.tpfv.expand(ndb.prePersistFastNode)
    24  	} else {
    25  		fnc = ndb.prePersistFastNode.clone()
    26  	}
    27  
    28  	iter.UnsavedFastIterator = newUnsavedFastIterator(start, end, ascending, ndb, fnc.additions, fnc.removals)
    29  
    30  	return iter
    31  }