summaryrefslogtreecommitdiff
path: root/src/index.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.rs')
-rw-r--r--src/index.rs90
1 files changed, 2 insertions, 88 deletions
diff --git a/src/index.rs b/src/index.rs
index 93f1727e..afeaa271 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)]
@@ -228,88 +228,6 @@ impl<T> From<Range<T>> for IndexRange<T> {
}
}
-pub enum RangeInclusive<Idx> {
- Empty {
- at: Idx,
- },
- NonEmpty {
- start: Idx,
- end: Idx,
- },
-}
-
-impl<Idx> RangeInclusive<Idx> {
- pub fn new(from: Idx, to: Idx) -> Self {
- RangeInclusive::NonEmpty {
- start: from,
- end: to
- }
- }
-}
-
-macro_rules! inclusive {
- ($ty:ty, $steps_add_one:expr) => {
- // impl copied from stdlib, can be removed when inclusive_range is stabilized
- impl Iterator for RangeInclusive<$ty> {
- type Item = $ty;
-
- #[inline]
- fn next(&mut self) -> Option<$ty> {
- use crate::index::RangeInclusive::*;
-
- match *self {
- Empty { .. } => None, // empty iterators yield no values
-
- NonEmpty { ref mut start, ref mut end } => {
-
- // march start towards (maybe past!) end and yield the old value
- if start <= end {
- let old = *start;
- *start = old + 1;
- Some(old)
- } else {
- *self = Empty { at: *end };
- None
- }
- }
- }
- }
-
- #[inline]
- fn size_hint(&self) -> (usize, Option<usize>) {
- use crate::index::RangeInclusive::*;
-
- match *self {
- Empty { .. } => (0, Some(0)),
-
- NonEmpty { start, end } => {
- let added = $steps_add_one(start, end);
- match added {
- Some(hint) => (hint.saturating_add(1), hint.checked_add(1)),
- None => (0, None)
- }
- }
- }
- }
- }
- }
-}
-
-fn steps_add_one_u8(start: u8, end: u8) -> Option<usize> {
- if start < end {
- Some((end - start) as usize)
- } else {
- None
- }
-}
-inclusive!(u8, steps_add_one_u8);
-
-#[test]
-fn test_range() {
- assert_eq!(RangeInclusive::new(1,10).collect::<Vec<_>>(),
- vec![1,2,3,4,5,6,7,8,9,10]);
-}
-
// can be removed if range_contains is stabilized
pub trait Contains {
type Content;
@@ -326,9 +244,7 @@ impl<T: PartialOrd<T>> Contains for Range<T> {
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 }
+ (self.start() <= &item) && (&item <= self.end())
}
}
@@ -384,8 +300,6 @@ macro_rules! ops {
}
}
- inclusive!($ty, <$ty>::steps_between_by_one);
-
impl DoubleEndedIterator for IndexRange<$ty> {
#[inline]
fn next_back(&mut self) -> Option<$ty> {