pub struct PersistentWrapper<T>where
T: Node,{ /* private fields */ }
Expand description
A simple wrapper for nodes to easily implement PersistentNode
. If the wrapped node implements LazyNode
the wrapper also implements it.
Trait Implementations§
Source§impl<T> Clone for PersistentWrapper<T>
impl<T> Clone for PersistentWrapper<T>
Source§fn clone(&self) -> PersistentWrapper<T>
fn clone(&self) -> PersistentWrapper<T>
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl<T> Debug for PersistentWrapper<T>
impl<T> Debug for PersistentWrapper<T>
Source§impl<T> From<T> for PersistentWrapper<T>where
T: Node,
impl<T> From<T> for PersistentWrapper<T>where
T: Node,
Source§impl<T> LazyNode for PersistentWrapper<T>where
T: LazyNode,
impl<T> LazyNode for PersistentWrapper<T>where
T: LazyNode,
Source§fn lazy_update(&mut self, i: usize, j: usize)
fn lazy_update(&mut self, i: usize, j: usize)
The following invariant must be met while implementing this method, if
lazy_value
is called immediately after this function then it must return None
. (See Option::take
)Source§fn update_lazy_value(&mut self, new_value: &<Self as Node>::Value)
fn update_lazy_value(&mut self, new_value: &<Self as Node>::Value)
The following invariant must be met while implementing this method, if
lazy_value
is called immediately after this function then it must return Some(&value)
.Source§impl<T> Node for PersistentWrapper<T>where
T: Node,
impl<T> Node for PersistentWrapper<T>where
T: Node,
Source§type Value = <T as Node>::Value
type Value = <T as Node>::Value
This type corresponds to the type of the information to create the node with
Node::initialize
.Source§fn initialize(value: &Self::Value) -> Self
fn initialize(value: &Self::Value) -> Self
Function to create nodes from saved value, it is assumed that even if there’s more data saved in the node,
value
should have enough data to create all of the data of a node of a segment segment of exactly one element.Source§fn combine(a: &Self, b: &Self) -> Self
fn combine(a: &Self, b: &Self) -> Self
Function which will combine nodes
a
and b
, where each corresponds to segments [i,j]
and [j+1,k]
respectively, into a node which corresponds to the segment [i,k]
. This function must be associative (taking * as a symbol for combine, we have that a*(b*c)==(a*b)*c is true), but need not be commutative (it’s not necessarily true that a*b==b*a).Source§impl<T> PersistentNode for PersistentWrapper<T>where
T: Node,
impl<T> PersistentNode for PersistentWrapper<T>where
T: Node,
Source§fn left_child(&self) -> usize
fn left_child(&self) -> usize
Gives index of left child.
Source§fn right_child(&self) -> usize
fn right_child(&self) -> usize
Gives index of right child.
Source§fn set_children(&mut self, left: usize, right: usize)
fn set_children(&mut self, left: usize, right: usize)
Sets saved index of both left and right children. (It’s assumed that before a call to this, the node has invalid indices.)
Auto Trait Implementations§
impl<T> Freeze for PersistentWrapper<T>where
T: Freeze,
impl<T> RefUnwindSafe for PersistentWrapper<T>where
T: RefUnwindSafe,
impl<T> Send for PersistentWrapper<T>where
T: Send,
impl<T> Sync for PersistentWrapper<T>where
T: Sync,
impl<T> Unpin for PersistentWrapper<T>where
T: Unpin,
impl<T> UnwindSafe for PersistentWrapper<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more