1.28.0[][src]Trait std::ops::RangeBounds

pub trait RangeBounds<T> where
    T: ?Sized
{ fn start_bound(&self) -> Bound<&T>;
fn end_bound(&self) -> Bound<&T>; fn assert_len(self, len: usize) -> Range<usize>

Notable traits for Range<A>

impl<A> Iterator for Range<A> where
    A: Step
type Item = A;

    where
        Self: RangeBounds<usize>
, { ... }
fn contains<U>(&self, item: &U) -> bool
    where
        T: PartialOrd<U>,
        U: PartialOrd<T> + ?Sized
, { ... } }

RangeBounds is implemented by Rust's built-in range types, produced by range syntax like .., a.., ..b, ..=c, d..e, or f..=g.

Required methods

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

Start index bound.

Returns the start value as a Bound.

Examples

use std::ops::Bound::*;
use std::ops::RangeBounds;

assert_eq!((..10).start_bound(), Unbounded);
assert_eq!((3..10).start_bound(), Included(&3));
Run

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

End index bound.

Returns the end value as a Bound.

Examples

use std::ops::Bound::*;
use std::ops::RangeBounds;

assert_eq!((3..).end_bound(), Unbounded);
assert_eq!((3..10).end_bound(), Excluded(&10));
Run
Loading content...

Provided methods

fn assert_len(self, len: usize) -> Range<usize>

Notable traits for Range<A>

impl<A> Iterator for Range<A> where
    A: Step
type Item = A;
where
    Self: RangeBounds<usize>, 

🔬 This is a nightly-only experimental API. (range_bounds_assert_len #76393)

Performs bounds-checking of this range.

The returned Range is safe to pass to slice::get_unchecked and slice::get_unchecked_mut for slices of the given length.

Panics

Panics if the range would be out of bounds.

Examples

#![feature(range_bounds_assert_len)]

use std::ops::RangeBounds;

let v = [10, 40, 30];
assert_eq!(1..2, (1..2).assert_len(v.len()));
assert_eq!(0..2, (..2).assert_len(v.len()));
assert_eq!(1..3, (1..).assert_len(v.len()));
Run

Panics when Index::index would panic:

This example panics
#![feature(range_bounds_assert_len)]

use std::ops::RangeBounds;

(2..1).assert_len(3);
Run
This example panics
#![feature(range_bounds_assert_len)]

use std::ops::RangeBounds;

(1..4).assert_len(3);
Run
This example panics
#![feature(range_bounds_assert_len)]

use std::ops::RangeBounds;

(1..=usize::MAX).assert_len(3);
Run

fn contains<U>(&self, item: &U) -> bool where
    T: PartialOrd<U>,
    U: PartialOrd<T> + ?Sized
1.35.0

Returns true if item is contained in the range.

Examples

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

assert!( (0.0..1.0).contains(&0.5));
assert!(!(0.0..1.0).contains(&f32::NAN));
assert!(!(0.0..f32::NAN).contains(&0.5));
assert!(!(f32::NAN..1.0).contains(&0.5));
Run
Loading content...

Implementors

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

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

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

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

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

impl<'a, T> RangeBounds<T> for (Bound<&'a T>, Bound<&'a T>) where
    T: 'a + ?Sized
[src]

impl<T> RangeBounds<T> for (Bound<T>, Bound<T>)[src]

impl<T> RangeBounds<T> for Range<T>[src]

impl<T> RangeBounds<T> for RangeFrom<T>[src]

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

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

impl<T> RangeBounds<T> for RangeTo<T>[src]

impl<T> RangeBounds<T> for RangeToInclusive<T>[src]

Loading content...