standing_relations/convenience/
feedback.rs

1use std::hash::Hash;
2
3use crate::{CreationContext, Op, Relation};
4
5impl<'a> CreationContext<'a> {
6    pub fn new() -> Self {
7        Self::new_()
8    }
9}
10
11impl<'a, K: Clone + Eq + Hash + 'a, V: Clone + Eq + Hash + 'a, C: Op<D = (K, V)> + 'a> Relation<C> {
12    pub fn first_occurences<I>(
13        self,
14        context: &mut CreationContext<'a, I>,
15    ) -> Relation<impl Op<D = (K, V)>> {
16        let (input, input_rel) = context.new_trackable_input();
17        let input_rel = input_rel.save();
18        let new_occurences = self.antijoin(input_rel.get().fsts()).into_output(context);
19        context.feed_while(new_occurences, input);
20        input_rel.get()
21    }
22}