aboutsummaryrefslogtreecommitdiffstats
path: root/components/util/range.rs
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2014-12-18 11:34:23 +0000
committerSimon Sapin <simon.sapin@exyr.org>2014-12-18 11:34:23 +0000
commitbf4480bb791cd918a00fb4bdea234fde676b28e0 (patch)
tree5c9555bd62fbb7375fab1561cb62660ea1022b7d /components/util/range.rs
parente689f9c1606ec89b8efc5e93a48786f7f942d693 (diff)
downloadservo-bf4480bb791cd918a00fb4bdea234fde676b28e0.tar.gz
servo-bf4480bb791cd918a00fb4bdea234fde676b28e0.zip
Simplify util::range::RangeIndex to always require std::num::Int,
and fix remaining warnings.
Diffstat (limited to 'components/util/range.rs')
-rw-r--r--components/util/range.rs69
1 files changed, 27 insertions, 42 deletions
diff --git a/components/util/range.rs b/components/util/range.rs
index 2cdb49e27b6..103f6d3c91d 100644
--- a/components/util/range.rs
+++ b/components/util/range.rs
@@ -6,29 +6,15 @@ use std::cmp::{max, min};
use std::iter;
use std::fmt;
use std::num;
-use std::num::{Int, Bounded, Zero};
+use std::num::Int;
/// An index type to be used by a `Range`
-pub trait RangeIndex: Copy
- + Clone
- + fmt::Show
- + PartialEq
- + PartialOrd
- + Eq
- + Ord
- + Add<Self, Self>
- + Sub<Self, Self>
- + Neg<Self>
- + Zero {}
-
-pub trait IntRangeIndex<T>: RangeIndex + Copy {
+pub trait RangeIndex<T>: Int + fmt::Show {
fn new(x: T) -> Self;
fn get(self) -> T;
}
-impl RangeIndex for int {}
-
-impl IntRangeIndex<int> for int {
+impl RangeIndex<int> for int {
#[inline]
fn new(x: int) -> int { x }
@@ -40,7 +26,7 @@ impl IntRangeIndex<int> for int {
#[macro_export]
macro_rules! int_range_index {
($(#[$attr:meta])* struct $Self:ident($T:ty)) => (
- #[deriving(Clone, PartialEq, PartialOrd, Eq, Ord, Show, Zero)]
+ #[deriving(Clone, PartialEq, PartialOrd, Eq, Ord, Show)]
$(#[$attr])*
pub struct $Self(pub $T);
@@ -51,7 +37,18 @@ macro_rules! int_range_index {
}
}
- impl RangeIndex for $Self {}
+ impl RangeIndex<$T> for $Self {
+ #[inline]
+ fn new(x: $T) -> $Self {
+ $Self(x)
+ }
+
+ #[inline]
+ fn get(self) -> $T {
+ match self { $Self(x) => x }
+ }
+ }
+
impl ::std::num::Int for $Self {
fn zero() -> $Self { $Self(0) }
fn one() -> $Self { $Self(1) }
@@ -77,18 +74,6 @@ macro_rules! int_range_index {
}
}
- impl IntRangeIndex<$T> for $Self {
- #[inline]
- fn new(x: $T) -> $Self {
- $Self(x)
- }
-
- #[inline]
- fn get(self) -> $T {
- match self { $Self(x) => x }
- }
- }
-
impl Add<$Self, $Self> for $Self {
#[inline]
fn add(&self, other: &$Self) -> $Self {
@@ -196,7 +181,7 @@ pub struct Range<I> {
length: I,
}
-impl<I: RangeIndex> fmt::Show for Range<I> {
+impl<I: RangeIndex<T>, T> fmt::Show for Range<I> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "[{} .. {})", self.begin(), self.end())
}
@@ -207,14 +192,14 @@ pub struct EachIndex<T, I> {
it: iter::Range<T>,
}
-pub fn each_index<T: Int, I: IntRangeIndex<T>>(start: I, stop: I) -> EachIndex<T, I> {
+pub fn each_index<T: Int, I: RangeIndex<T>>(start: I, stop: I) -> EachIndex<T, I> {
EachIndex { it: iter::range(start.get(), stop.get()) }
}
-impl<T: Int, I: IntRangeIndex<T>> Iterator<I> for EachIndex<T, I> {
+impl<T: Int, I: RangeIndex<T>> Iterator<I> for EachIndex<T, I> {
#[inline]
fn next(&mut self) -> Option<I> {
- self.it.next().map(|i| IntRangeIndex::new(i))
+ self.it.next().map(|i| RangeIndex::new(i))
}
#[inline]
@@ -223,7 +208,7 @@ impl<T: Int, I: IntRangeIndex<T>> Iterator<I> for EachIndex<T, I> {
}
}
-impl<I: RangeIndex> Range<I> {
+impl<I: RangeIndex<T>, T> Range<I> {
/// Create a new range from beginning and length offsets. This could be
/// denoted as `[begin, begin + length)`.
///
@@ -239,7 +224,7 @@ impl<I: RangeIndex> Range<I> {
#[inline]
pub fn empty() -> Range<I> {
- Range::new(num::zero(), num::zero())
+ Range::new(Int::zero(), Int::zero())
}
/// The index offset to the beginning of the range.
@@ -287,7 +272,7 @@ impl<I: RangeIndex> Range<I> {
/// `true` if the offset from the beginning to the end of the range is zero.
#[inline]
pub fn is_empty(&self) -> bool {
- self.length().is_zero()
+ self.length() == Int::zero()
}
/// Shift the entire range by the supplied index delta.
@@ -360,7 +345,7 @@ impl<I: RangeIndex> Range<I> {
}
/// Methods for `Range`s with indices based on integer values
-impl<T: Int+Bounded, I: IntRangeIndex<T>> Range<I> {
+impl<T: Int, I: RangeIndex<T>> Range<I> {
/// Returns an iterater that increments over `[begin, end)`.
#[inline]
pub fn each_index(&self) -> EachIndex<T, I> {
@@ -372,7 +357,7 @@ impl<T: Int+Bounded, I: IntRangeIndex<T>> Range<I> {
let s_len = s.len();
match num::cast::<uint, T>(s_len) {
Some(len) => {
- let len = IntRangeIndex::new(len);
+ let len = RangeIndex::new(len);
self.begin() < len
&& self.end() <= len
&& self.length() <= len
@@ -381,8 +366,8 @@ impl<T: Int+Bounded, I: IntRangeIndex<T>> Range<I> {
debug!("Range<T>::is_valid_for_string: string length (len={}) is longer than the \
max value for the range index (max={})", s_len,
{
- let max: T = Bounded::max_value();
- let val: I = IntRangeIndex::new(max);
+ let max: T = Int::max_value();
+ let val: I = RangeIndex::new(max);
val
});
false