status-go/vendor/github.com/anacrolix/missinggo/v2/iter/func.go

34 lines
784 B
Go
Raw Normal View History

2022-03-10 09:44:48 +00:00
package iter
// Callback receives a value and returns true if another value should be
// received or false to stop iteration.
type Callback func(value interface{}) (more bool)
// Func iterates by calling Callback for each of its values.
type Func func(Callback)
func All(cb Callback, fs ...Func) bool {
for _, f := range fs {
all := true
f(func(v interface{}) bool {
all = all && cb(v)
return all
})
if !all {
return false
}
}
return true
}
// Calls `cb` with the first value yielded by `f` and then stops iteration. `ok` if `cb` was called
// with a value. Returning the value interface{} would require the caller to keep a
func First(f Func) (value interface{}, ok bool) {
f(func(x interface{}) bool {
value = x
ok = true
return false
})
return
}