|
|
|
@ -71,7 +71,7 @@ impl fmt::Debug for RangeFull {
|
|
|
|
|
/// assert_eq!(arr[1..=3], [ 1,2,3 ]);
|
|
|
|
|
/// ```
|
|
|
|
|
#[doc(alias = "..")]
|
|
|
|
|
#[derive(Clone, PartialEq, Eq, Hash)] // not Copy -- see #27186
|
|
|
|
|
#[derive(Clone, PartialEq, Eq, Hash)] // not Copy -- see #27186
|
|
|
|
|
#[stable(feature = "rust1", since = "1.0.0")]
|
|
|
|
|
pub struct Range<Idx> {
|
|
|
|
|
/// The lower bound of the range (inclusive).
|
|
|
|
@ -95,8 +95,6 @@ impl<Idx: PartialOrd<Idx>> Range<Idx> {
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(range_contains)]
|
|
|
|
|
///
|
|
|
|
|
/// use std::f32;
|
|
|
|
|
///
|
|
|
|
|
/// assert!(!(3..5).contains(&2));
|
|
|
|
@ -112,7 +110,7 @@ impl<Idx: PartialOrd<Idx>> Range<Idx> {
|
|
|
|
|
/// assert!(!(0.0..f32::NAN).contains(&0.5));
|
|
|
|
|
/// assert!(!(f32::NAN..1.0).contains(&0.5));
|
|
|
|
|
/// ```
|
|
|
|
|
#[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")]
|
|
|
|
|
#[stable(feature = "range_contains", since = "1.35.0")]
|
|
|
|
|
pub fn contains<U>(&self, item: &U) -> bool
|
|
|
|
|
where
|
|
|
|
|
Idx: PartialOrd<U>,
|
|
|
|
@ -175,7 +173,7 @@ impl<Idx: PartialOrd<Idx>> Range<Idx> {
|
|
|
|
|
///
|
|
|
|
|
/// [`Iterator`]: ../iter/trait.IntoIterator.html
|
|
|
|
|
#[doc(alias = "..")]
|
|
|
|
|
#[derive(Clone, PartialEq, Eq, Hash)] // not Copy -- see #27186
|
|
|
|
|
#[derive(Clone, PartialEq, Eq, Hash)] // not Copy -- see #27186
|
|
|
|
|
#[stable(feature = "rust1", since = "1.0.0")]
|
|
|
|
|
pub struct RangeFrom<Idx> {
|
|
|
|
|
/// The lower bound of the range (inclusive).
|
|
|
|
@ -196,8 +194,6 @@ impl<Idx: PartialOrd<Idx>> RangeFrom<Idx> {
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(range_contains)]
|
|
|
|
|
///
|
|
|
|
|
/// use std::f32;
|
|
|
|
|
///
|
|
|
|
|
/// assert!(!(3..).contains(&2));
|
|
|
|
@ -208,7 +204,7 @@ impl<Idx: PartialOrd<Idx>> RangeFrom<Idx> {
|
|
|
|
|
/// assert!(!(0.0..).contains(&f32::NAN));
|
|
|
|
|
/// assert!(!(f32::NAN..).contains(&0.5));
|
|
|
|
|
/// ```
|
|
|
|
|
#[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")]
|
|
|
|
|
#[stable(feature = "range_contains", since = "1.35.0")]
|
|
|
|
|
pub fn contains<U>(&self, item: &U) -> bool
|
|
|
|
|
where
|
|
|
|
|
Idx: PartialOrd<U>,
|
|
|
|
@ -280,8 +276,6 @@ impl<Idx: PartialOrd<Idx>> RangeTo<Idx> {
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(range_contains)]
|
|
|
|
|
///
|
|
|
|
|
/// use std::f32;
|
|
|
|
|
///
|
|
|
|
|
/// assert!( (..5).contains(&-1_000_000_000));
|
|
|
|
@ -292,7 +286,7 @@ impl<Idx: PartialOrd<Idx>> RangeTo<Idx> {
|
|
|
|
|
/// assert!(!(..1.0).contains(&f32::NAN));
|
|
|
|
|
/// assert!(!(..f32::NAN).contains(&0.5));
|
|
|
|
|
/// ```
|
|
|
|
|
#[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")]
|
|
|
|
|
#[stable(feature = "range_contains", since = "1.35.0")]
|
|
|
|
|
pub fn contains<U>(&self, item: &U) -> bool
|
|
|
|
|
where
|
|
|
|
|
Idx: PartialOrd<U>,
|
|
|
|
@ -329,7 +323,7 @@ impl<Idx: PartialOrd<Idx>> RangeTo<Idx> {
|
|
|
|
|
/// assert_eq!(arr[1..=3], [ 1,2,3 ]); // RangeInclusive
|
|
|
|
|
/// ```
|
|
|
|
|
#[doc(alias = "..=")]
|
|
|
|
|
#[derive(Clone)] // not Copy -- see #27186
|
|
|
|
|
#[derive(Clone)] // not Copy -- see #27186
|
|
|
|
|
#[stable(feature = "inclusive_range", since = "1.26.0")]
|
|
|
|
|
pub struct RangeInclusive<Idx> {
|
|
|
|
|
pub(crate) start: Idx,
|
|
|
|
@ -365,7 +359,8 @@ impl<T: PartialOrd> RangeInclusiveEquality for T {
|
|
|
|
|
impl<Idx: PartialEq> PartialEq for RangeInclusive<Idx> {
|
|
|
|
|
#[inline]
|
|
|
|
|
fn eq(&self, other: &Self) -> bool {
|
|
|
|
|
self.start == other.start && self.end == other.end
|
|
|
|
|
self.start == other.start
|
|
|
|
|
&& self.end == other.end
|
|
|
|
|
&& RangeInclusiveEquality::canonicalized_is_empty(self)
|
|
|
|
|
== RangeInclusiveEquality::canonicalized_is_empty(other)
|
|
|
|
|
}
|
|
|
|
@ -397,7 +392,11 @@ impl<Idx> RangeInclusive<Idx> {
|
|
|
|
|
#[inline]
|
|
|
|
|
#[rustc_promotable]
|
|
|
|
|
pub const fn new(start: Idx, end: Idx) -> Self {
|
|
|
|
|
Self { start, end, is_empty: None }
|
|
|
|
|
Self {
|
|
|
|
|
start,
|
|
|
|
|
end,
|
|
|
|
|
is_empty: None,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Returns the lower bound of the range (inclusive).
|
|
|
|
@ -478,8 +477,6 @@ impl<Idx: PartialOrd<Idx>> RangeInclusive<Idx> {
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(range_contains)]
|
|
|
|
|
///
|
|
|
|
|
/// use std::f32;
|
|
|
|
|
///
|
|
|
|
|
/// assert!(!(3..=5).contains(&2));
|
|
|
|
@ -496,7 +493,7 @@ impl<Idx: PartialOrd<Idx>> RangeInclusive<Idx> {
|
|
|
|
|
/// assert!(!(0.0..=f32::NAN).contains(&0.0));
|
|
|
|
|
/// assert!(!(f32::NAN..=1.0).contains(&1.0));
|
|
|
|
|
/// ```
|
|
|
|
|
#[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")]
|
|
|
|
|
#[stable(feature = "range_contains", since = "1.35.0")]
|
|
|
|
|
pub fn contains<U>(&self, item: &U) -> bool
|
|
|
|
|
where
|
|
|
|
|
Idx: PartialOrd<U>,
|
|
|
|
@ -609,15 +606,12 @@ impl<Idx: fmt::Debug> fmt::Debug for RangeToInclusive<Idx> {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")]
|
|
|
|
|
impl<Idx: PartialOrd<Idx>> RangeToInclusive<Idx> {
|
|
|
|
|
/// Returns `true` if `item` is contained in the range.
|
|
|
|
|
///
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(range_contains)]
|
|
|
|
|
///
|
|
|
|
|
/// use std::f32;
|
|
|
|
|
///
|
|
|
|
|
/// assert!( (..=5).contains(&-1_000_000_000));
|
|
|
|
@ -628,7 +622,7 @@ impl<Idx: PartialOrd<Idx>> RangeToInclusive<Idx> {
|
|
|
|
|
/// assert!(!(..=1.0).contains(&f32::NAN));
|
|
|
|
|
/// assert!(!(..=f32::NAN).contains(&0.5));
|
|
|
|
|
/// ```
|
|
|
|
|
#[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")]
|
|
|
|
|
#[stable(feature = "range_contains", since = "1.35.0")]
|
|
|
|
|
pub fn contains<U>(&self, item: &U) -> bool
|
|
|
|
|
where
|
|
|
|
|
Idx: PartialOrd<U>,
|
|
|
|
@ -730,14 +724,11 @@ pub trait RangeBounds<T: ?Sized> {
|
|
|
|
|
#[stable(feature = "collections_range", since = "1.28.0")]
|
|
|
|
|
fn end_bound(&self) -> Bound<&T>;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Returns `true` if `item` is contained in the range.
|
|
|
|
|
///
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(range_contains)]
|
|
|
|
|
///
|
|
|
|
|
/// use std::f32;
|
|
|
|
|
///
|
|
|
|
|
/// assert!( (3..5).contains(&4));
|
|
|
|
@ -747,7 +738,7 @@ pub trait RangeBounds<T: ?Sized> {
|
|
|
|
|
/// assert!(!(0.0..1.0).contains(&f32::NAN));
|
|
|
|
|
/// assert!(!(0.0..f32::NAN).contains(&0.5));
|
|
|
|
|
/// assert!(!(f32::NAN..1.0).contains(&0.5));
|
|
|
|
|
#[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")]
|
|
|
|
|
#[stable(feature = "range_contains", since = "1.35.0")]
|
|
|
|
|
fn contains<U>(&self, item: &U) -> bool
|
|
|
|
|
where
|
|
|
|
|
T: PartialOrd<U>,
|
|
|
|
@ -757,9 +748,7 @@ pub trait RangeBounds<T: ?Sized> {
|
|
|
|
|
Included(ref start) => *start <= item,
|
|
|
|
|
Excluded(ref start) => *start < item,
|
|
|
|
|
Unbounded => true,
|
|
|
|
|
})
|
|
|
|
|
&&
|
|
|
|
|
(match self.end_bound() {
|
|
|
|
|
}) && (match self.end_bound() {
|
|
|
|
|
Included(ref end) => item <= *end,
|
|
|
|
|
Excluded(ref end) => item < *end,
|
|
|
|
|
Unbounded => true,
|
|
|
|
@ -835,7 +824,7 @@ impl<T> RangeBounds<T> for (Bound<T>, Bound<T>) {
|
|
|
|
|
match *self {
|
|
|
|
|
(Included(ref start), _) => Included(start),
|
|
|
|
|
(Excluded(ref start), _) => Excluded(start),
|
|
|
|
|
(Unbounded, _) => Unbounded,
|
|
|
|
|
(Unbounded, _) => Unbounded,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -843,7 +832,7 @@ impl<T> RangeBounds<T> for (Bound<T>, Bound<T>) {
|
|
|
|
|
match *self {
|
|
|
|
|
(_, Included(ref end)) => Included(end),
|
|
|
|
|
(_, Excluded(ref end)) => Excluded(end),
|
|
|
|
|
(_, Unbounded) => Unbounded,
|
|
|
|
|
(_, Unbounded) => Unbounded,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|