standing_relations/convenience/
input.rs1use 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}