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 From> for IndexRange { } } -pub enum RangeInclusive { - Empty { - at: Idx, - }, - NonEmpty { - start: Idx, - end: Idx, - }, -} - -impl RangeInclusive { - 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) { - 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 { - 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![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> Contains for Range { impl> Contains for RangeInclusive { 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> { diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index 9a33410f..6258ba60 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -28,7 +28,7 @@ use notify::{watcher, DebouncedEvent, RecursiveMode, Watcher}; use crate::gl::types::*; use crate::gl; -use crate::index::{Column, Line, RangeInclusive}; +use crate::index::{Column, Line}; use crate::term::color::Rgb; use crate::config::{self, Config, Delta}; use crate::term::{self, cell, RenderableCell}; @@ -213,7 +213,7 @@ impl GlyphCache { fn load_glyphs_for_font(&mut self, font: FontKey, loader: &mut L) { let size = self.font_size; - for i in RangeInclusive::new(32u8, 128u8) { + for i in 32u8..=128u8 { self.get(GlyphKey { font_key: font, c: i as char, diff --git a/src/term/mod.rs b/src/term/mod.rs index f2c0b18b..fd31cd5e 100644 --- a/src/term/mod.rs +++ b/src/term/mod.rs @@ -13,7 +13,7 @@ // limitations under the License. // //! Exports the `Term` type which is a high-level API for the Grid -use std::ops::{Range, Index, IndexMut}; +use std::ops::{Range, Index, IndexMut, RangeInclusive}; use std::{ptr, io, mem}; use std::cmp::{min, max}; use std::time::{Duration, Instant}; @@ -27,7 +27,7 @@ use crate::grid::{ BidirectionalIterator, DisplayIter, Grid, GridCell, IndexRegion, Indexed, Scroll, ViewportPosition, }; -use crate::index::{self, Point, Column, Line, IndexRange, Contains, RangeInclusive, Linear}; +use crate::index::{self, Point, Column, Line, IndexRange, Contains, Linear}; use crate::selection::{self, Selection, Locations}; use crate::config::{Config, VisualBellAnimation}; use crate::MouseCursor;