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 Deferreds 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));