raphtory_storage/mutation/
deletion_ops.rs

1use 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}