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();

Required Associated Types§

Reference on a Node

Reference on a Tree

Implementors§