[go: up one dir, main page]

odds/
range.rs

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