BinaryTreesAvl for BoundTrees

This commit is contained in:
AF 2023-06-16 09:06:33 +00:00
parent 03b4a4764b
commit 1c589acd85

View File

@ -129,3 +129,34 @@ impl<'a, BT: BinaryTreesBindable<'a> + BinaryTreesEmpty<'a>> BinaryTreesEmpty<'a
}
}
}
impl<'a, BT: BinaryTreesBindable<'a> + BinaryTreesAvl<'a>> BinaryTreesAvl<'a> for BoundTrees<BT> {
fn height(&self, tree: &Self::Tree) -> u64 {
self.0.height(&tree.bound)
}
fn leaf_height_error<T: 'a>(&self, height: u64) -> BTWrap<'a, Self, T> {
self.0.leaf_height_error(height)
}
fn join_key_unbalanced(
&self,
tl: Self::Tree,
key: Self::Key,
tr: Self::Tree,
) -> BTWrap<'a, Self, Self::Node> {
let (boundsl, boundsr) = (tl.bounds, tr.bounds);
match Bounds::join(boundsl.clone(), boundsr.clone(), &key, self.comparator()) {
Ok(bounds) => Self::fmap(
self.0.join_key_unbalanced(tl.bound, key, tr.bound),
|node| BoundNode2 {
boundsl,
boundsr,
bounds,
node,
},
),
Err(e) => self.0.bounds_error(e),
}
}
}