raphtory_storage/mutation/
deletion_ops.rs1use crate::{graph::graph::GraphStorage, mutation::MutationError};
2use raphtory_api::{
3 core::{
4 entities::{EID, VID},
5 storage::{dict_mapper::MaybeNew, timeindex::TimeIndexEntry},
6 },
7 inherit::Base,
8};
9use raphtory_core::entities::graph::tgraph::TemporalGraph;
10
11pub trait InternalDeletionOps {
12 type Error: From<MutationError>;
13 fn internal_delete_edge(
14 &self,
15 t: TimeIndexEntry,
16 src: VID,
17 dst: VID,
18 layer: usize,
19 ) -> Result<MaybeNew<EID>, Self::Error>;
20 fn internal_delete_existing_edge(
21 &self,
22 t: TimeIndexEntry,
23 eid: EID,
24 layer: usize,
25 ) -> Result<(), Self::Error>;
26}
27
28impl InternalDeletionOps for TemporalGraph {
29 type Error = MutationError;
30
31 fn internal_delete_edge(
32 &self,
33 t: TimeIndexEntry,
34 src: VID,
35 dst: VID,
36 layer: usize,
37 ) -> Result<MaybeNew<EID>, Self::Error> {
38 let edge = self.link_nodes(src, dst, t, layer, true);
39 Ok(edge.map(|mut edge| {
40 let mut edge = edge.as_mut();
41 edge.deletions_mut(layer).insert(t);
42 edge.eid()
43 }))
44 }
45
46 fn internal_delete_existing_edge(
47 &self,
48 t: TimeIndexEntry,
49 eid: EID,
50 layer: usize,
51 ) -> Result<(), Self::Error> {
52 let mut edge = self.link_edge(eid, t, layer, true);
53 let mut edge = edge.as_mut();
54 edge.deletions_mut(layer).insert(t);
55 Ok(())
56 }
57}
58
59impl InternalDeletionOps for GraphStorage {
60 type Error = MutationError;
61
62 fn internal_delete_edge(
63 &self,
64 t: TimeIndexEntry,
65 src: VID,
66 dst: VID,
67 layer: usize,
68 ) -> Result<MaybeNew<EID>, Self::Error> {
69 self.mutable()?.internal_delete_edge(t, src, dst, layer)
70 }
71
72 fn internal_delete_existing_edge(
73 &self,
74 t: TimeIndexEntry,
75 eid: EID,
76 layer: usize,
77 ) -> Result<(), Self::Error> {
78 self.mutable()?.internal_delete_existing_edge(t, eid, layer)
79 }
80}
81
82pub trait InheritDeletionOps: Base {}
83
84impl<G: InheritDeletionOps> InternalDeletionOps for G
85where
86 G::Base: InternalDeletionOps,
87{
88 type Error = <G::Base as InternalDeletionOps>::Error;
89
90 #[inline]
91 fn internal_delete_edge(
92 &self,
93 t: TimeIndexEntry,
94 src: VID,
95 dst: VID,
96 layer: usize,
97 ) -> Result<MaybeNew<EID>, Self::Error> {
98 self.base().internal_delete_edge(t, src, dst, layer)
99 }
100
101 #[inline]
102 fn internal_delete_existing_edge(
103 &self,
104 t: TimeIndexEntry,
105 eid: EID,
106 layer: usize,
107 ) -> Result<(), Self::Error> {
108 self.base().internal_delete_existing_edge(t, eid, layer)
109 }
110}