raphtory_storage/graph/edges/
edge_entry.rs1use 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}