Trait fingertrees::Refs
source · pub trait Refs<V>: Sizedwhere
V: Measured,{
type Node: Ref<Target = NodeInner<Self, V>>;
type Tree: Ref<Target = TreeInner<Self, V>>;
}
Expand description
Interface which defines all reference types needed by finger tree implementation.
By implementing this interface for your reference type you can use finger treee with your reference type.
Example:
use std::rc::Rc;
use std::ops::Deref;
use fingertrees::measure::Size;
use fingertrees::{FingerTree, Measured, Ref, fingertree_define_refs};
// your custom reference type
struct MyRef<T>(Rc<T>);
impl<T> Clone for MyRef<T> {
fn clone(&self) -> Self {
MyRef(self.0.clone())
}
}
impl<T> Deref for MyRef<T> {
type Target = T;
fn deref(&self) -> &T {
&*self.0
}
}
impl<T> Ref for MyRef<T> {
fn new(value: T) -> Self {
MyRef(Rc::new(value))
}
}
// define type family for your reference
fingertree_define_refs!(MyRefs, MyRef);
// now you can construct fingertree using your reference type
let _: FingerTree<MyRefs, _> = (0..128).map(Size).collect();