routee_compass_core/algorithm/search/
direction.rs1use super::SearchInstance;
2use crate::model::network::{Edge, EdgeId, EdgeListId, VertexId};
3use allocative::Allocative;
4use serde::{Deserialize, Serialize};
5
6#[derive(Copy, Clone, Serialize, Deserialize, Default, Debug, PartialEq, Eq, Allocative)]
7#[serde(rename = "snake_case")]
8pub enum Direction {
9 #[default]
10 Forward,
11 Reverse,
12}
13
14impl Direction {
15 pub fn get_incident_edges<'a>(
16 &'a self,
17 vertex_id: &'a VertexId,
18 si: &'a SearchInstance,
19 ) -> Box<dyn Iterator<Item = &'a (EdgeListId, EdgeId)> + 'a> {
20 match self {
21 Direction::Forward => si.graph.out_edges_iter(vertex_id),
22 Direction::Reverse => si.graph.in_edges_iter(vertex_id),
23 }
24 }
25
26 pub fn tree_key_vertex_id(&self, edge: &Edge) -> VertexId {
27 match self {
28 Direction::Forward => edge.dst_vertex_id,
29 Direction::Reverse => edge.src_vertex_id,
30 }
31 }
32
33 pub fn terminal_vertex_id(&self, edge: &Edge) -> VertexId {
34 match self {
35 Direction::Forward => edge.src_vertex_id,
36 Direction::Reverse => edge.dst_vertex_id,
37 }
38 }
39
40 }