RangeInclusive

Struct RangeInclusive 

1.26.0 · Source
pub struct RangeInclusive<Idx> { /* private fields */ }
Expand description

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§

Source§

impl<Idx> RangeInclusive<Idx>

1.27.0 (const: 1.32.0) · Source

pub const fn new(start: Idx, end: Idx) -> Self

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

§Examples
use std::ops::RangeInclusive;

assert_eq!(3..=5, RangeInclusive::new(3, 5));
1.27.0 (const: 1.32.0) · Source

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

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);
1.27.0 (const: 1.32.0) · Source

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

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);
1.27.0 (const: unstable) · Source

pub fn into_inner(self) -> (Idx, Idx)

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));

Trait Implementations§

Source§

impl<T> IntoBounds<T> for RangeInclusive<T>

Source§

fn into_bounds(self) -> (Bound<T>, Bound<T>)

🔬This is a nightly-only experimental API. (range_into_bounds #136903)
Convert this range into the start and end bounds. Returns (start_bound, end_bound). Read more
1.28.0 (const: unstable) · Source§

impl<T> RangeBounds<T> for RangeInclusive<&T>

If you need to use this implementation where T is unsized, consider using the RangeBounds impl for a 2-tuple of Bound<&T>, i.e. replace start..=end with (Bound::Included(start), Bound::Included(end)).

Source§

fn start_bound(&self) -> Bound<&T>

Start index bound. Read more
Source§

fn end_bound(&self) -> Bound<&T>

End index bound. Read more
1.28.0 (const: unstable) · Source§

impl<T> RangeBounds<T> for RangeInclusive<T>

Source§

fn start_bound(&self) -> Bound<&T>

Start index bound. Read more
Source§

fn end_bound(&self) -> Bound<&T>

End index bound. Read more
1.26.0 (const: unstable) · Source§

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

The methods index and index_mut panic if:

  • the end of the range is usize::MAX or
  • the start of the range is greater than the end of the range or
  • the end of the range is out of bounds.
Source§

type Output = [T]

The output type returned by methods.
Source§

fn get(self, slice: &[T]) -> Option<&[T]>

🔬This is a nightly-only experimental API. (slice_index_methods)
Returns a shared reference to the output at this location, if in bounds.
Source§

fn get_mut(self, slice: &mut [T]) -> Option<&mut [T]>

🔬This is a nightly-only experimental API. (slice_index_methods)
Returns a mutable reference to the output at this location, if in bounds.
Source§

unsafe fn get_unchecked(self, slice: *const [T]) -> *const [T]

🔬This is a nightly-only experimental API. (slice_index_methods)
Returns a pointer to the output at this location, without performing any bounds checking. Read more
Source§

unsafe fn get_unchecked_mut(self, slice: *mut [T]) -> *mut [T]

🔬This is a nightly-only experimental API. (slice_index_methods)
Returns a mutable pointer to the output at this location, without performing any bounds checking. Read more
Source§

fn index(self, slice: &[T]) -> &[T]

🔬This is a nightly-only experimental API. (slice_index_methods)
Returns a shared reference to the output at this location, panicking if out of bounds.
Source§

fn index_mut(self, slice: &mut [T]) -> &mut [T]

🔬This is a nightly-only experimental API. (slice_index_methods)
Returns a mutable reference to the output at this location, panicking if out of bounds.

Auto Trait Implementations§

§

impl<Idx> Freeze for RangeInclusive<Idx>
where Idx: Freeze,

§

impl<Idx> Send for RangeInclusive<Idx>
where Idx: Send,

§

impl<Idx> Sync for RangeInclusive<Idx>
where Idx: Sync,

§

impl<Idx> Unpin for RangeInclusive<Idx>
where Idx: Unpin,

Blanket Implementations§

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.