PartialOrd -> Ord

This commit is contained in:
AF 2023-06-16 22:13:08 +00:00
parent a89fd3416c
commit 634393ba4a
3 changed files with 19 additions and 21 deletions

View File

@ -19,17 +19,15 @@ pub trait Comparator<A> {
fn pick_smaller(&self, kl: &A, kr: &A) -> Comparison; fn pick_smaller(&self, kl: &A, kr: &A) -> Comparison;
} }
/// Implementation of a [Comparator] relying on [`PartialOrd`]. /// Implementation of a [Comparator] relying on [`Ord`].
pub struct DefaultComparator; pub struct DefaultComparator;
impl<A: PartialOrd> Comparator<A> for DefaultComparator { impl<A: Ord> Comparator<A> for DefaultComparator {
fn pick_smaller(&self, kl: &A, kr: &A) -> Comparison { fn pick_smaller(&self, kl: &A, kr: &A) -> Comparison {
if kl < kr { match kl.cmp(kr) {
Comparison::L std::cmp::Ordering::Less => Comparison::L,
} else if kr < kl { std::cmp::Ordering::Equal => Comparison::E,
Comparison::R std::cmp::Ordering::Greater => Comparison::R,
} else {
Comparison::E
} }
} }
} }

View File

@ -100,7 +100,7 @@ impl<'a, A: 'a> FunctorContext<'a> for AvlTs<A> {
type T = instances::solo::SoloInstance; type T = instances::solo::SoloInstance;
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTrees<'a> for AvlTs<A> { impl<'a, A: 'a + Ord + Clone> BinaryTrees<'a> for AvlTs<A> {
type Node = AvlN<A>; type Node = AvlN<A>;
type Reference = AvlR<A>; type Reference = AvlR<A>;
@ -137,7 +137,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTrees<'a> for AvlTs<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesTreeOf<'a> for AvlTs<A> { impl<'a, A: 'a + Ord + Clone> BinaryTreesTreeOf<'a> for AvlTs<A> {
fn tree_of(&self, node: Self::Node) -> BTWrap<'a, Self, Self::Tree> { fn tree_of(&self, node: Self::Node) -> BTWrap<'a, Self, Self::Tree> {
AvlT { AvlT {
height: std::cmp::max(node.l.height, node.r.height) height: std::cmp::max(node.l.height, node.r.height)
@ -148,7 +148,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesTreeOf<'a> for AvlTs<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesEmpty<'a> for AvlTs<A> { impl<'a, A: 'a + Ord + Clone> BinaryTreesEmpty<'a> for AvlTs<A> {
fn empty(&self) -> Self::Tree { fn empty(&self) -> Self::Tree {
AvlT { AvlT {
reference: None, reference: None,
@ -165,7 +165,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesEmpty<'a> for AvlTs<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesMutable<'a> for AvlTs<A> { impl<'a, A: 'a + Ord + Clone> BinaryTreesMutable<'a> for AvlTs<A> {
fn join_key( fn join_key(
self, self,
tl: Self::Tree, tl: Self::Tree,
@ -176,7 +176,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesMutable<'a> for AvlTs<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesHeight<'a> for AvlTs<A> { impl<'a, A: 'a + Ord + Clone> BinaryTreesHeight<'a> for AvlTs<A> {
fn height(&self, tree: &Self::Tree) -> u64 { fn height(&self, tree: &Self::Tree) -> u64 {
tree.height tree.height
} }
@ -186,7 +186,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesHeight<'a> for AvlTs<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesTryJoin<'a> for AvlTs<A> { impl<'a, A: 'a + Ord + Clone> BinaryTreesTryJoin<'a> for AvlTs<A> {
fn try_join( fn try_join(
&self, &self,
tl: Self::Tree, tl: Self::Tree,
@ -197,7 +197,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesTryJoin<'a> for AvlTs<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesBindable<'a> for AvlTs<A> { impl<'a, A: 'a + Ord + Clone> BinaryTreesBindable<'a> for AvlTs<A> {
fn bounds_error<T: 'a>(&self, _error: bounds::BoundsError<Self::Key>) -> BTWrap<'a, Self, T> { fn bounds_error<T: 'a>(&self, _error: bounds::BoundsError<Self::Key>) -> BTWrap<'a, Self, T> {
panic!("bounds violated."); panic!("bounds violated.");
} }

View File

@ -80,7 +80,7 @@ impl<'a, A: 'a> FunctorContext<'a> for Trees<A> {
type T = instances::solo::SoloInstance; type T = instances::solo::SoloInstance;
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTrees<'a> for Trees<A> { impl<'a, A: 'a + Ord + Clone> BinaryTrees<'a> for Trees<A> {
type Node = Node<A>; type Node = Node<A>;
type Reference = Reference<A>; type Reference = Reference<A>;
@ -114,7 +114,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTrees<'a> for Trees<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesHeight<'a> for Trees<A> { impl<'a, A: 'a + Ord + Clone> BinaryTreesHeight<'a> for Trees<A> {
fn height(&self, tree: &Self::Tree) -> u64 { fn height(&self, tree: &Self::Tree) -> u64 {
tree.height tree.height
} }
@ -124,7 +124,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesHeight<'a> for Trees<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesEmpty<'a> for Trees<A> { impl<'a, A: 'a + Ord + Clone> BinaryTreesEmpty<'a> for Trees<A> {
fn empty(&self) -> Self::Tree { fn empty(&self) -> Self::Tree {
Tree { Tree {
reference: None, reference: None,
@ -141,7 +141,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesEmpty<'a> for Trees<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesTryJoin<'a> for Trees<A> { impl<'a, A: 'a + Ord + Clone> BinaryTreesTryJoin<'a> for Trees<A> {
fn try_join( fn try_join(
&self, &self,
tl: Self::Tree, tl: Self::Tree,
@ -152,7 +152,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesTryJoin<'a> for Trees<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesUnbalanced<'a> for Trees<A> { impl<'a, A: 'a + Ord + Clone> BinaryTreesUnbalanced<'a> for Trees<A> {
fn tree_of_with_height(&self, node: Self::Node, height: u64) -> BTWrap<'a, Self, Self::Tree> { fn tree_of_with_height(&self, node: Self::Node, height: u64) -> BTWrap<'a, Self, Self::Tree> {
Tree { Tree {
reference: Some(Reference { reference: Some(Reference {
@ -167,7 +167,7 @@ impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesUnbalanced<'a> for Trees<A> {
} }
} }
impl<'a, A: 'a + PartialOrd + Clone> BinaryTreesBindable<'a> for Trees<A> { impl<'a, A: 'a + Ord + Clone> BinaryTreesBindable<'a> for Trees<A> {
fn bounds_error<T: 'a>(&self, _error: bounds::BoundsError<Self::Key>) -> BTWrap<'a, Self, T> { fn bounds_error<T: 'a>(&self, _error: bounds::BoundsError<Self::Key>) -> BTWrap<'a, Self, T> {
panic!("bounds violated."); panic!("bounds violated.");
} }