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 }