standing_relations/convenience/
input.rs

1use crate::{
2    core::{CreationContext, ExecutionContext, InputOp},
3    Input_, Relation,
4};
5
6pub type Input<'a, D> = Input_<'a, (D, isize)>;
7pub type InputRelation<D> = Relation<InputOp<(D, isize)>>;
8
9impl<'a, D: Clone + 'a> Input<'a, D> {
10    pub fn update(&mut self, context: &ExecutionContext<'a>, x: D, r: isize) {
11        self.send(context, (x, r))
12    }
13    pub fn add(&mut self, context: &ExecutionContext<'a>, x: D) {
14        self.update(context, x, 1)
15    }
16    pub fn add_all(&mut self, context: &ExecutionContext<'a>, data: impl IntoIterator<Item = D>) {
17        self.send_all(context, data.into_iter().map(|x| (x, 1)).collect());
18    }
19    pub fn remove(&mut self, context: &ExecutionContext<'a>, x: D) {
20        self.update(context, x, -1)
21    }
22    pub fn remove_all(
23        &mut self,
24        context: &ExecutionContext<'a>,
25        data: impl IntoIterator<Item = D>,
26    ) {
27        self.send_all(context, data.into_iter().map(|x| (x, -1)).collect());
28    }
29}
30
31impl<'a> CreationContext<'a> {
32    pub fn new_input<D: 'a>(&mut self) -> (Input<'a, D>, InputRelation<D>) {
33        self.new_input_()
34    }
35}