pub trait NodeStore: Default {
type K: Key;
type V;
type Argument: Argument<Self::K>;
Show 18 methods
// Required methods
fn inner_n() -> u16;
fn leaf_n() -> u16;
fn add_inner(
&mut self,
node: Box<InnerNode<Self::K, Self::Argument>>,
) -> InnerNodeId;
fn get_inner(&self, id: InnerNodeId) -> &InnerNode<Self::K, Self::Argument>;
fn try_get_inner(
&self,
id: InnerNodeId,
) -> Option<&InnerNode<Self::K, Self::Argument>>;
fn get_mut_inner(
&mut self,
id: InnerNodeId,
) -> &mut InnerNode<Self::K, Self::Argument>;
unsafe fn get_mut_inner_ptr(
&mut self,
id: InnerNodeId,
) -> *mut InnerNode<Self::K, Self::Argument>;
fn take_inner(
&mut self,
id: InnerNodeId,
) -> Box<InnerNode<Self::K, Self::Argument>>;
fn put_back_inner(
&mut self,
id: InnerNodeId,
node: Box<InnerNode<Self::K, Self::Argument>>,
);
fn new_empty_leaf(
&mut self,
) -> (LeafNodeId, &mut LeafNode<Self::K, Self::V>);
fn reserve_leaf(&mut self) -> LeafNodeId;
fn get_leaf(&self, id: LeafNodeId) -> &LeafNode<Self::K, Self::V>;
fn try_get_leaf(
&self,
id: LeafNodeId,
) -> Option<&LeafNode<Self::K, Self::V>>;
fn get_mut_leaf(
&mut self,
id: LeafNodeId,
) -> &mut LeafNode<Self::K, Self::V>;
fn take_leaf(&mut self, id: LeafNodeId) -> Box<LeafNode<Self::K, Self::V>>;
fn assign_leaf(
&mut self,
id: LeafNodeId,
leaf: Box<LeafNode<Self::K, Self::V>>,
);
fn cache_leaf(&self, leaf_id: LeafNodeId);
fn try_cache<Q>(&self, k: &Q) -> Option<LeafNodeId>
where Q: Ord + ?Sized,
Self::K: Borrow<Q>;
}
Expand description
NodeStore is the node storage for tree, responsible for define node types, manage node memory, and provide node access
Required Associated Types§
Required Methods§
Sourcefn add_inner(
&mut self,
node: Box<InnerNode<Self::K, Self::Argument>>,
) -> InnerNodeId
fn add_inner( &mut self, node: Box<InnerNode<Self::K, Self::Argument>>, ) -> InnerNodeId
Add the inner node to the store and returns its id
Sourcefn try_get_inner(
&self,
id: InnerNodeId,
) -> Option<&InnerNode<Self::K, Self::Argument>>
fn try_get_inner( &self, id: InnerNodeId, ) -> Option<&InnerNode<Self::K, Self::Argument>>
Get the inner node if id is invalid or the node already removed, remove None
Sourcefn get_mut_inner(
&mut self,
id: InnerNodeId,
) -> &mut InnerNode<Self::K, Self::Argument>
fn get_mut_inner( &mut self, id: InnerNodeId, ) -> &mut InnerNode<Self::K, Self::Argument>
Get a mut reference to the InnerNode
Sourceunsafe fn get_mut_inner_ptr(
&mut self,
id: InnerNodeId,
) -> *mut InnerNode<Self::K, Self::Argument>
unsafe fn get_mut_inner_ptr( &mut self, id: InnerNodeId, ) -> *mut InnerNode<Self::K, Self::Argument>
Get a mut pointer to inner node. User must ensure there is non shared reference to the node co-exists
Sourcefn take_inner(
&mut self,
id: InnerNodeId,
) -> Box<InnerNode<Self::K, Self::Argument>>
fn take_inner( &mut self, id: InnerNodeId, ) -> Box<InnerNode<Self::K, Self::Argument>>
Take the inner node out of the store
Sourcefn put_back_inner(
&mut self,
id: InnerNodeId,
node: Box<InnerNode<Self::K, Self::Argument>>,
)
fn put_back_inner( &mut self, id: InnerNodeId, node: Box<InnerNode<Self::K, Self::Argument>>, )
Put back the inner node
Sourcefn new_empty_leaf(&mut self) -> (LeafNodeId, &mut LeafNode<Self::K, Self::V>)
fn new_empty_leaf(&mut self) -> (LeafNodeId, &mut LeafNode<Self::K, Self::V>)
Create a new empty leaf node and returns its id
Sourcefn reserve_leaf(&mut self) -> LeafNodeId
fn reserve_leaf(&mut self) -> LeafNodeId
Reserve a leaf node, it must be assigned later
Sourcefn get_leaf(&self, id: LeafNodeId) -> &LeafNode<Self::K, Self::V>
fn get_leaf(&self, id: LeafNodeId) -> &LeafNode<Self::K, Self::V>
Get a refernce to leaf node Panics if id is invalid or the node is taken
Sourcefn try_get_leaf(&self, id: LeafNodeId) -> Option<&LeafNode<Self::K, Self::V>>
fn try_get_leaf(&self, id: LeafNodeId) -> Option<&LeafNode<Self::K, Self::V>>
Get a reference to leaf node Returns None if id is invalid or the node is taken
Sourcefn get_mut_leaf(&mut self, id: LeafNodeId) -> &mut LeafNode<Self::K, Self::V>
fn get_mut_leaf(&mut self, id: LeafNodeId) -> &mut LeafNode<Self::K, Self::V>
Get a mut reference to leaf node Panics if id is invalid or the node is taken
Sourcefn take_leaf(&mut self, id: LeafNodeId) -> Box<LeafNode<Self::K, Self::V>>
fn take_leaf(&mut self, id: LeafNodeId) -> Box<LeafNode<Self::K, Self::V>>
Take the leaf out of store
Sourcefn assign_leaf(&mut self, id: LeafNodeId, leaf: Box<LeafNode<Self::K, Self::V>>)
fn assign_leaf(&mut self, id: LeafNodeId, leaf: Box<LeafNode<Self::K, Self::V>>)
Assign the leaf to the id, the id must exists
Sourcefn cache_leaf(&self, leaf_id: LeafNodeId)
fn cache_leaf(&self, leaf_id: LeafNodeId)
cache leaf
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.