1use crate::{EdgeTrait, NodeTrait};
2
3pub trait GraphViewTrait<N: NodeTrait, E: EdgeTrait> {
4 fn is_empty(&self) -> bool;
5 fn get_node(&self, key: u32) -> &N;
6 fn get_edge(&self, source: u32, target: u32) -> &E;
7 fn has_node(&self, key: u32) -> bool;
8 fn has_edge(&self, source: u32, target: u32) -> bool;
9 fn get_nodes<'a>(&'a self) -> impl Iterator<Item = &'a N>
10 where
11 N: 'a;
12 fn get_edges<'a>(&'a self) -> impl Iterator<Item = &'a E>
13 where
14 E: 'a;
15 fn get_predecessors<'a>(&'a self, node_key: u32) -> impl Iterator<Item = &'a N>
16 where
17 N: 'a;
18 fn get_successors<'a>(&'a self, node_key: u32) -> impl Iterator<Item = &'a N>
19 where
20 N: 'a;
21 fn get_node_keys(&self) -> impl Iterator<Item = u32> + '_;
22 fn get_predecessors_keys(&self, node_key: u32) -> impl Iterator<Item = u32> + '_;
23 fn get_successors_keys(&self, node_key: u32) -> impl Iterator<Item = u32> + '_;
24 fn filter(&self, node_keys: &[u32]) -> impl GraphViewTrait<N, E>;
25 fn has_sequential_keys(&self) -> bool;
26}