Skip to main content

raphtory_api/core/entities/properties/
tprop.rs

1use crate::core::{
2    entities::properties::prop::Prop,
3    storage::timeindex::{AsTime, EventTime},
4};
5use std::ops::Range;
6
7pub trait TPropOps<'a>: Clone + Send + Sync + Sized + 'a {
8    fn active(&self, w: Range<EventTime>) -> bool {
9        self.clone().iter_window(w).next().is_some()
10    }
11
12    /// Is there any event in this window
13    fn active_t(&self, w: Range<i64>) -> bool {
14        self.clone().iter_window_t(w).next().is_some()
15    }
16
17    fn last_before(&self, t: EventTime) -> Option<(EventTime, Prop)> {
18        self.clone().iter_inner_rev(Some(EventTime::MIN..t)).next()
19    }
20
21    fn last_window(&self, w: Range<EventTime>) -> Option<(EventTime, Prop)>;
22
23    fn last(&self) -> Option<(EventTime, Prop)>;
24
25    fn iter_inner(
26        self,
27        range: Option<Range<EventTime>>,
28    ) -> impl Iterator<Item = (EventTime, Prop)> + Send + Sync + 'a;
29
30    fn iter_inner_rev(
31        self,
32        range: Option<Range<EventTime>>,
33    ) -> impl Iterator<Item = (EventTime, Prop)> + Send + Sync + 'a;
34
35    fn iter(self) -> impl Iterator<Item = (EventTime, Prop)> + Send + Sync + 'a {
36        self.iter_inner(None)
37    }
38
39    fn iter_rev(self) -> impl Iterator<Item = (EventTime, Prop)> + Send + Sync + 'a {
40        self.iter_inner_rev(None)
41    }
42
43    fn iter_window(
44        self,
45        r: Range<EventTime>,
46    ) -> impl Iterator<Item = (EventTime, Prop)> + Send + Sync + 'a {
47        self.iter_inner(Some(r))
48    }
49
50    fn iter_window_rev(
51        self,
52        r: Range<EventTime>,
53    ) -> impl Iterator<Item = (EventTime, Prop)> + Send + Sync + 'a {
54        self.iter_inner_rev(Some(r))
55    }
56
57    fn iter_t(self) -> impl Iterator<Item = (i64, Prop)> + Send + Sync + 'a {
58        self.iter().map(|(t, v)| (t.t(), v))
59    }
60
61    fn iter_window_t(self, r: Range<i64>) -> impl Iterator<Item = (i64, Prop)> + Send + Sync + 'a {
62        self.iter_window(EventTime::range(r))
63            .map(|(t, v)| (t.t(), v))
64    }
65
66    fn iter_window_te(
67        self,
68        r: Range<EventTime>,
69    ) -> impl Iterator<Item = (i64, Prop)> + Send + Sync + 'a {
70        self.iter_window(r).map(|(t, v)| (t.t(), v))
71    }
72
73    fn at(&self, ti: &EventTime) -> Option<Prop>;
74}