Function tange::deferred::tree_reduce_until
source · pub fn tree_reduce_until<A: Any + Send + Sync + Clone, F: 'static + Sync + Send + Clone + Fn(&A, &A) -> A>(
defs: &[Deferred<A>],
parts: usize,
f: F
) -> Option<Vec<Deferred<A>>>
Expand description
tree_reduce_until
is similar to tree_reduce
except that it will stop reducing
when the number of Deferred
s left is less than or equal to parts
.
use tange::deferred::{Deferred, tree_reduce_until};
use tange::scheduler::GreedyScheduler;
let vec: Vec<_> = (0usize..8)
.map(|v| Deferred::lift(v, None)).collect();
let out = tree_reduce_until(&vec, 2, |left, right| left + right).unwrap();
assert_eq!(out.len(), 2);
assert_eq!(out[0].run(&GreedyScheduler::new()), Some(0+1+2+3));