use super::{TraversalCache, TraversalStorage};
use crate::{Graph, Topology};
impl Topology {
#[must_use]
pub fn traversal_cache(&self) -> TraversalCache {
TraversalCache::from_topology(self)
}
#[must_use]
pub fn traversal_cache_with(&self, storage: TraversalStorage) -> TraversalCache {
TraversalCache::with_storage(self, storage)
}
}
impl Graph {
#[must_use]
pub fn traversal_cache(&self) -> TraversalCache {
self.topology().traversal_cache()
}
#[must_use]
pub fn traversal_cache_with(&self, storage: TraversalStorage) -> TraversalCache {
self.topology().traversal_cache_with(storage)
}
}
impl TraversalCache {
#[must_use]
pub fn storage_savings_bytes(&self) -> usize {
self.fast_equivalent_bytes()
.saturating_sub(self.storage_bytes())
}
#[must_use]
#[allow(clippy::cast_precision_loss)]
pub fn storage_ratio(&self) -> f64 {
let direct = self.fast_equivalent_bytes();
if direct == 0 {
1.0
} else {
self.storage_bytes() as f64 / direct as f64
}
}
}
impl From<&Topology> for TraversalCache {
fn from(topology: &Topology) -> Self {
Self::from_topology(topology)
}
}
impl From<&Graph> for TraversalCache {
fn from(graph: &Graph) -> Self {
graph.traversal_cache()
}
}