fixedbitset/
range.rs

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