use super::*;
pub(super) fn node_row_summary_from_logical(logical: &LogicalNode) -> NodeRowSummary {
NodeRowSummary {
has_full: logical.full.is_some(),
delta_count: logical.deltas.len(),
adjacency_degree: logical.adjacency().len(),
}
}
pub(super) fn cache_get_logical_node(
handle: &mut StorageHandle,
node_id: u64,
) -> Option<LogicalNode> {
handle.logical_node_cache.get(&node_id).cloned()
}
pub(super) fn cache_put_logical_node(
handle: &mut StorageHandle,
node_id: u64,
logical: LogicalNode,
) {
if handle.logical_node_cache_capacity == 0 {
return;
}
if !handle.logical_node_cache.contains_key(&node_id) {
if handle.logical_node_cache.len() >= handle.logical_node_cache_capacity {
if let Some(evict_key) = handle.logical_node_cache_order.pop_front() {
handle.logical_node_cache.remove(&evict_key);
}
}
handle.logical_node_cache_order.push_back(node_id);
}
handle.logical_node_cache.insert(node_id, logical);
}
pub(super) fn invalidate_logical_node_cache(handle: &mut StorageHandle, node_id: u64) {
if handle.logical_node_cache.remove(&node_id).is_some() {
handle
.logical_node_cache_order
.retain(|key| *key != node_id);
}
}
pub(super) fn clear_logical_node_cache(handle: &mut StorageHandle) {
handle.logical_node_cache.clear();
handle.logical_node_cache_order.clear();
}