use std::{hash::Hash, ptr::NonNull};
use super::{LfuEntry, Node};
pub(super) fn remove_entry_pointer<Key, Value>(
mut node: LfuEntry<Key, Value>,
len: &mut usize,
) -> Value
where
Key: Hash + Eq,
{
let owner = unsafe { node.owner.as_mut() };
drop(LfuEntry::detach_owned(NonNull::from(&mut node)));
if owner.elements.is_none() {
Node::detach(unsafe { *Box::from_raw(owner) });
}
*len -= 1;
node.value
}