fixedbitset/
range.rs

1use core::ops::{Range, RangeFrom, RangeFull, RangeTo};
2
3// Taken from https://github.com/bluss/odds/blob/master/src/range.rs.
4
5/// **IndexRange** is implemented by Rust's built-in range types, produced
6/// by range syntax like `..`, `a..`, `..b` or `c..d`.
7pub trait IndexRange<T = usize> {
8    #[inline]
9    /// Start index (inclusive)
10    fn start(&self) -> Option<T> {
11        None
12    }
13    #[inline]
14    /// End index (exclusive)
15    fn end(&self) -> Option<T> {
16        None
17    }
18}
19
20impl<T> IndexRange<T> for RangeFull {}
21
22impl<T: Copy> IndexRange<T> for RangeFrom<T> {
23    #[inline]
24    fn start(&self) -> Option<T> {
25        Some(self.start)
26    }
27}
28
29impl<T: Copy> IndexRange<T> for RangeTo<T> {
30    #[inline]
31    fn end(&self) -> Option<T> {
32        Some(self.end)
33    }
34}
35
36impl<T: Copy> IndexRange<T> for Range<T> {
37    #[inline]
38    fn start(&self) -> Option<T> {
39        Some(self.start)
40    }
41    #[inline]
42    fn end(&self) -> Option<T> {
43        Some(self.end)
44    }
45}