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.