github.com/grafana/pyroscope@v1.18.0/pkg/iter/tree.go (about)

     1  package iter
     2  
     3  import (
     4  	"github.com/grafana/pyroscope/pkg/util/loser"
     5  )
     6  
     7  var _ Iterator[interface{}] = &TreeIterator[interface{}]{}
     8  
     9  type TreeIterator[T any] struct {
    10  	*loser.Tree[T, Iterator[T]]
    11  }
    12  
    13  // NewTreeIterator returns an Iterator that iterates over the given loser tree iterator.
    14  func NewTreeIterator[T any](tree *loser.Tree[T, Iterator[T]]) *TreeIterator[T] {
    15  	return &TreeIterator[T]{
    16  		Tree: tree,
    17  	}
    18  }
    19  
    20  func (it TreeIterator[T]) At() T {
    21  	return it.Tree.Winner().At()
    22  }
    23  
    24  func (it *TreeIterator[T]) Err() error {
    25  	return it.Tree.Winner().Err()
    26  }
    27  
    28  func (it *TreeIterator[T]) Close() error {
    29  	it.Tree.Close()
    30  	return nil
    31  }