Constify cmp_min_max_by
This commit is contained in:
parent
6580010551
commit
2e7a201d2e
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#![stable(feature = "rust1", since = "1.0.0")]
|
#![stable(feature = "rust1", since = "1.0.0")]
|
||||||
|
|
||||||
|
use crate::const_closure::ConstFnMutClosure;
|
||||||
use crate::marker::Destruct;
|
use crate::marker::Destruct;
|
||||||
use crate::marker::StructuralPartialEq;
|
use crate::marker::StructuralPartialEq;
|
||||||
|
|
||||||
@ -1222,7 +1223,12 @@ pub const fn min<T: ~const Ord + ~const Destruct>(v1: T, v2: T) -> T {
|
|||||||
#[inline]
|
#[inline]
|
||||||
#[must_use]
|
#[must_use]
|
||||||
#[stable(feature = "cmp_min_max_by", since = "1.53.0")]
|
#[stable(feature = "cmp_min_max_by", since = "1.53.0")]
|
||||||
pub fn min_by<T, F: FnOnce(&T, &T) -> Ordering>(v1: T, v2: T, compare: F) -> T {
|
#[rustc_const_unstable(feature = "const_cmp", issue = "92391")]
|
||||||
|
pub const fn min_by<T, F: ~const FnOnce(&T, &T) -> Ordering>(v1: T, v2: T, compare: F) -> T
|
||||||
|
where
|
||||||
|
T: ~const Destruct,
|
||||||
|
F: ~const Destruct,
|
||||||
|
{
|
||||||
match compare(&v1, &v2) {
|
match compare(&v1, &v2) {
|
||||||
Ordering::Less | Ordering::Equal => v1,
|
Ordering::Less | Ordering::Equal => v1,
|
||||||
Ordering::Greater => v2,
|
Ordering::Greater => v2,
|
||||||
@ -1244,8 +1250,24 @@ pub fn min_by<T, F: FnOnce(&T, &T) -> Ordering>(v1: T, v2: T, compare: F) -> T {
|
|||||||
#[inline]
|
#[inline]
|
||||||
#[must_use]
|
#[must_use]
|
||||||
#[stable(feature = "cmp_min_max_by", since = "1.53.0")]
|
#[stable(feature = "cmp_min_max_by", since = "1.53.0")]
|
||||||
pub fn min_by_key<T, F: FnMut(&T) -> K, K: Ord>(v1: T, v2: T, mut f: F) -> T {
|
#[rustc_const_unstable(feature = "const_cmp", issue = "92391")]
|
||||||
min_by(v1, v2, |v1, v2| f(v1).cmp(&f(v2)))
|
pub const fn min_by_key<T, F: ~const FnMut(&T) -> K, K: ~const Ord>(v1: T, v2: T, mut f: F) -> T
|
||||||
|
where
|
||||||
|
T: ~const Destruct,
|
||||||
|
F: ~const Destruct,
|
||||||
|
K: ~const Destruct,
|
||||||
|
{
|
||||||
|
const fn imp<T, F: ~const FnMut(&T) -> K, K: ~const Ord>(
|
||||||
|
f: &mut F,
|
||||||
|
(v1, v2): (&T, &T),
|
||||||
|
) -> Ordering
|
||||||
|
where
|
||||||
|
T: ~const Destruct,
|
||||||
|
K: ~const Destruct,
|
||||||
|
{
|
||||||
|
f(v1).cmp(&f(v2))
|
||||||
|
}
|
||||||
|
min_by(v1, v2, ConstFnMutClosure::new(&mut f, imp))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Compares and returns the maximum of two values.
|
/// Compares and returns the maximum of two values.
|
||||||
@ -1286,7 +1308,12 @@ pub const fn max<T: ~const Ord + ~const Destruct>(v1: T, v2: T) -> T {
|
|||||||
#[inline]
|
#[inline]
|
||||||
#[must_use]
|
#[must_use]
|
||||||
#[stable(feature = "cmp_min_max_by", since = "1.53.0")]
|
#[stable(feature = "cmp_min_max_by", since = "1.53.0")]
|
||||||
pub fn max_by<T, F: FnOnce(&T, &T) -> Ordering>(v1: T, v2: T, compare: F) -> T {
|
#[rustc_const_unstable(feature = "const_cmp", issue = "92391")]
|
||||||
|
pub const fn max_by<T, F: ~const FnOnce(&T, &T) -> Ordering>(v1: T, v2: T, compare: F) -> T
|
||||||
|
where
|
||||||
|
T: ~const Destruct,
|
||||||
|
F: ~const Destruct,
|
||||||
|
{
|
||||||
match compare(&v1, &v2) {
|
match compare(&v1, &v2) {
|
||||||
Ordering::Less | Ordering::Equal => v2,
|
Ordering::Less | Ordering::Equal => v2,
|
||||||
Ordering::Greater => v1,
|
Ordering::Greater => v1,
|
||||||
@ -1308,8 +1335,24 @@ pub fn max_by<T, F: FnOnce(&T, &T) -> Ordering>(v1: T, v2: T, compare: F) -> T {
|
|||||||
#[inline]
|
#[inline]
|
||||||
#[must_use]
|
#[must_use]
|
||||||
#[stable(feature = "cmp_min_max_by", since = "1.53.0")]
|
#[stable(feature = "cmp_min_max_by", since = "1.53.0")]
|
||||||
pub fn max_by_key<T, F: FnMut(&T) -> K, K: Ord>(v1: T, v2: T, mut f: F) -> T {
|
#[rustc_const_unstable(feature = "const_cmp", issue = "92391")]
|
||||||
max_by(v1, v2, |v1, v2| f(v1).cmp(&f(v2)))
|
pub const fn max_by_key<T, F: ~const FnMut(&T) -> K, K: ~const Ord>(v1: T, v2: T, mut f: F) -> T
|
||||||
|
where
|
||||||
|
T: ~const Destruct,
|
||||||
|
F: ~const Destruct,
|
||||||
|
K: ~const Destruct,
|
||||||
|
{
|
||||||
|
const fn imp<T, F: ~const FnMut(&T) -> K, K: ~const Ord>(
|
||||||
|
f: &mut F,
|
||||||
|
(v1, v2): (&T, &T),
|
||||||
|
) -> Ordering
|
||||||
|
where
|
||||||
|
T: ~const Destruct,
|
||||||
|
K: ~const Destruct,
|
||||||
|
{
|
||||||
|
f(v1).cmp(&f(v2))
|
||||||
|
}
|
||||||
|
max_by(v1, v2, ConstFnMutClosure::new(&mut f, imp))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implementation of PartialEq, Eq, PartialOrd and Ord for primitive types
|
// Implementation of PartialEq, Eq, PartialOrd and Ord for primitive types
|
||||||
|
Loading…
Reference in New Issue
Block a user