use super::state::HnswIndex;
impl HnswIndex {
pub fn len(&self) -> usize {
self.nodes.len()
}
pub fn live_count(&self) -> usize {
self.nodes.len() - self.tombstone_count()
}
pub fn tombstone_count(&self) -> usize {
self.nodes.iter().filter(|n| n.deleted).count()
}
pub fn tombstone_ratio(&self) -> f64 {
if self.nodes.is_empty() {
0.0
} else {
self.tombstone_count() as f64 / self.nodes.len() as f64
}
}
pub fn is_empty(&self) -> bool {
self.live_count() == 0
}
pub fn delete(&mut self, id: u32) -> bool {
if let Some(node) = self.nodes.get_mut(id as usize) {
if node.deleted {
return false;
}
node.deleted = true;
true
} else {
false
}
}
pub fn is_deleted(&self, id: u32) -> bool {
self.nodes.get(id as usize).is_none_or(|n| n.deleted)
}
pub fn undelete(&mut self, id: u32) -> bool {
if let Some(node) = self.nodes.get_mut(id as usize)
&& node.deleted
{
node.deleted = false;
return true;
}
false
}
}