提交 266ca31f 编写于 作者: S Steven Malis

Stabilize Range*::contains.

上级 8f4c226f
...@@ -67,7 +67,7 @@ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { ...@@ -67,7 +67,7 @@ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
/// assert_eq!(arr[1..3], [ 'b', 'c' ]); // Range /// assert_eq!(arr[1..3], [ 'b', 'c' ]); // Range
/// ``` /// ```
#[doc(alias = "..")] #[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")] #[stable(feature = "rust1", since = "1.0.0")]
pub struct Range<Idx> { pub struct Range<Idx> {
/// The lower bound of the range (inclusive). /// The lower bound of the range (inclusive).
...@@ -91,8 +91,6 @@ impl<Idx: PartialOrd<Idx>> Range<Idx> { ...@@ -91,8 +91,6 @@ impl<Idx: PartialOrd<Idx>> Range<Idx> {
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// #![feature(range_contains)]
///
/// use std::f32; /// use std::f32;
/// ///
/// assert!(!(3..5).contains(&2)); /// assert!(!(3..5).contains(&2));
...@@ -108,7 +106,7 @@ impl<Idx: PartialOrd<Idx>> Range<Idx> { ...@@ -108,7 +106,7 @@ impl<Idx: PartialOrd<Idx>> Range<Idx> {
/// assert!(!(0.0..f32::NAN).contains(&0.5)); /// assert!(!(0.0..f32::NAN).contains(&0.5));
/// assert!(!(f32::NAN..1.0).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 pub fn contains<U>(&self, item: &U) -> bool
where where
Idx: PartialOrd<U>, Idx: PartialOrd<U>,
...@@ -169,7 +167,7 @@ pub fn is_empty(&self) -> bool { ...@@ -169,7 +167,7 @@ pub fn is_empty(&self) -> bool {
/// ///
/// [`Iterator`]: ../iter/trait.IntoIterator.html /// [`Iterator`]: ../iter/trait.IntoIterator.html
#[doc(alias = "..")] #[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")] #[stable(feature = "rust1", since = "1.0.0")]
pub struct RangeFrom<Idx> { pub struct RangeFrom<Idx> {
/// The lower bound of the range (inclusive). /// The lower bound of the range (inclusive).
...@@ -190,8 +188,6 @@ impl<Idx: PartialOrd<Idx>> RangeFrom<Idx> { ...@@ -190,8 +188,6 @@ impl<Idx: PartialOrd<Idx>> RangeFrom<Idx> {
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// #![feature(range_contains)]
///
/// use std::f32; /// use std::f32;
/// ///
/// assert!(!(3..).contains(&2)); /// assert!(!(3..).contains(&2));
...@@ -202,7 +198,7 @@ impl<Idx: PartialOrd<Idx>> RangeFrom<Idx> { ...@@ -202,7 +198,7 @@ impl<Idx: PartialOrd<Idx>> RangeFrom<Idx> {
/// assert!(!(0.0..).contains(&f32::NAN)); /// assert!(!(0.0..).contains(&f32::NAN));
/// assert!(!(f32::NAN..).contains(&0.5)); /// 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 pub fn contains<U>(&self, item: &U) -> bool
where where
Idx: PartialOrd<U>, Idx: PartialOrd<U>,
...@@ -272,8 +268,6 @@ impl<Idx: PartialOrd<Idx>> RangeTo<Idx> { ...@@ -272,8 +268,6 @@ impl<Idx: PartialOrd<Idx>> RangeTo<Idx> {
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// #![feature(range_contains)]
///
/// use std::f32; /// use std::f32;
/// ///
/// assert!( (..5).contains(&-1_000_000_000)); /// assert!( (..5).contains(&-1_000_000_000));
...@@ -284,7 +278,7 @@ impl<Idx: PartialOrd<Idx>> RangeTo<Idx> { ...@@ -284,7 +278,7 @@ impl<Idx: PartialOrd<Idx>> RangeTo<Idx> {
/// assert!(!(..1.0).contains(&f32::NAN)); /// assert!(!(..1.0).contains(&f32::NAN));
/// assert!(!(..f32::NAN).contains(&0.5)); /// 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 pub fn contains<U>(&self, item: &U) -> bool
where where
Idx: PartialOrd<U>, Idx: PartialOrd<U>,
...@@ -317,7 +311,7 @@ pub fn contains<U>(&self, item: &U) -> bool ...@@ -317,7 +311,7 @@ pub fn contains<U>(&self, item: &U) -> bool
/// assert_eq!(arr[1..=2], [ 1,2 ]); // RangeInclusive /// assert_eq!(arr[1..=2], [ 1,2 ]); // RangeInclusive
/// ``` /// ```
#[doc(alias = "..=")] #[doc(alias = "..=")]
#[derive(Clone)] // not Copy -- see #27186 #[derive(Clone)] // not Copy -- see #27186
#[stable(feature = "inclusive_range", since = "1.26.0")] #[stable(feature = "inclusive_range", since = "1.26.0")]
pub struct RangeInclusive<Idx> { pub struct RangeInclusive<Idx> {
pub(crate) start: Idx, pub(crate) start: Idx,
...@@ -353,7 +347,8 @@ fn canonicalized_is_empty(range: &RangeInclusive<Self>) -> bool { ...@@ -353,7 +347,8 @@ fn canonicalized_is_empty(range: &RangeInclusive<Self>) -> bool {
impl<Idx: PartialEq> PartialEq for RangeInclusive<Idx> { impl<Idx: PartialEq> PartialEq for RangeInclusive<Idx> {
#[inline] #[inline]
fn eq(&self, other: &Self) -> bool { 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(self)
== RangeInclusiveEquality::canonicalized_is_empty(other) == RangeInclusiveEquality::canonicalized_is_empty(other)
} }
...@@ -385,7 +380,11 @@ impl<Idx> RangeInclusive<Idx> { ...@@ -385,7 +380,11 @@ impl<Idx> RangeInclusive<Idx> {
#[inline] #[inline]
#[rustc_promotable] #[rustc_promotable]
pub const fn new(start: Idx, end: Idx) -> Self { 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). /// Returns the lower bound of the range (inclusive).
...@@ -466,8 +465,6 @@ impl<Idx: PartialOrd<Idx>> RangeInclusive<Idx> { ...@@ -466,8 +465,6 @@ impl<Idx: PartialOrd<Idx>> RangeInclusive<Idx> {
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// #![feature(range_contains)]
///
/// use std::f32; /// use std::f32;
/// ///
/// assert!(!(3..=5).contains(&2)); /// assert!(!(3..=5).contains(&2));
...@@ -484,7 +481,7 @@ impl<Idx: PartialOrd<Idx>> RangeInclusive<Idx> { ...@@ -484,7 +481,7 @@ impl<Idx: PartialOrd<Idx>> RangeInclusive<Idx> {
/// assert!(!(0.0..=f32::NAN).contains(&0.0)); /// assert!(!(0.0..=f32::NAN).contains(&0.0));
/// assert!(!(f32::NAN..=1.0).contains(&1.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 pub fn contains<U>(&self, item: &U) -> bool
where where
Idx: PartialOrd<U>, Idx: PartialOrd<U>,
...@@ -593,15 +590,12 @@ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { ...@@ -593,15 +590,12 @@ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
} }
} }
#[unstable(feature = "range_contains", reason = "recently added as per RFC", issue = "32311")]
impl<Idx: PartialOrd<Idx>> RangeToInclusive<Idx> { impl<Idx: PartialOrd<Idx>> RangeToInclusive<Idx> {
/// Returns `true` if `item` is contained in the range. /// Returns `true` if `item` is contained in the range.
/// ///
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// #![feature(range_contains)]
///
/// use std::f32; /// use std::f32;
/// ///
/// assert!( (..=5).contains(&-1_000_000_000)); /// assert!( (..=5).contains(&-1_000_000_000));
...@@ -612,7 +606,7 @@ impl<Idx: PartialOrd<Idx>> RangeToInclusive<Idx> { ...@@ -612,7 +606,7 @@ impl<Idx: PartialOrd<Idx>> RangeToInclusive<Idx> {
/// assert!(!(..=1.0).contains(&f32::NAN)); /// assert!(!(..=1.0).contains(&f32::NAN));
/// assert!(!(..=f32::NAN).contains(&0.5)); /// 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 pub fn contains<U>(&self, item: &U) -> bool
where where
Idx: PartialOrd<U>, Idx: PartialOrd<U>,
...@@ -714,14 +708,11 @@ pub trait RangeBounds<T: ?Sized> { ...@@ -714,14 +708,11 @@ pub trait RangeBounds<T: ?Sized> {
#[stable(feature = "collections_range", since = "1.28.0")] #[stable(feature = "collections_range", since = "1.28.0")]
fn end_bound(&self) -> Bound<&T>; fn end_bound(&self) -> Bound<&T>;
/// Returns `true` if `item` is contained in the range. /// Returns `true` if `item` is contained in the range.
/// ///
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// #![feature(range_contains)]
///
/// use std::f32; /// use std::f32;
/// ///
/// assert!( (3..5).contains(&4)); /// assert!( (3..5).contains(&4));
...@@ -731,7 +722,7 @@ pub trait RangeBounds<T: ?Sized> { ...@@ -731,7 +722,7 @@ pub trait RangeBounds<T: ?Sized> {
/// assert!(!(0.0..1.0).contains(&f32::NAN)); /// assert!(!(0.0..1.0).contains(&f32::NAN));
/// assert!(!(0.0..f32::NAN).contains(&0.5)); /// assert!(!(0.0..f32::NAN).contains(&0.5));
/// assert!(!(f32::NAN..1.0).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 fn contains<U>(&self, item: &U) -> bool
where where
T: PartialOrd<U>, T: PartialOrd<U>,
...@@ -741,9 +732,7 @@ fn contains<U>(&self, item: &U) -> bool ...@@ -741,9 +732,7 @@ fn contains<U>(&self, item: &U) -> bool
Included(ref start) => *start <= item, Included(ref start) => *start <= item,
Excluded(ref start) => *start < item, Excluded(ref start) => *start < item,
Unbounded => true, Unbounded => true,
}) }) && (match self.end_bound() {
&&
(match self.end_bound() {
Included(ref end) => item <= *end, Included(ref end) => item <= *end,
Excluded(ref end) => item < *end, Excluded(ref end) => item < *end,
Unbounded => true, Unbounded => true,
...@@ -819,7 +808,7 @@ fn start_bound(&self) -> Bound<&T> { ...@@ -819,7 +808,7 @@ fn start_bound(&self) -> Bound<&T> {
match *self { match *self {
(Included(ref start), _) => Included(start), (Included(ref start), _) => Included(start),
(Excluded(ref start), _) => Excluded(start), (Excluded(ref start), _) => Excluded(start),
(Unbounded, _) => Unbounded, (Unbounded, _) => Unbounded,
} }
} }
...@@ -827,7 +816,7 @@ fn end_bound(&self) -> Bound<&T> { ...@@ -827,7 +816,7 @@ fn end_bound(&self) -> Bound<&T> {
match *self { match *self {
(_, Included(ref end)) => Included(end), (_, Included(ref end)) => Included(end),
(_, Excluded(ref end)) => Excluded(end), (_, Excluded(ref end)) => Excluded(end),
(_, Unbounded) => Unbounded, (_, Unbounded) => Unbounded,
} }
} }
} }
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#![allow(unused_attributes)] #![allow(unused_attributes)]
#![feature(libc)] #![feature(libc)]
#![feature(nll)] #![feature(nll)]
#![feature(range_contains)]
#![feature(rustc_diagnostic_macros)] #![feature(rustc_diagnostic_macros)]
#![feature(optin_builtin_traits)] #![feature(optin_builtin_traits)]
#![feature(concat_idents)] #![feature(concat_idents)]
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
#![feature(custom_attribute)] #![feature(custom_attribute)]
#![allow(unused_attributes)] #![allow(unused_attributes)]
#![feature(range_contains)]
#![cfg_attr(unix, feature(libc))] #![cfg_attr(unix, feature(libc))]
#![feature(nll)] #![feature(nll)]
#![feature(optin_builtin_traits)] #![feature(optin_builtin_traits)]
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#![feature(const_fn)] #![feature(const_fn)]
#![feature(decl_macro)] #![feature(decl_macro)]
#![feature(exhaustive_patterns)] #![feature(exhaustive_patterns)]
#![feature(range_contains)]
#![feature(rustc_diagnostic_macros)] #![feature(rustc_diagnostic_macros)]
#![feature(rustc_attrs)] #![feature(rustc_attrs)]
#![feature(never_type)] #![feature(never_type)]
......
...@@ -221,7 +221,7 @@ ...@@ -221,7 +221,7 @@
#![cfg_attr(test, feature(print_internals, set_stdio, test, update_panic_count))] #![cfg_attr(test, feature(print_internals, set_stdio, test, update_panic_count))]
#![cfg_attr(all(target_vendor = "fortanix", target_env = "sgx"), #![cfg_attr(all(target_vendor = "fortanix", target_env = "sgx"),
feature(global_asm, range_contains, slice_index_methods, feature(global_asm, slice_index_methods,
decl_macro, coerce_unsized, sgx_platform, ptr_wrapping_offset_from))] decl_macro, coerce_unsized, sgx_platform, ptr_wrapping_offset_from))]
// std is implemented with unstable features, many of which are internal // std is implemented with unstable features, many of which are internal
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册