weavatrix_graph/traversal_cache/
ergonomics.rs1use super::{TraversalCache, TraversalStorage};
2use crate::{Graph, Topology};
3
4impl Topology {
5 #[must_use]
7 pub fn traversal_cache(&self) -> TraversalCache {
8 TraversalCache::from_topology(self)
9 }
10
11 #[must_use]
13 pub fn traversal_cache_with(&self, storage: TraversalStorage) -> TraversalCache {
14 TraversalCache::with_storage(self, storage)
15 }
16}
17
18impl Graph {
19 #[must_use]
21 pub fn traversal_cache(&self) -> TraversalCache {
22 self.topology().traversal_cache()
23 }
24
25 #[must_use]
27 pub fn traversal_cache_with(&self, storage: TraversalStorage) -> TraversalCache {
28 self.topology().traversal_cache_with(storage)
29 }
30}
31
32impl TraversalCache {
33 #[must_use]
35 pub fn storage_savings_bytes(&self) -> usize {
36 self.fast_equivalent_bytes()
37 .saturating_sub(self.storage_bytes())
38 }
39
40 #[must_use]
42 #[allow(clippy::cast_precision_loss)]
43 pub fn storage_ratio(&self) -> f64 {
44 let direct = self.fast_equivalent_bytes();
45 if direct == 0 {
46 1.0
47 } else {
48 self.storage_bytes() as f64 / direct as f64
49 }
50 }
51}
52
53impl From<&Topology> for TraversalCache {
54 fn from(topology: &Topology) -> Self {
55 Self::from_topology(topology)
56 }
57}
58
59impl From<&Graph> for TraversalCache {
60 fn from(graph: &Graph) -> Self {
61 graph.traversal_cache()
62 }
63}