Struct sp_std::ops::RangeInclusive1.26.0[][src]

#[lang = "RangeInclusive"]pub struct RangeInclusive<Idx> { /* fields omitted */ }

A range bounded inclusively below and above (start..=end).

The RangeInclusive start..=end contains all values with x >= start and x <= end. It is empty unless start <= end.

This iterator is fused, but the specific values of start and end after iteration has finished are unspecified other than that .is_empty() will return true once no more values will be produced.

Examples

The start..=end syntax is a RangeInclusive:

assert_eq!((3..=5), std::ops::RangeInclusive::new(3, 5));
assert_eq!(3 + 4 + 5, (3..=5).sum());
let arr = [0, 1, 2, 3, 4];
assert_eq!(arr[ ..  ], [0, 1, 2, 3, 4]);
assert_eq!(arr[ .. 3], [0, 1, 2      ]);
assert_eq!(arr[ ..=3], [0, 1, 2, 3   ]);
assert_eq!(arr[1..  ], [   1, 2, 3, 4]);
assert_eq!(arr[1.. 3], [   1, 2      ]);
assert_eq!(arr[1..=3], [   1, 2, 3   ]); // This is a `RangeInclusive`

Implementations

impl<Idx> RangeInclusive<Idx>[src]

#[lang = "range_inclusive_new"]pub const fn new(start: Idx, end: Idx) -> RangeInclusive<Idx>

Notable traits for RangeInclusive<A>

impl<A> Iterator for RangeInclusive<A> where
    A: Step
type Item = A;
1.27.0 (const: 1.32.0)[src]

Creates a new inclusive range. Equivalent to writing start..=end.

Examples

use std::ops::RangeInclusive;

assert_eq!(3..=5, RangeInclusive::new(3, 5));

pub const fn start(&self) -> &Idx

Notable traits for &'_ mut I

impl<'_, I> Iterator for &'_ mut I where
    I: Iterator + ?Sized
type Item = <I as Iterator>::Item;
1.27.0 (const: 1.32.0)[src]

Returns the lower bound of the range (inclusive).

When using an inclusive range for iteration, the values of start() and end() are unspecified after the iteration ended. To determine whether the inclusive range is empty, use the is_empty() method instead of comparing start() > end().

Note: the value returned by this method is unspecified after the range has been iterated to exhaustion.

Examples

assert_eq!((3..=5).start(), &3);

pub const fn end(&self) -> &Idx

Notable traits for &'_ mut I

impl<'_, I> Iterator for &'_ mut I where
    I: Iterator + ?Sized
type Item = <I as Iterator>::Item;
1.27.0 (const: 1.32.0)[src]

Returns the upper bound of the range (inclusive).

When using an inclusive range for iteration, the values of start() and end() are unspecified after the iteration ended. To determine whether the inclusive range is empty, use the is_empty() method instead of comparing start() > end().

Note: the value returned by this method is unspecified after the range has been iterated to exhaustion.

Examples

assert_eq!((3..=5).end(), &5);

pub fn into_inner(self) -> (Idx, Idx)1.27.0[src]

Destructures the RangeInclusive into (lower bound, upper (inclusive) bound).

Note: the value returned by this method is unspecified after the range has been iterated to exhaustion.

Examples

assert_eq!((3..=5).into_inner(), (3, 5));

impl<Idx> RangeInclusive<Idx> where
    Idx: PartialOrd<Idx>, 
[src]

pub fn contains<U>(&self, item: &U) -> bool where
    Idx: PartialOrd<U>,
    U: PartialOrd<Idx> + ?Sized
1.35.0[src]

Returns true if item is contained in the range.

Examples

assert!(!(3..=5).contains(&2));
assert!( (3..=5).contains(&3));
assert!( (3..=5).contains(&4));
assert!( (3..=5).contains(&5));
assert!(!(3..=5).contains(&6));

assert!( (3..=3).contains(&3));
assert!(!(3..=2).contains(&3));

assert!( (0.0..=1.0).contains(&1.0));
assert!(!(0.0..=1.0).contains(&f32::NAN));
assert!(!(0.0..=f32::NAN).contains(&0.0));
assert!(!(f32::NAN..=1.0).contains(&1.0));

This method always returns false after iteration has finished:

let mut r = 3..=5;
assert!(r.contains(&3) && r.contains(&5));
for _ in r.by_ref() {}
// Precise field values are unspecified here
assert!(!r.contains(&3) && !r.contains(&5));

pub fn is_empty(&self) -> bool1.47.0[src]

Returns true if the range contains no items.

Examples

assert!(!(3..=5).is_empty());
assert!(!(3..=3).is_empty());
assert!( (3..=2).is_empty());

The range is empty if either side is incomparable:

assert!(!(3.0..=5.0).is_empty());
assert!( (3.0..=f32::NAN).is_empty());
assert!( (f32::NAN..=5.0).is_empty());

This method returns true after iteration has finished:

let mut r = 3..=5;
for _ in r.by_ref() {}
// Precise field values are unspecified here
assert!(r.is_empty());

Trait Implementations

impl<Idx> Clone for RangeInclusive<Idx> where
    Idx: Clone
[src]

impl<Idx> Debug for RangeInclusive<Idx> where
    Idx: Debug
[src]

impl<A> DoubleEndedIterator for RangeInclusive<A> where
    A: Step
[src]

impl<Idx> Eq for RangeInclusive<Idx> where
    Idx: Eq
[src]

impl ExactSizeIterator for RangeInclusive<u16>[src]

impl ExactSizeIterator for RangeInclusive<u8>[src]

impl ExactSizeIterator for RangeInclusive<i16>[src]

impl ExactSizeIterator for RangeInclusive<i8>[src]

impl<A> FusedIterator for RangeInclusive<A> where
    A: Step
[src]

impl<Idx> Hash for RangeInclusive<Idx> where
    Idx: Hash
[src]

impl Index<RangeInclusive<usize>> for String[src]

type Output = str

The returned type after indexing.

impl IndexMut<RangeInclusive<usize>> for String[src]

impl<A> Iterator for RangeInclusive<A> where
    A: Step
[src]

type Item = A

The type of the elements being iterated over.

impl<Idx> PartialEq<RangeInclusive<Idx>> for RangeInclusive<Idx> where
    Idx: PartialEq<Idx>, 
[src]

impl<'_, T> RangeBounds<T> for RangeInclusive<&'_ T>1.28.0[src]

impl<T> RangeBounds<T> for RangeInclusive<T>1.28.0[src]

impl<T> SliceIndex<[T]> for RangeInclusive<usize>[src]

type Output = [T]

The output type returned by methods.

impl SliceIndex<str> for RangeInclusive<usize>[src]

Implements substring slicing with syntax &self[begin ..= end] or &mut self[begin ..= end].

Returns a slice of the given string from the byte range [begin, end]. Equivalent to &self [begin .. end + 1] or &mut self[begin .. end + 1], except if end has the maximum value for usize.

This operation is O(1).

Panics

Panics if begin does not point to the starting byte offset of a character (as defined by is_char_boundary), if end does not point to the ending byte offset of a character (end + 1 is either a starting byte offset or equal to len), if begin > end, or if end >= len.

type Output = str

The output type returned by methods.

impl<Idx> StructuralEq for RangeInclusive<Idx>[src]

impl<Idx> StructuralPartialEq for RangeInclusive<Idx>[src]

impl<A> TrustedLen for RangeInclusive<A> where
    A: Step
[src]

Auto Trait Implementations

impl<Idx> RefUnwindSafe for RangeInclusive<Idx> where
    Idx: RefUnwindSafe
[src]

impl<Idx> Send for RangeInclusive<Idx> where
    Idx: Send
[src]

impl<Idx> Sync for RangeInclusive<Idx> where
    Idx: Sync
[src]

impl<Idx> Unpin for RangeInclusive<Idx> where
    Idx: Unpin
[src]

impl<Idx> UnwindSafe for RangeInclusive<Idx> where
    Idx: UnwindSafe
[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<I> IntoIterator for I where
    I: Iterator
[src]

type Item = <I as Iterator>::Item

The type of the elements being iterated over.

type IntoIter = I

Which kind of iterator are we turning this into?

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.