From 37263f983ab291163608e95da8db1de93d94bf71 Mon Sep 17 00:00:00 2001 From: timofey Date: Tue, 1 Aug 2023 20:00:32 +0000 Subject: [PATCH] simplify `n_subset_of_n` --- src/flow/traversible/algorithms/subset.rs | 50 ++++++++++++++--------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/src/flow/traversible/algorithms/subset.rs b/src/flow/traversible/algorithms/subset.rs index 8c2ae9b..0309864 100644 --- a/src/flow/traversible/algorithms/subset.rs +++ b/src/flow/traversible/algorithms/subset.rs @@ -94,6 +94,22 @@ impl<'a, T: 'a + MonadFail<'a, ()>, A: 'a + Clone, D: 'a + PartialEq> SubsetCont } } +fn outside_l(comparator: &dyn Comparator, k_l: &Option, k_super: &A) -> bool { + if let Some(a_l) = k_l { + comparator.compare(a_l, k_super) == Comparison::R + } else { + false + } +} + +fn outside_r(comparator: &dyn Comparator, k_r: &Option, k_super: &A) -> bool { + if let Some(a_r) = k_r { + comparator.compare(a_r, k_super) == Comparison::L + } else { + false + } +} + pub fn n_subset_of_n<'a, T: MonadFail<'a, ()>, A: 'a + Clone, D: 'a + PartialEq>( comparator: &'a dyn Comparator, n_subset: Rc>, @@ -102,27 +118,23 @@ pub fn n_subset_of_n<'a, T: MonadFail<'a, ()>, A: 'a + Clone, D: 'a + PartialEq> k_r: Option, ) -> T::F<()> { let (t_superl, t_superr, k_super) = n_superset.split(); - if let Some(ref a_l) = k_l { - if let Comparison::R = comparator.compare(a_l, &k_super) { - return t_subset_of_t(comparator, n_subset.to_tree(), t_superr, k_l, k_r); + if outside_l(comparator, &k_l, &k_super) { + t_subset_of_t(comparator, n_subset.to_tree(), t_superr, k_l, k_r) + } else if outside_r(comparator, &k_r, &k_super) { + t_subset_of_t(comparator, n_subset.to_tree(), t_superl, k_l, k_r) + } else { + SubsetContext { + comparator, + n_subset, + n_superset, + k_l, + k_r, + t_superl, + t_superr, + k_super, } + .test() } - if let Some(ref a_r) = k_r { - if let Comparison::L = comparator.compare(a_r, &k_super) { - return t_subset_of_t(comparator, n_subset.to_tree(), t_superl, k_l, k_r); - } - } - SubsetContext { - comparator, - n_subset, - n_superset, - k_l, - k_r, - t_superl, - t_superr, - k_super, - } - .test() } pub fn r_subset_of_r<'a, T: MonadFail<'a, ()>, A: 'a + Clone, D: 'a + PartialEq>(