Struct seg_tree::utils::PersistentWrapper
source · [−]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
sourceimpl<T: Clone> Clone for PersistentWrapper<T> where
T: Node,
impl<T: Clone> Clone for PersistentWrapper<T> where
T: Node,
sourcefn clone(&self) -> PersistentWrapper<T>
fn clone(&self) -> PersistentWrapper<T>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl<T> LazyNode for PersistentWrapper<T> where
T: LazyNode,
impl<T> LazyNode for PersistentWrapper<T> where
T: LazyNode,
sourcefn 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)
sourcefn 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)
.
sourcefn lazy_value(&self) -> Option<&<Self as Node>::Value>
fn lazy_value(&self) -> Option<&<Self as Node>::Value>
Must return a reference to the current lazy value only if it exists.
sourceimpl<T> Node for PersistentWrapper<T> where
T: Node,
impl<T> Node for PersistentWrapper<T> where
T: Node,
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.
sourcefn 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 recreate all of the data in the node.
sourcefn 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).
sourceimpl<T> PersistentNode for PersistentWrapper<T> where
T: Node,
impl<T> PersistentNode for PersistentWrapper<T> where
T: Node,
sourcefn left_child(&self) -> usize
fn left_child(&self) -> usize
Gives index of left child.
sourcefn right_child(&self) -> usize
fn right_child(&self) -> usize
Gives index of right child.
sourcefn 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> 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
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more