oxicuda_graphalg/repr/
edge_list.rs1use crate::error::{GraphalgError, GraphalgResult};
4
5#[derive(Debug, Clone)]
7pub struct EdgeList {
8 pub n: usize,
9 pub edges: Vec<(usize, usize)>,
10}
11
12impl EdgeList {
13 pub fn new(n: usize) -> Self {
14 Self {
15 n,
16 edges: Vec::new(),
17 }
18 }
19
20 pub fn add_edge(&mut self, u: usize, v: usize) -> GraphalgResult<()> {
21 if u >= self.n || v >= self.n {
22 return Err(GraphalgError::IndexOutOfBounds {
23 index: u.max(v),
24 len: self.n,
25 });
26 }
27 self.edges.push((u, v));
28 Ok(())
29 }
30
31 pub fn num_edges(&self) -> usize {
32 self.edges.len()
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39
40 #[test]
41 fn build_edge_list() {
42 let mut e = EdgeList::new(4);
43 e.add_edge(0, 1).expect("ok");
44 e.add_edge(1, 2).expect("ok");
45 e.add_edge(2, 3).expect("ok");
46 assert_eq!(e.num_edges(), 3);
47 }
48}