提交 932eec7d 编写于 作者: B bors

auto merge of #18698 : japaric/rust/index, r=alexcrichton

Closes #16529

r? @aturon 
......@@ -638,7 +638,7 @@ fn shr(&self, other: &uint) -> $t { (*self) >> (*other) }
* ```
*/
#[lang="index"]
pub trait Index<Index, Sized? Result> {
pub trait Index<Index, Sized? Result> for Sized? {
/// The method for the indexing (`Foo[Bar]`) operation
fn index<'a>(&'a self, index: &Index) -> &'a Result;
}
......@@ -669,7 +669,7 @@ pub trait Index<Index, Sized? Result> {
* ```
*/
#[lang="index_mut"]
pub trait IndexMut<Index, Result> {
pub trait IndexMut<Index, Result> for Sized? {
/// The method for the indexing (`Foo[Bar]`) operation
fn index_mut<'a>(&'a mut self, index: &Index) -> &'a mut Result;
}
......
......@@ -256,7 +256,6 @@ pub trait SlicePrelude<T> for Sized? {
#[inline]
#[experimental = "not triaged yet"]
fn is_empty(&self) -> bool { self.len() == 0 }
/// Returns a mutable reference to the element at the given index,
/// or `None` if the index is out of bounds
#[unstable = "waiting on final error conventions"]
......@@ -698,6 +697,22 @@ fn as_mut_ptr(&mut self) -> *mut T {
}
}
impl<T> ops::Index<uint, T> for [T] {
fn index(&self, &index: &uint) -> &T {
assert!(index < self.len());
unsafe { mem::transmute(self.repr().data.offset(index as int)) }
}
}
impl<T> ops::IndexMut<uint, T> for [T] {
fn index_mut(&mut self, &index: &uint) -> &mut T {
assert!(index < self.len());
unsafe { mem::transmute(self.repr().data.offset(index as int)) }
}
}
impl<T> ops::Slice<uint, [T]> for [T] {
#[inline]
fn as_slice_<'a>(&'a self) -> &'a [T] {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册