rsp_rs/
quad_container.rs

1use oxigraph::model::Quad;
2use std::collections::HashSet;
3
4// Representing a container for RDF Quads in the Window.
5#[derive(Debug, Clone)]
6pub struct QuadContainer {
7    pub elements: HashSet<Quad>,
8    pub last_timestamp_changed: i64,
9}
10
11impl QuadContainer {
12    pub fn new(elements: HashSet<Quad>, ts: i64) -> Self {
13        Self {
14            elements,
15            last_timestamp_changed: ts,
16        }
17    }
18
19    pub fn len(&self) -> usize {
20        self.elements.len()
21    }
22
23    pub fn add(&mut self, quad: Quad, ts: i64) {
24        self.elements.insert(quad);
25        self.last_timestamp_changed = ts;
26    }
27
28    pub fn is_empty(&self) -> bool {
29        self.elements.is_empty()
30    }
31
32    pub fn remove(&mut self, quad: &Quad, ts: i64) {
33        self.elements.remove(quad);
34        self.last_timestamp_changed = ts;
35    }
36
37    pub fn contains(&self, quad: &Quad) -> bool {
38        self.elements.contains(quad)
39    }
40
41    pub fn clear(&mut self, ts: i64) {
42        self.elements.clear();
43        self.last_timestamp_changed = ts;
44    }
45}
46
47// Example usage of the Quad Container class.
48#[cfg(test)]
49mod tests {
50    use super::*;
51    use oxigraph::model::{Literal, NamedNode};
52
53    #[test]
54    fn test_quad_container() {
55        let mut container = QuadContainer::new(HashSet::new(), 0);
56
57        let quad1 = Quad::new(
58            NamedNode::new("http://example.org/subject1").unwrap(),
59            NamedNode::new("http://example.org/predicate1").unwrap(),
60            Literal::new_simple_literal("object1"),
61            NamedNode::new("http://example.org/graph1").unwrap(),
62        );
63
64        let quad2 = Quad::new(
65            NamedNode::new("http://example.org/subject2").unwrap(),
66            NamedNode::new("http://example.org/predicate2").unwrap(),
67            Literal::new_simple_literal("object2"),
68            NamedNode::new("http://example.org/graph2").unwrap(),
69        );
70
71        container.add(quad1.clone(), 1);
72        assert_eq!(container.len(), 1);
73        assert!(container.contains(&quad1));
74
75        container.add(quad2.clone(), 2);
76        assert_eq!(container.len(), 2);
77        assert!(container.contains(&quad2));
78
79        container.remove(&quad1, 3);
80        assert_eq!(container.len(), 1);
81        assert!(!container.contains(&quad1));
82
83        container.clear(4);
84        assert_eq!(container.len(), 0);
85        assert!(container.is_empty());
86    }
87}