34 lines
784 B
Go
34 lines
784 B
Go
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
|
|
}
|