1use oxigraph::model::Quad;
2use std::collections::HashSet;
3
4#[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#[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}