From 2372c1a1f686aab659b67f9ee462c0021b669b3b Mon Sep 17 00:00:00 2001 From: timofey Date: Fri, 16 Jun 2023 13:37:33 +0000 Subject: [PATCH] auto-handle height inside `BalancedTrees` --- src/flow/binary/balancing.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/flow/binary/balancing.rs b/src/flow/binary/balancing.rs index fca81a6..6ec91d6 100644 --- a/src/flow/binary/balancing.rs +++ b/src/flow/binary/balancing.rs @@ -67,7 +67,7 @@ fn matches_height(hl: u64, hr: u64, hp: u64) -> Result<(), BalancingError> { impl<'a, BT: BinaryTreesUnbalanced<'a>> BinaryTrees<'a> for BalancedTrees { type Node = BT::Node; - type Reference = BT::Reference; + type Reference = (BT::Reference, u64); type Tree = BT::Tree; @@ -85,8 +85,8 @@ impl<'a, BT: BinaryTreesUnbalanced<'a>> BinaryTrees<'a> for BalancedTrees { self.0.split(node) } - fn resolve(&self, reference: &Self::Reference) -> BTWrap<'a, Self, Self::Node> { - let hp = self.0.height_r(reference); + fn resolve(&self, (reference, hp): &Self::Reference) -> BTWrap<'a, Self, Self::Node> { + let hp = *hp; let ctx = self.0.clone(); Self::bind(self.0.resolve(reference), move |node| { let (tl, tr, _) = ctx.split(&node); @@ -95,11 +95,11 @@ impl<'a, BT: BinaryTreesUnbalanced<'a>> BinaryTrees<'a> for BalancedTrees { }) } - fn equal(&self, rl: &Self::Reference, rr: &Self::Reference) -> bool { - self.0.height_r(rl) == self.0.height_r(rr) && self.0.equal(rl, rr) + fn equal(&self, (rl, hl): &Self::Reference, (rr, hr): &Self::Reference) -> bool { + hl == hr && self.0.equal(rl, rr) } fn refer(&self, tree: &Self::Tree) -> Option { - self.0.refer(tree) + Some((self.0.refer(tree)?, self.0.height(tree))) } }