use crate::graph::resident_handles::free_unique_resident_handles;
use crate::optimizer::dispatcher::{DispatchError, OptimizerDispatcher};
#[derive(Debug, Clone)]
pub struct ResidentAdaptiveTraversalGraph {
pub(crate) node_count: u32,
pub(crate) edge_count: u32,
pub(crate) words: usize,
pub(crate) layout_hash: u64,
pub(crate) handles: [u64; 4],
}
#[derive(Debug, Clone)]
pub struct ResidentAdaptiveFourRussiansDenseGraph {
pub(crate) node_count: u32,
pub(crate) words: usize,
pub(crate) layout_hash: u64,
pub(crate) lut_handle: u64,
}
impl ResidentAdaptiveFourRussiansDenseGraph {
#[must_use]
pub fn node_count(&self) -> u32 {
self.node_count
}
#[must_use]
pub fn words(&self) -> usize {
self.words
}
#[must_use]
pub fn layout_hash(&self) -> u64 {
self.layout_hash
}
#[must_use]
pub fn lut_handle(&self) -> u64 {
self.lut_handle
}
pub fn free(self, dispatcher: &dyn OptimizerDispatcher) -> Result<(), DispatchError> {
dispatcher.free_resident(self.lut_handle)
}
}
impl ResidentAdaptiveTraversalGraph {
#[must_use]
pub fn node_count(&self) -> u32 {
self.node_count
}
#[must_use]
pub fn edge_count(&self) -> u32 {
self.edge_count
}
#[must_use]
pub fn words(&self) -> usize {
self.words
}
#[must_use]
pub fn layout_hash(&self) -> u64 {
self.layout_hash
}
#[must_use]
pub fn handles(&self) -> [u64; 4] {
self.handles
}
pub fn free(self, dispatcher: &dyn OptimizerDispatcher) -> Result<(), DispatchError> {
free_unique_resident_handles(
dispatcher,
&self.handles,
"resident adaptive traversal graph",
)
}
}