about summary refs log tree commit diff
diff options
context:
space:
mode:
authordjzin <noreply@github.com>2016-12-24 16:18:24 +0000
committerdjzin <noreply@github.com>2017-01-14 16:51:51 +0000
commit9f2f00aaad6c3aff1cf6b8ed015544c709a9fbfb (patch)
treedd8866fcf2594a72ab7b0f3db3f0b63448a3c789
parent14b0ea8aa6886ef831b2e8074c5bbd7b36cc5679 (diff)
downloadrust-9f2f00aaad6c3aff1cf6b8ed015544c709a9fbfb.tar.gz
rust-9f2f00aaad6c3aff1cf6b8ed015544c709a9fbfb.zip
allow unsized types in `RangeArgument`
-rw-r--r--src/libcollections/range.rs20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/libcollections/range.rs b/src/libcollections/range.rs
index 0326b92203a..1fa634362cf 100644
--- a/src/libcollections/range.rs
+++ b/src/libcollections/range.rs
@@ -73,7 +73,7 @@ pub trait RangeArgument<T: ?Sized> {
 
 // FIXME add inclusive ranges to RangeArgument
 
-impl<T> RangeArgument<T> for RangeFull {}
+impl<T: ?Sized> RangeArgument<T> for RangeFull {}
 
 impl<T> RangeArgument<T> for RangeFrom<T> {
     fn start(&self) -> Bound<&T> {
@@ -113,3 +113,21 @@ impl<T> RangeArgument<T> for (Bound<T>, Bound<T>) {
         }
     }
 }
+
+impl<'a, T: ?Sized + 'a> RangeArgument<T> for (Bound<&'a T>, Bound<&'a T>) {
+    fn start(&self) -> Bound<&T> {
+        match *self {
+            (Included(start), _) => Included(start),
+            (Excluded(start), _) => Excluded(start),
+            (Unbounded, _)       => Unbounded,
+        }
+    }
+
+    fn end(&self) -> Bound<&T> {
+        match *self {
+            (_, Included(end)) => Included(end),
+            (_, Excluded(end)) => Excluded(end),
+            (_, Unbounded)     => Unbounded,
+        }
+    }
+}