orx_linked_list/list/
reclaim.rs

1use super::List;
2use crate::variant::ListVariant;
3use orx_pinned_vec::PinnedVec;
4use orx_selfref_col::{MemoryPolicy, MemoryReclaimer, MemoryState, Node};
5
6impl<V, M, P> List<V, M, P>
7where
8    V: ListVariant,
9    M: MemoryPolicy<V>,
10    P: PinnedVec<Node<V>>,
11{
12    /// Manually attempts to reclaim closed nodes.
13    ///
14    /// # Safety
15    ///
16    /// It is important to note that, memory reclaim operation might lead to reorganization of the nodes
17    /// which invalidates the node indices obtained before the process.
18    pub fn reclaim_closed_nodes(&mut self) -> (MemoryState, MemoryState) {
19        let num_active_nodes = self.len();
20        let old = self.0.memory_state();
21
22        // let state_changed = SinglyReclaimer::reclaim(&mut self.0);
23        let state_changed = <V::Reclaimer as MemoryReclaimer<V>>::reclaim_nodes(&mut self.0);
24        self.0.nodes_mut().truncate(num_active_nodes);
25        self.0.update_state(state_changed);
26
27        (old, self.0.memory_state())
28    }
29}