BinaryTreesHeight

This commit is contained in:
AF 2023-06-16 09:44:12 +00:00
parent 711221e4d8
commit c4c279cd27
5 changed files with 20 additions and 8 deletions

View File

@ -126,3 +126,9 @@ pub trait BinaryTreesMutable<'a>: BinaryTreesEmpty<'a> {
}) })
} }
} }
pub trait BinaryTreesHeight<'a>: BinaryTrees<'a> {
fn height(&self, tree: &Self::Tree) -> u64;
fn leaf_height_error<T: 'a>(&self, height: u64) -> BTWrap<'a, Self, T>;
}

View File

@ -1,10 +1,6 @@
use super::*; use super::*;
pub trait BinaryTreesAvl<'a>: BinaryTrees<'a> { pub trait BinaryTreesAvl<'a>: BinaryTreesHeight<'a> {
fn height(&self, tree: &Self::Tree) -> u64;
fn leaf_height_error<T: 'a>(&self, height: u64) -> BTWrap<'a, Self, T>;
fn assume_node(&self, tree: &Self::Tree) -> BTWrap<'a, Self, Self::Node> { fn assume_node(&self, tree: &Self::Tree) -> BTWrap<'a, Self, Self::Node> {
match self.refer(tree) { match self.refer(tree) {
Some(reference) => self.resolve(&reference), Some(reference) => self.resolve(&reference),

View File

@ -146,7 +146,9 @@ impl<'a, BT: BinaryTreesBindable<'a> + BinaryTreesEmpty<'a>> BinaryTreesEmpty<'a
} }
} }
impl<'a, BT: BinaryTreesBindable<'a> + BinaryTreesAvl<'a>> BinaryTreesAvl<'a> for BoundTrees<BT> { impl<'a, BT: BinaryTreesBindable<'a> + BinaryTreesHeight<'a>> BinaryTreesHeight<'a>
for BoundTrees<BT>
{
fn height(&self, tree: &Self::Tree) -> u64 { fn height(&self, tree: &Self::Tree) -> u64 {
self.0.height(&tree.bound) self.0.height(&tree.bound)
} }
@ -154,7 +156,9 @@ impl<'a, BT: BinaryTreesBindable<'a> + BinaryTreesAvl<'a>> BinaryTreesAvl<'a> fo
fn leaf_height_error<T: 'a>(&self, height: u64) -> BTWrap<'a, Self, T> { fn leaf_height_error<T: 'a>(&self, height: u64) -> BTWrap<'a, Self, T> {
self.0.leaf_height_error(height) self.0.leaf_height_error(height)
} }
}
impl<'a, BT: BinaryTreesBindable<'a> + BinaryTreesAvl<'a>> BinaryTreesAvl<'a> for BoundTrees<BT> {
fn join_key_unbalanced( fn join_key_unbalanced(
&self, &self,
tl: Self::Tree, tl: Self::Tree,

View File

@ -176,7 +176,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesMutable<'a> for AvlTs<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesAvl<'a> for AvlTs<A> { impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesHeight<'a> for AvlTs<A> {
fn height(&self, tree: &Self::Tree) -> u64 { fn height(&self, tree: &Self::Tree) -> u64 {
tree.height tree.height
} }
@ -184,7 +184,9 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesAvl<'a> for AvlTs<A> {
fn leaf_height_error<T: 'a>(&self, height: u64) -> BTWrap<'a, Self, T> { fn leaf_height_error<T: 'a>(&self, height: u64) -> BTWrap<'a, Self, T> {
panic!("leaf height error: {height}.") panic!("leaf height error: {height}.")
} }
}
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesAvl<'a> for AvlTs<A> {
fn join_key_unbalanced( fn join_key_unbalanced(
&self, &self,
tl: Self::Tree, tl: Self::Tree,

View File

@ -98,7 +98,7 @@ impl<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx> + Clone, C: 'a + Comparator<A
} }
impl<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx> + Clone, C: 'a + Comparator<A>> impl<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx> + Clone, C: 'a + Comparator<A>>
BinaryTreesAvl<'a> for BoundContext<'a, Ctx, A, C> BinaryTreesHeight<'a> for BoundContext<'a, Ctx, A, C>
{ {
fn height(&self, tree: &Self::Tree) -> u64 { fn height(&self, tree: &Self::Tree) -> u64 {
tree.height() tree.height()
@ -109,7 +109,11 @@ impl<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx> + Clone, C: 'a + Comparator<A
AvlError::LeafHeight(height), AvlError::LeafHeight(height),
))) )))
} }
}
impl<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx> + Clone, C: 'a + Comparator<A>>
BinaryTreesAvl<'a> for BoundContext<'a, Ctx, A, C>
{
fn join_key_unbalanced( fn join_key_unbalanced(
&self, &self,
tl: Self::Tree, tl: Self::Tree,