Skip to main content

raphtory_storage/graph/edges/
edge_entry.rs

1use crate::graph::edges::{
2    edge_ref::EdgeStorageRef,
3    edge_storage_ops::{EdgeStorageOps, TimeIndexRef},
4};
5use raphtory_api::core::entities::{
6    properties::{prop::Prop, tprop::TPropOps},
7    LayerIds, EID, VID,
8};
9use raphtory_core::{entities::edges::edge_store::MemEdge, storage::raw_edges::EdgeRGuard};
10use rayon::prelude::*;
11use std::ops::Range;
12
13#[cfg(feature = "storage")]
14use crate::disk::graph_impl::DiskEdge;
15
16#[derive(Debug)]
17pub enum EdgeStorageEntry<'a> {
18    Mem(MemEdge<'a>),
19    Unlocked(EdgeRGuard<'a>),
20    #[cfg(feature = "storage")]
21    Disk(DiskEdge<'a>),
22}
23
24impl<'a> EdgeStorageEntry<'a> {
25    #[inline]
26    pub fn as_ref(&self) -> EdgeStorageRef<'_> {
27        match self {
28            EdgeStorageEntry::Mem(edge) => EdgeStorageRef::Mem(*edge),
29            EdgeStorageEntry::Unlocked(edge) => EdgeStorageRef::Mem(edge.as_mem_edge()),
30            #[cfg(feature = "storage")]
31            EdgeStorageEntry::Disk(edge) => EdgeStorageRef::Disk(*edge),
32        }
33    }
34}
35
36impl<'a, 'b: 'a> EdgeStorageOps<'a> for &'a EdgeStorageEntry<'b> {
37    fn added(self, layer_ids: &LayerIds, w: Range<i64>) -> bool {
38        self.as_ref().added(layer_ids, w)
39    }
40
41    fn has_layer(self, layer_ids: &LayerIds) -> bool {
42        self.as_ref().has_layer(layer_ids)
43    }
44
45    fn src(self) -> VID {
46        self.as_ref().src()
47    }
48
49    fn dst(self) -> VID {
50        self.as_ref().dst()
51    }
52
53    fn eid(self) -> EID {
54        self.as_ref().eid()
55    }
56
57    fn layer_ids_iter(self, layer_ids: &'a LayerIds) -> impl Iterator<Item = usize> + 'a {
58        self.as_ref().layer_ids_iter(layer_ids)
59    }
60
61    fn layer_ids_par_iter(self, layer_ids: &LayerIds) -> impl ParallelIterator<Item = usize> + 'a {
62        self.as_ref().layer_ids_par_iter(layer_ids)
63    }
64
65    fn additions_iter(
66        self,
67        layer_ids: &'a LayerIds,
68    ) -> impl Iterator<Item = (usize, TimeIndexRef<'a>)> + 'a {
69        self.as_ref().additions_iter(layer_ids)
70    }
71
72    fn additions_par_iter(
73        self,
74        layer_ids: &LayerIds,
75    ) -> impl ParallelIterator<Item = (usize, TimeIndexRef<'a>)> + 'a {
76        self.as_ref().additions_par_iter(layer_ids)
77    }
78
79    fn deletions_iter(
80        self,
81        layer_ids: &'a LayerIds,
82    ) -> impl Iterator<Item = (usize, TimeIndexRef<'a>)> + 'a {
83        self.as_ref().deletions_iter(layer_ids)
84    }
85
86    fn deletions_par_iter(
87        self,
88        layer_ids: &LayerIds,
89    ) -> impl ParallelIterator<Item = (usize, TimeIndexRef<'a>)> + 'a {
90        self.as_ref().deletions_par_iter(layer_ids)
91    }
92
93    fn updates_iter(
94        self,
95        layer_ids: &'a LayerIds,
96    ) -> impl Iterator<Item = (usize, TimeIndexRef<'a>, TimeIndexRef<'a>)> + 'a {
97        self.as_ref().updates_iter(layer_ids)
98    }
99
100    fn updates_par_iter(
101        self,
102        layer_ids: &LayerIds,
103    ) -> impl ParallelIterator<Item = (usize, TimeIndexRef<'a>, TimeIndexRef<'a>)> + 'a {
104        self.as_ref().updates_par_iter(layer_ids)
105    }
106
107    fn additions(self, layer_id: usize) -> TimeIndexRef<'a> {
108        self.as_ref().additions(layer_id)
109    }
110
111    fn deletions(self, layer_id: usize) -> TimeIndexRef<'a> {
112        self.as_ref().deletions(layer_id)
113    }
114
115    fn temporal_prop_layer(self, layer_id: usize, prop_id: usize) -> impl TPropOps<'a> + 'a {
116        self.as_ref().temporal_prop_layer(layer_id, prop_id)
117    }
118
119    fn temporal_prop_iter(
120        self,
121        layer_ids: &'a LayerIds,
122        prop_id: usize,
123    ) -> impl Iterator<Item = (usize, impl TPropOps<'a>)> + 'a {
124        self.as_ref().temporal_prop_iter(layer_ids, prop_id)
125    }
126
127    fn temporal_prop_par_iter(
128        self,
129        layer_ids: &LayerIds,
130        prop_id: usize,
131    ) -> impl ParallelIterator<Item = (usize, impl TPropOps<'a>)> + 'a {
132        self.as_ref().temporal_prop_par_iter(layer_ids, prop_id)
133    }
134
135    fn metadata_layer(self, layer_id: usize, prop_id: usize) -> Option<Prop> {
136        self.as_ref().metadata_layer(layer_id, prop_id)
137    }
138}