提交 f4083a22 编写于 作者: A Alex Crichton

std: Change RandomAccessIterator to use `&mut self`

Many iterators go through a closure when dealing with the `idx` method, which
are invalid after the previous change (closures cannot be invoked through a `&`
pointer). This commit alters the `fn idx` method on the RandomAccessIterator
to take `&mut self` rather than `&self`.

[breaking-change]
上级 159a10da
......@@ -632,7 +632,7 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<bool> {
fn idx(&mut self, index: uint) -> Option<bool> {
if index >= self.indexable() {
None
} else {
......
......@@ -272,7 +272,7 @@ impl<'a, T> RandomAccessIterator<&'a T> for Items<'a, T> {
fn indexable(&self) -> uint { self.rindex - self.index }
#[inline]
fn idx(&self, j: uint) -> Option<&'a T> {
fn idx(&mut self, j: uint) -> Option<&'a T> {
if j >= self.indexable() {
None
} else {
......
......@@ -703,7 +703,7 @@ pub trait RandomAccessIterator<A>: Iterator<A> {
fn indexable(&self) -> uint;
/// Return an element at an index
fn idx(&self, index: uint) -> Option<A>;
fn idx(&mut self, index: uint) -> Option<A>;
}
/// An iterator that knows its exact length
......@@ -771,8 +771,9 @@ impl<A, T: DoubleEndedIterator<A> + RandomAccessIterator<A>> RandomAccessIterato
#[inline]
fn indexable(&self) -> uint { self.iter.indexable() }
#[inline]
fn idx(&self, index: uint) -> Option<A> {
self.iter.idx(self.indexable() - index - 1)
fn idx(&mut self, index: uint) -> Option<A> {
let amt = self.indexable();
self.iter.idx(amt - index - 1)
}
}
......@@ -1071,7 +1072,7 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<A> {
fn idx(&mut self, index: uint) -> Option<A> {
let liter = self.iter.indexable();
let lorig = self.orig.indexable();
if lorig == 0 {
......@@ -1143,7 +1144,7 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<A> {
fn idx(&mut self, index: uint) -> Option<A> {
let len = self.a.indexable();
if index < len {
self.a.idx(index)
......@@ -1221,7 +1222,7 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<(A, B)> {
fn idx(&mut self, index: uint) -> Option<(A, B)> {
match self.a.idx(index) {
None => None,
Some(x) => match self.b.idx(index) {
......@@ -1276,8 +1277,9 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<B> {
self.do_map(self.iter.idx(index))
fn idx(&mut self, index: uint) -> Option<B> {
let elt = self.iter.idx(index);
self.do_map(elt)
}
}
......@@ -1415,7 +1417,7 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<(uint, A)> {
fn idx(&mut self, index: uint) -> Option<(uint, A)> {
match self.iter.idx(index) {
Some(a) => Some((self.count + index, a)),
_ => None,
......@@ -1600,7 +1602,7 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<A> {
fn idx(&mut self, index: uint) -> Option<A> {
if index >= self.indexable() {
None
} else {
......@@ -1649,7 +1651,7 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<A> {
fn idx(&mut self, index: uint) -> Option<A> {
if index >= self.n {
None
} else {
......@@ -1799,7 +1801,7 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<A> {
fn idx(&mut self, index: uint) -> Option<A> {
self.iter.idx(index)
}
}
......@@ -1862,8 +1864,9 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<A> {
self.do_inspect(self.iter.idx(index))
fn idx(&mut self, index: uint) -> Option<A> {
let element = self.iter.idx(index);
self.do_inspect(element)
}
}
......@@ -2164,7 +2167,7 @@ impl<A: Clone> RandomAccessIterator<A> for Repeat<A> {
#[inline]
fn indexable(&self) -> uint { uint::MAX }
#[inline]
fn idx(&self, _: uint) -> Option<A> { Some(self.element.clone()) }
fn idx(&mut self, _: uint) -> Option<A> { Some(self.element.clone()) }
}
/// Functions for lexicographical ordering of sequences.
......
......@@ -489,7 +489,7 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<&'a [T]> {
fn idx(&mut self, index: uint) -> Option<&'a [T]> {
if index < self.indexable() {
let lo = index * self.size;
let mut hi = lo + self.size;
......@@ -2095,7 +2095,7 @@ fn indexable(&self) -> uint {
}
#[inline]
fn idx(&self, index: uint) -> Option<&'a T> {
fn idx(&mut self, index: uint) -> Option<&'a T> {
unsafe {
if index < self.indexable() {
transmute(self.ptr.offset(index as int))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册