Remove need for range_contains feature

This commit is contained in:
Manish Goregaokar 2017-01-06 15:48:23 -08:00
parent ee5a9f1338
commit c579d07993
4 changed files with 30 additions and 8 deletions

View File

@ -18,7 +18,7 @@ use std::io;
use vte;
use index::{Column, Line};
use index::{Column, Line, Contains};
use ::Rgb;
@ -744,7 +744,7 @@ fn parse_color(attrs: &[i64], i: &mut usize) -> Option<Color> {
*i += 4;
let range = 0...255;
if !range.contains(r) || !range.contains(g) || !range.contains(b) {
if !range.contains_(r) || !range.contains_(g) || !range.contains_(b) {
err_println!("Invalid RGB color spec: ({}, {}, {})", r, g, b);
return None;
}

View File

@ -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);

View File

@ -13,7 +13,6 @@
// limitations under the License.
//
//! Alacritty - The GPU Enhanced Terminal
#![feature(range_contains)]
#![feature(inclusive_range_syntax)]
#![feature(inclusive_range)]
#![cfg_attr(feature = "clippy", feature(plugin))]

View File

@ -20,7 +20,7 @@ use std::io;
use ansi::{self, Color, NamedColor, Attr, Handler};
use grid::{Grid, ClearRegion, ToRange};
use index::{self, Point, Column, Line, Linear, IndexRange};
use index::{self, Point, Column, Line, Linear, IndexRange, Contains};
use selection::{Span, Selection};
pub mod cell;
@ -129,7 +129,7 @@ impl<'a> Iterator for RenderableCellsIter<'a> {
self.column += 1;
let selected = self.selection.as_ref()
.map(|range| range.contains(index))
.map(|range| range.contains_(index))
.unwrap_or(false);
// Skip empty cells
@ -812,7 +812,7 @@ impl ansi::Handler for Term {
#[inline]
fn insert_blank_lines(&mut self, lines: Line) {
debug_println!("insert_blank_lines: {}", lines);
if self.scroll_region.contains(self.cursor.line) {
if self.scroll_region.contains_(self.cursor.line) {
let origin = self.cursor.line;
self.scroll_down_relative(origin, lines);
}
@ -821,7 +821,7 @@ impl ansi::Handler for Term {
#[inline]
fn delete_lines(&mut self, lines: Line) {
debug_println!("delete_lines: {}", lines);
if self.scroll_region.contains(self.cursor.line) {
if self.scroll_region.contains_(self.cursor.line) {
let origin = self.cursor.line;
self.scroll_up_relative(origin, lines);
}