Function dogsdogsdogs::operators::half_join::half_join_internal_unsafe
source · pub fn half_join_internal_unsafe<G, K, V, R, Tr, FF, CF, DOut, ROut, Y, I, S>(
stream: &Collection<G, (K, V, G::Timestamp), R>,
arrangement: Arranged<G, Tr>,
frontier_func: FF,
comparison: CF,
yield_function: Y,
output_func: S,
) -> Collection<G, DOut, ROut>where
G: Scope<Timestamp = Tr::Time>,
K: Hashable + ExchangeData,
V: ExchangeData,
R: ExchangeData + Monoid,
Tr: TraceReader + Clone + 'static,
for<'a> Tr::Key<'a>: IntoOwned<'a, Owned = K>,
FF: Fn(&G::Timestamp, &mut Antichain<G::Timestamp>) + 'static,
CF: Fn(Tr::TimeGat<'_>, &Tr::Time) -> bool + 'static,
DOut: Clone + 'static,
ROut: Semigroup + 'static,
Y: Fn(Instant, usize) -> bool + 'static,
I: IntoIterator<Item = (DOut, G::Timestamp, ROut)>,
S: FnMut(&K, &V, Tr::Val<'_>, &G::Timestamp, &G::Timestamp, &R, &Tr::Diff) -> I + 'static,Expand description
An unsafe variant of half_join where the output_func closure takes
additional arguments for time and diff as input and returns an iterator
over (data, time, diff) triplets. This allows for more flexibility, but
is more error-prone.
This operator responds to inputs of the form
((key, val1, time1), initial_time, diff1)where initial_time is less or equal to time1, and produces as output
output_func(key, val1, val2, initial_time, lub(time1, time2), diff1, diff2)for each ((key, val2), time2, diff2) present in arrangement, where
time2 is less than initial_time UNDER THE TOTAL ORDER ON TIMES.
The yield_function allows the caller to indicate when the operator should
yield control, as a function of the elapsed time and the number of matched
records. Note this is not the number of output records, owing mainly to
the number of matched records being easiest to record with low overhead.