This repository has been archived on 2022-07-30. You can view files and clone it, but cannot push or open issues/pull-requests.
mdb/btreeiterator.go

45 lines
703 B
Go

package mdb
type BTreeIterator[T any] struct {
out chan *T
close chan struct{}
current *T
}
func newBTreeIterator[T any]() *BTreeIterator[T] {
return &BTreeIterator[T]{
out: make(chan *T),
close: make(chan struct{}, 1),
}
}
func (iter *BTreeIterator[T]) each(i *T) bool {
select {
case iter.out <- i:
return true
case <-iter.close:
return false
}
}
func (iter *BTreeIterator[T]) done() {
close(iter.out)
}
func (iter *BTreeIterator[T]) Next() bool {
val, ok := <-iter.out
if ok {
iter.current = val
return true
}
return false
}
func (iter *BTreeIterator[T]) Close() {
iter.close <- struct{}{}
}
func (iter *BTreeIterator[T]) Value() T {
return *iter.current
}