diff options
Diffstat (limited to 'src/index.rs')
-rw-r--r-- | src/index.rs | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/index.rs b/src/index.rs index b1f6f452..daec02f7 100644 --- a/src/index.rs +++ b/src/index.rs @@ -17,7 +17,7 @@ /// Indexing types and implementations for Grid and Line use std::cmp::{Ord, Ordering}; use std::fmt; -use std::ops::{self, Deref, Add, Range}; +use std::ops::{self, Deref, Add, Range, RangeInclusive}; /// The side of a cell #[derive(Debug, Copy, Clone, Eq, PartialEq)] @@ -210,6 +210,29 @@ impl<T> From<Range<T>> for IndexRange<T> { } } +// can be removed if range_contains is stabilized + +pub trait Contains { + type Content; + fn contains_(&self, item: Self::Content) -> bool; +} + +impl<T: PartialOrd<T>> Contains for Range<T> { + type Content = T; + fn contains_(&self, item: Self::Content) -> bool { + (self.start <= item) && (item < self.end) + } +} + +impl<T: PartialOrd<T>> Contains for RangeInclusive<T> { + type Content = T; + fn contains_(&self, item: Self::Content) -> bool { + if let &RangeInclusive::NonEmpty{ref start, ref end} = self { + (*start <= item) && (item <= *end) + } else { false } + } +} + macro_rules! ops { ($ty:ty, $construct:expr) => { add!($ty, $construct); |