raphtory-storage 0.17.0

Raphtory storage interface
Documentation
use crate::{graph::graph::GraphStorage, mutation::MutationError};
use raphtory_api::{
    core::{
        entities::{EID, VID},
        storage::{dict_mapper::MaybeNew, timeindex::EventTime},
    },
    inherit::Base,
};
use raphtory_core::entities::graph::tgraph::TemporalGraph;

pub trait InternalDeletionOps {
    type Error: From<MutationError>;
    fn internal_delete_edge(
        &self,
        t: EventTime,
        src: VID,
        dst: VID,
        layer: usize,
    ) -> Result<MaybeNew<EID>, Self::Error>;
    fn internal_delete_existing_edge(
        &self,
        t: EventTime,
        eid: EID,
        layer: usize,
    ) -> Result<(), Self::Error>;
}

impl InternalDeletionOps for TemporalGraph {
    type Error = MutationError;

    fn internal_delete_edge(
        &self,
        t: EventTime,
        src: VID,
        dst: VID,
        layer: usize,
    ) -> Result<MaybeNew<EID>, Self::Error> {
        let edge = self.link_nodes(src, dst, t, layer, true);
        Ok(edge.map(|mut edge| {
            let mut edge = edge.as_mut();
            edge.deletions_mut(layer).insert(t);
            edge.eid()
        }))
    }

    fn internal_delete_existing_edge(
        &self,
        t: EventTime,
        eid: EID,
        layer: usize,
    ) -> Result<(), Self::Error> {
        let mut edge = self.link_edge(eid, t, layer, true);
        let mut edge = edge.as_mut();
        edge.deletions_mut(layer).insert(t);
        Ok(())
    }
}

impl InternalDeletionOps for GraphStorage {
    type Error = MutationError;

    fn internal_delete_edge(
        &self,
        t: EventTime,
        src: VID,
        dst: VID,
        layer: usize,
    ) -> Result<MaybeNew<EID>, Self::Error> {
        self.mutable()?.internal_delete_edge(t, src, dst, layer)
    }

    fn internal_delete_existing_edge(
        &self,
        t: EventTime,
        eid: EID,
        layer: usize,
    ) -> Result<(), Self::Error> {
        self.mutable()?.internal_delete_existing_edge(t, eid, layer)
    }
}

pub trait InheritDeletionOps: Base {}

impl<G: InheritDeletionOps> InternalDeletionOps for G
where
    G::Base: InternalDeletionOps,
{
    type Error = <G::Base as InternalDeletionOps>::Error;

    #[inline]
    fn internal_delete_edge(
        &self,
        t: EventTime,
        src: VID,
        dst: VID,
        layer: usize,
    ) -> Result<MaybeNew<EID>, Self::Error> {
        self.base().internal_delete_edge(t, src, dst, layer)
    }

    #[inline]
    fn internal_delete_existing_edge(
        &self,
        t: EventTime,
        eid: EID,
        layer: usize,
    ) -> Result<(), Self::Error> {
        self.base().internal_delete_existing_edge(t, eid, layer)
    }
}