diff --git a/src/flow/binary.rs b/src/flow/binary.rs index 1bf95d4..c95b5e5 100644 --- a/src/flow/binary.rs +++ b/src/flow/binary.rs @@ -2,6 +2,8 @@ use std::rc::Rc; use crate::func::*; +use super::comparator::Comparator; + pub type NodeRc<'a, BT> = Rc<>::Node>; pub type ReferenceRc<'a, BT> = Rc<>::Reference>; pub type TreeRc<'a, BT> = Rc<>::Tree>; @@ -17,22 +19,29 @@ pub trait BinaryTrees<'a>: 'a { type Reference: 'a; type Tree: 'a; type Key: 'a; + type Comparator: Comparator; type T: Monad<'a>; - fn split(node: Self::Node) -> Split<'a, Self>; - fn to_tree(node: Self::Node) -> TreeRc<'a, Self>; - fn resolve(reference: Self::Reference) -> Wrapped<'a, Self, NodeRc<'a, Self>>; - fn equal(rhs: Self::Reference, lhs: Self::Reference) -> bool; - fn refer(tree: Self::Tree) -> Option>; + fn comparator(&self) -> &Self::Comparator; + fn split(&self, node: Self::Node) -> Split<'a, Self>; + fn to_tree(&self, node: Self::Node) -> TreeRc<'a, Self>; + fn resolve(&self, reference: Self::Reference) -> Wrapped<'a, Self, NodeRc<'a, Self>>; + fn equal(&self, rhs: Self::Reference, lhs: Self::Reference) -> bool; + fn refer(&self, tree: Self::Tree) -> Option>; } pub trait BinaryTreesMutable<'a>: BinaryTrees<'a> { fn join_key( + &self, tl: Self::Tree, key: KeyRc<'a, Self>, tr: Self::Tree, - ) -> Wrapped<'a, Self, TreeRc<'a, Self>>; - fn join(tl: Self::Tree, tr: Self::Tree) -> Wrapped<'a, Self, TreeRc<'a, Self>>; - fn split_key(tree: Self::Tree, key: KeyRc<'a, Self>) -> Wrapped<'a, Self, KeySplit<'a, Self>>; + ) -> Wrapped<'a, Self, NodeRc<'a, Self>>; + fn join(&self, tl: Self::Tree, tr: Self::Tree) -> Wrapped<'a, Self, TreeRc<'a, Self>>; + fn split_key( + &self, + tree: Self::Tree, + key: KeyRc<'a, Self>, + ) -> Wrapped<'a, Self, KeySplit<'a, Self>>; }