pub trait RangeBounds<T: ?Sized> {
// Required methods
fn start_bound(&self) -> Bound<&T>;
fn end_bound(&self) -> Bound<&T>;
// Provided methods
fn contains<U>(&self, item: &U) -> bool
where T: PartialOrd<U>,
U: ?Sized + PartialOrd<T> { ... }
fn is_empty(&self) -> bool
where T: PartialOrd { ... }
}
🔬This is a nightly-only experimental API. (
new_range_api
#125687)Expand description
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§
1.28.0 · Sourcefn start_bound(&self) -> Bound<&T>
fn start_bound(&self) -> Bound<&T>
Provided Methods§
1.35.0 · Sourcefn contains<U>(&self, item: &U) -> bool
fn contains<U>(&self, item: &U) -> bool
Returns true
if item
is contained in the range.
§Examples
Sourcefn is_empty(&self) -> boolwhere
T: PartialOrd,
🔬This is a nightly-only experimental API. (range_bounds_is_empty
#137300)
fn is_empty(&self) -> boolwhere
T: PartialOrd,
range_bounds_is_empty
#137300)Returns true
if the range contains no items.
One-sided ranges (RangeFrom
, etc) always return false
.
§Examples
#![feature(range_bounds_is_empty)]
use std::ops::RangeBounds;
assert!(!(3..).is_empty());
assert!(!(..2).is_empty());
assert!(!RangeBounds::is_empty(&(3..5)));
assert!( RangeBounds::is_empty(&(3..3)));
assert!( RangeBounds::is_empty(&(3..2)));
The range is empty if either side is incomparable:
#![feature(range_bounds_is_empty)]
use std::ops::RangeBounds;
assert!(!RangeBounds::is_empty(&(3.0..5.0)));
assert!( RangeBounds::is_empty(&(3.0..f32::NAN)));
assert!( RangeBounds::is_empty(&(f32::NAN..5.0)));
But never empty is either side is unbounded:
#![feature(range_bounds_is_empty)]
use std::ops::RangeBounds;
assert!(!(..0).is_empty());
assert!(!(i32::MAX..).is_empty());
assert!(!RangeBounds::<u8>::is_empty(&(..)));
(Excluded(a), Excluded(b))
is only empty if a >= b
:
#![feature(range_bounds_is_empty)]
use std::ops::Bound::*;
use std::ops::RangeBounds;
assert!(!(Excluded(1), Excluded(3)).is_empty());
assert!(!(Excluded(1), Excluded(2)).is_empty());
assert!( (Excluded(1), Excluded(1)).is_empty());
assert!( (Excluded(2), Excluded(1)).is_empty());
assert!( (Excluded(3), Excluded(1)).is_empty());
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.