digraph_rs/analyzer/
visit.rs1use std::collections::hash_map::Entry;
2use std::collections::{HashMap, HashSet};
3use std::hash::Hash;
4
5pub trait Visited<'a, T> {
6 fn visit(&mut self, v: &'a T) -> bool;
7 fn already_visited(&self, v: &'a T) -> bool;
8}
9
10#[derive(Debug)]
11pub struct VisitedSet<'a, T>
12where
13 T: Hash + Eq,
14{
15 visited: HashSet<&'a T>,
16}
17
18impl<'a, T> Default for VisitedSet<'a, T>
19where
20 T: Hash + Eq,
21{
22 fn default() -> Self {
23 Self { visited: Default::default() }
24 }
25}
26
27
28impl<'a, T> Visited<'a, T> for VisitedSet<'a, T>
29where
30 T: Hash + Eq,
31{
32 fn visit(&mut self, v: &'a T) -> bool {
33 self.visited.insert(v)
34 }
35 fn already_visited(&self, v: &'a T) -> bool {
36 self.visited.contains(v)
37 }
38}