pub trait ReduceExt<G, Tr>{
// Required method
fn reduce_pair<L1, Bu1, T1, L2, Bu2, T2>(
&self,
name1: &str,
name2: &str,
logic1: L1,
logic2: L2,
) -> (Arranged<G, TraceAgent<T1>>, Arranged<G, TraceAgent<T2>>)
where T1: for<'a> Trace<Key<'a> = Tr::Key<'a>, KeyOwn = Tr::KeyOwn, ValOwn: Data, Time = G::Timestamp, Diff: Abelian> + 'static,
Bu1: Builder<Time = G::Timestamp, Input: Container + PushInto<((T1::KeyOwn, T1::ValOwn), T1::Time, T1::Diff)>, Output = T1::Batch>,
L1: FnMut(Tr::Key<'_>, &[(Tr::Val<'_>, Tr::Diff)], &mut Vec<(T1::ValOwn, T1::Diff)>) + 'static,
T2: for<'a> Trace<Key<'a> = Tr::Key<'a>, KeyOwn = Tr::KeyOwn, ValOwn: Data, Time = G::Timestamp, Diff: Abelian> + 'static,
Bu2: Builder<Time = G::Timestamp, Input: Container + PushInto<((T1::KeyOwn, T2::ValOwn), T2::Time, T2::Diff)>, Output = T2::Batch>,
L2: FnMut(Tr::Key<'_>, &[(Tr::Val<'_>, Tr::Diff)], &mut Vec<(T2::ValOwn, T2::Diff)>) + 'static,
Arranged<G, TraceAgent<T1>>: ArrangementSize,
Arranged<G, TraceAgent<T2>>: ArrangementSize;
}
Expand description
Extension trait for ReduceCore
, currently providing a reduction based
on an operator-pair approach.
Required Methods§
Sourcefn reduce_pair<L1, Bu1, T1, L2, Bu2, T2>(
&self,
name1: &str,
name2: &str,
logic1: L1,
logic2: L2,
) -> (Arranged<G, TraceAgent<T1>>, Arranged<G, TraceAgent<T2>>)where
T1: for<'a> Trace<Key<'a> = Tr::Key<'a>, KeyOwn = Tr::KeyOwn, ValOwn: Data, Time = G::Timestamp, Diff: Abelian> + 'static,
Bu1: Builder<Time = G::Timestamp, Input: Container + PushInto<((T1::KeyOwn, T1::ValOwn), T1::Time, T1::Diff)>, Output = T1::Batch>,
L1: FnMut(Tr::Key<'_>, &[(Tr::Val<'_>, Tr::Diff)], &mut Vec<(T1::ValOwn, T1::Diff)>) + 'static,
T2: for<'a> Trace<Key<'a> = Tr::Key<'a>, KeyOwn = Tr::KeyOwn, ValOwn: Data, Time = G::Timestamp, Diff: Abelian> + 'static,
Bu2: Builder<Time = G::Timestamp, Input: Container + PushInto<((T1::KeyOwn, T2::ValOwn), T2::Time, T2::Diff)>, Output = T2::Batch>,
L2: FnMut(Tr::Key<'_>, &[(Tr::Val<'_>, Tr::Diff)], &mut Vec<(T2::ValOwn, T2::Diff)>) + 'static,
Arranged<G, TraceAgent<T1>>: ArrangementSize,
Arranged<G, TraceAgent<T2>>: ArrangementSize,
fn reduce_pair<L1, Bu1, T1, L2, Bu2, T2>(
&self,
name1: &str,
name2: &str,
logic1: L1,
logic2: L2,
) -> (Arranged<G, TraceAgent<T1>>, Arranged<G, TraceAgent<T2>>)where
T1: for<'a> Trace<Key<'a> = Tr::Key<'a>, KeyOwn = Tr::KeyOwn, ValOwn: Data, Time = G::Timestamp, Diff: Abelian> + 'static,
Bu1: Builder<Time = G::Timestamp, Input: Container + PushInto<((T1::KeyOwn, T1::ValOwn), T1::Time, T1::Diff)>, Output = T1::Batch>,
L1: FnMut(Tr::Key<'_>, &[(Tr::Val<'_>, Tr::Diff)], &mut Vec<(T1::ValOwn, T1::Diff)>) + 'static,
T2: for<'a> Trace<Key<'a> = Tr::Key<'a>, KeyOwn = Tr::KeyOwn, ValOwn: Data, Time = G::Timestamp, Diff: Abelian> + 'static,
Bu2: Builder<Time = G::Timestamp, Input: Container + PushInto<((T1::KeyOwn, T2::ValOwn), T2::Time, T2::Diff)>, Output = T2::Batch>,
L2: FnMut(Tr::Key<'_>, &[(Tr::Val<'_>, Tr::Diff)], &mut Vec<(T2::ValOwn, T2::Diff)>) + 'static,
Arranged<G, TraceAgent<T1>>: ArrangementSize,
Arranged<G, TraceAgent<T2>>: ArrangementSize,
This method produces a reduction pair based on the same input arrangement. Each reduction in the pair operates with its own logic and the two output arrangements from the reductions are produced as a result. The method is useful for reductions that need to present different output views on the same input data. An example is producing an error-free reduction output along with a separate error output indicating when the error-free output is valid.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.