networkit_rs/
base.rs

1use miette::Result;
2
3pub trait Algorithm {
4    fn run(&mut self) -> Result<()>;
5    fn has_finished(&self) -> bool;
6}
7
8#[derive(Debug, Clone, PartialEq)]
9pub struct GraphEvent {
10    pub(crate) kind: GraphEventType,
11    pub(crate) u: u64,
12    pub(crate) v: u64,
13    pub(crate) ew: f64,
14}
15
16impl GraphEvent {
17    pub fn new(kind: GraphEventType, u: u64, v: u64, ew: Option<f64>) -> Self {
18        Self {
19            kind,
20            u,
21            v,
22            ew: ew.unwrap_or(1.),
23        }
24    }
25}
26
27#[derive(Debug, Copy, Clone, PartialEq, Eq)]
28#[repr(u8)]
29pub enum GraphEventType {
30    NodeAddition = 0,
31    NodeRemoval = 1,
32    NodeRestoration = 2,
33    EdgeAddition = 3,
34    EdgeRemoval = 4,
35    EdgeWeightUpdate = 5,
36    EdgeWeightIncrement = 6,
37    TimeStep = 7,
38}
39
40impl From<u8> for GraphEventType {
41    fn from(value: u8) -> Self {
42        match value {
43            0 => Self::NodeAddition,
44            1 => Self::NodeRemoval,
45            2 => Self::NodeRestoration,
46            3 => Self::EdgeAddition,
47            4 => Self::EdgeRemoval,
48            5 => Self::EdgeWeightUpdate,
49            6 => Self::EdgeWeightIncrement,
50            7 => Self::TimeStep,
51            _ => panic!(),
52        }
53    }
54}
55
56pub trait DynAlgorithm {
57    fn update(&mut self, e: GraphEvent);
58    fn update_batch(&mut self, es: &[GraphEvent]);
59}
60
61#[derive(Debug, Copy, Clone, PartialEq, Eq)]
62#[repr(u8)]
63pub enum EdgeDirection {
64    InEdges = 0,
65    OutEdges = 1,
66}