1 2 3 4 5 6 7 8 9 10 11 12 13 14
use super::Node;
/// Required trait by nodes of lazy segment trees.
/// It's defined as an interface for the operations needed on the lazy_value.
/// It is recommended to implement it using an Option type.
/// See [Implementators](#Implementators) for some example implementations
pub trait LazyNode: Node {
/// 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])
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 `Some(&value)`.
fn update_lazy_value(&mut self, new_value: &<Self as Node>::Value);
/// Must return a reference to the current lazy value only if it exists.
fn lazy_value(&self) -> Option<&<Self as Node>::Value>;
}