fix subset check
This commit is contained in:
parent
5d604d2834
commit
9ef14b53ac
@ -1,5 +1,7 @@
|
|||||||
//! Traversible binary trees.
|
//! Traversible binary trees.
|
||||||
|
|
||||||
|
// pub mod unbalanced;
|
||||||
|
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
use crate::func::*;
|
use crate::func::*;
|
||||||
@ -50,24 +52,24 @@ pub type Split<'a, T, A, D> = (
|
|||||||
Rc<A>,
|
Rc<A>,
|
||||||
);
|
);
|
||||||
|
|
||||||
pub trait TraversibleBinaryNode<'a, T: Monad, A, D: 'a + PartialEq>: 'a {
|
pub trait TraversibleBinaryNode<'a, T: 'a + Monad, A: 'a, D: 'a + PartialEq>: 'a {
|
||||||
fn split(&self) -> Split<'a, T, A, D>;
|
fn split(&self) -> Split<'a, T, A, D>;
|
||||||
|
|
||||||
fn to_tree(self: Rc<Self>) -> Rc<dyn TraversibleBinaryTree<'a, T, A, D>>;
|
fn to_tree(self: Rc<Self>) -> Rc<dyn TraversibleBinaryTree<'a, T, A, D>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait TraversibleBinaryReference<'a, T: Monad, A, D: 'a + PartialEq>: 'a {
|
pub trait TraversibleBinaryReference<'a, T: 'a + Monad, A: 'a, D: 'a + PartialEq>: 'a {
|
||||||
fn resolve(&self) -> <T as WeakFunctor>::F<'a, Rc<dyn TraversibleBinaryNode<'a, T, A, D>>>;
|
fn resolve(&self) -> <T as WeakFunctor>::F<'a, Rc<dyn TraversibleBinaryNode<'a, T, A, D>>>;
|
||||||
|
|
||||||
/// This should be enough to compare reference for equality.
|
/// This should be enough to compare reference for equality.
|
||||||
fn data(&self) -> D;
|
fn data(&self) -> D;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait TraversibleBinaryTree<'a, T: Monad, A, D: 'a + PartialEq>: 'a {
|
pub trait TraversibleBinaryTree<'a, T: 'a + Monad, A: 'a, D: 'a + PartialEq>: 'a {
|
||||||
fn refer(&self) -> Option<Rc<dyn TraversibleBinaryReference<'a, T, A, D>>>;
|
fn refer(&self) -> Option<Rc<dyn TraversibleBinaryReference<'a, T, A, D>>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn n_contains<'a, T: Monad, A, D: 'a + PartialEq>(
|
pub fn n_contains<'a, T: 'a + Monad, A: 'a, D: 'a + PartialEq>(
|
||||||
comparator: &'a dyn Comparator<A>,
|
comparator: &'a dyn Comparator<A>,
|
||||||
n_set: Rc<dyn TraversibleBinaryNode<'a, T, A, D>>,
|
n_set: Rc<dyn TraversibleBinaryNode<'a, T, A, D>>,
|
||||||
key: Rc<A>,
|
key: Rc<A>,
|
||||||
@ -80,7 +82,7 @@ pub fn n_contains<'a, T: Monad, A, D: 'a + PartialEq>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn r_contains<'a, T: Monad, A, D: 'a + PartialEq>(
|
pub fn r_contains<'a, T: 'a + Monad, A: 'a, D: 'a + PartialEq>(
|
||||||
comparator: &'a dyn Comparator<A>,
|
comparator: &'a dyn Comparator<A>,
|
||||||
r_set: Rc<dyn TraversibleBinaryReference<'a, T, A, D>>,
|
r_set: Rc<dyn TraversibleBinaryReference<'a, T, A, D>>,
|
||||||
key: Rc<A>,
|
key: Rc<A>,
|
||||||
@ -88,7 +90,7 @@ pub fn r_contains<'a, T: Monad, A, D: 'a + PartialEq>(
|
|||||||
T::bind(r_set.resolve(), |n_set| n_contains(comparator, n_set, key))
|
T::bind(r_set.resolve(), |n_set| n_contains(comparator, n_set, key))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn t_contains<'a, T: Monad, A, D: 'a + PartialEq>(
|
pub fn t_contains<'a, T: 'a + Monad, A: 'a, D: 'a + PartialEq>(
|
||||||
comparator: &'a dyn Comparator<A>,
|
comparator: &'a dyn Comparator<A>,
|
||||||
t_set: Rc<dyn TraversibleBinaryTree<'a, T, A, D>>,
|
t_set: Rc<dyn TraversibleBinaryTree<'a, T, A, D>>,
|
||||||
key: Rc<A>,
|
key: Rc<A>,
|
||||||
@ -99,7 +101,7 @@ pub fn t_contains<'a, T: Monad, A, D: 'a + PartialEq>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn n_subset_of_n<'a, T: Monad, A, D: 'a + PartialEq>(
|
pub fn n_subset_of_n<'a, T: 'a + Monad, A: 'a, D: 'a + PartialEq>(
|
||||||
comparator: &'a dyn Comparator<A>,
|
comparator: &'a dyn Comparator<A>,
|
||||||
n_subset: Rc<dyn TraversibleBinaryNode<'a, T, A, D>>,
|
n_subset: Rc<dyn TraversibleBinaryNode<'a, T, A, D>>,
|
||||||
n_superset: Rc<dyn TraversibleBinaryNode<'a, T, A, D>>,
|
n_superset: Rc<dyn TraversibleBinaryNode<'a, T, A, D>>,
|
||||||
@ -128,7 +130,7 @@ pub fn n_subset_of_n<'a, T: Monad, A, D: 'a + PartialEq>(
|
|||||||
t_subset_of_t(
|
t_subset_of_t(
|
||||||
comparator,
|
comparator,
|
||||||
t_subr,
|
t_subr,
|
||||||
n_subset.to_tree(),
|
n_superset.to_tree(),
|
||||||
Some(k_sub.clone()),
|
Some(k_sub.clone()),
|
||||||
k_r,
|
k_r,
|
||||||
),
|
),
|
||||||
@ -147,7 +149,7 @@ pub fn n_subset_of_n<'a, T: Monad, A, D: 'a + PartialEq>(
|
|||||||
t_subset_of_t(
|
t_subset_of_t(
|
||||||
comparator,
|
comparator,
|
||||||
t_subl,
|
t_subl,
|
||||||
n_subset.to_tree(),
|
n_superset.to_tree(),
|
||||||
k_l,
|
k_l,
|
||||||
Some(k_sub.clone()),
|
Some(k_sub.clone()),
|
||||||
),
|
),
|
||||||
@ -157,7 +159,7 @@ pub fn n_subset_of_n<'a, T: Monad, A, D: 'a + PartialEq>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn r_subset_of_r<'a, T: Monad, A, D: 'a + PartialEq>(
|
pub fn r_subset_of_r<'a, T: 'a + Monad, A: 'a, D: 'a + PartialEq>(
|
||||||
comparator: &'a dyn Comparator<A>,
|
comparator: &'a dyn Comparator<A>,
|
||||||
r_subset: Rc<dyn TraversibleBinaryReference<'a, T, A, D>>,
|
r_subset: Rc<dyn TraversibleBinaryReference<'a, T, A, D>>,
|
||||||
r_superset: Rc<dyn TraversibleBinaryReference<'a, T, A, D>>,
|
r_superset: Rc<dyn TraversibleBinaryReference<'a, T, A, D>>,
|
||||||
|
Loading…
Reference in New Issue
Block a user