# 1.28.0[−][src]Trait core::ops::RangeBounds

###

    pub trait RangeBounds<T: ?Sized> {
        pub fn start_bound(&self) -> Bound<&T>;
        pub fn end_bound(&self) -> Bound<&T>;

        pub fn assert_len(self, len: usize) -> Range<usize>ⓘNotable traits for Range<A>impl<A: Step> Iterator for Range<A>    type Item = A;
        where
            Self: RangeBounds<usize>,
        { ... }
        pub fn contains<U: ?Sized>(&self, item: &U) -> bool
        where
            T: PartialOrd<U>,
            U: PartialOrd<T>,
        { ... }
    }

`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

### `pub fn start_bound(&self) -> Bound<&T>`[src]

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

### `pub fn end_bound(&self) -> Bound<&T>`[src]

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

### `pub fn assert_len(self, len: usize) -> Range<usize>ⓘ

### Notable traits for Range<A>

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

🔬 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:

ⓘ

    #![feature(range_bounds_assert_len)]

    use std::ops::RangeBounds;

    (2..1).assert_len(3);

Run
ⓘ

    #![feature(range_bounds_assert_len)]

    use std::ops::RangeBounds;

    (1..4).assert_len(3);

Run
ⓘ

    #![feature(range_bounds_assert_len)]

    use std::ops::RangeBounds;

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

Run

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

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<'a, T: ?Sized + 'a> RangeBounds<T> for (Bound<&'a T>, Bound<&'a T>)`[src]

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

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

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

### `impl<T> RangeBounds<T> for Range<&T>`[src]

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

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

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

### `impl<T> RangeBounds<T> for RangeFrom<&T>`[src]

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

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

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

### `impl<T> RangeBounds<T> for RangeInclusive<&T>`[src]

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

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

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

### `impl<T> RangeBounds<T> for RangeTo<&T>`[src]

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

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

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

### `impl<T> RangeBounds<T> for RangeToInclusive<&T>`[src]

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

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

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

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

#### `pub fn start_bound(&self) -> Bound<&T>`[src]

#### `pub fn end_bound(&self) -> Bound<&T>`[src]

Loading content...