auto-handle height inside BalancedTrees

This commit is contained in:
AF 2023-06-16 13:37:33 +00:00
parent a897706a91
commit 2372c1a1f6

View File

@ -67,7 +67,7 @@ fn matches_height(hl: u64, hr: u64, hp: u64) -> Result<(), BalancingError> {
impl<'a, BT: BinaryTreesUnbalanced<'a>> BinaryTrees<'a> for BalancedTrees<BT> { impl<'a, BT: BinaryTreesUnbalanced<'a>> BinaryTrees<'a> for BalancedTrees<BT> {
type Node = BT::Node; type Node = BT::Node;
type Reference = BT::Reference; type Reference = (BT::Reference, u64);
type Tree = BT::Tree; type Tree = BT::Tree;
@ -85,8 +85,8 @@ impl<'a, BT: BinaryTreesUnbalanced<'a>> BinaryTrees<'a> for BalancedTrees<BT> {
self.0.split(node) self.0.split(node)
} }
fn resolve(&self, reference: &Self::Reference) -> BTWrap<'a, Self, Self::Node> { fn resolve(&self, (reference, hp): &Self::Reference) -> BTWrap<'a, Self, Self::Node> {
let hp = self.0.height_r(reference); let hp = *hp;
let ctx = self.0.clone(); let ctx = self.0.clone();
Self::bind(self.0.resolve(reference), move |node| { Self::bind(self.0.resolve(reference), move |node| {
let (tl, tr, _) = ctx.split(&node); let (tl, tr, _) = ctx.split(&node);
@ -95,11 +95,11 @@ impl<'a, BT: BinaryTreesUnbalanced<'a>> BinaryTrees<'a> for BalancedTrees<BT> {
}) })
} }
fn equal(&self, rl: &Self::Reference, rr: &Self::Reference) -> bool { fn equal(&self, (rl, hl): &Self::Reference, (rr, hr): &Self::Reference) -> bool {
self.0.height_r(rl) == self.0.height_r(rr) && self.0.equal(rl, rr) hl == hr && self.0.equal(rl, rr)
} }
fn refer(&self, tree: &Self::Tree) -> Option<Self::Reference> { fn refer(&self, tree: &Self::Tree) -> Option<Self::Reference> {
self.0.refer(tree) Some((self.0.refer(tree)?, self.0.height(tree)))
} }
} }