Skip to content

Commit e621bdc

Browse files
author
blake2-ppc
committed
std: Fix for-range loops that can use iterators
Fix inappropriate for-range loops to use for-iterator constructs (or other appropriate solution) instead.
1 parent 96a150f commit e621bdc

File tree

8 files changed

+31
-44
lines changed

8 files changed

+31
-44
lines changed

src/libextra/arc.rs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -846,22 +846,16 @@ mod tests {
846846
}
847847
assert_eq!(*state, 42);
848848
*state = 31337;
849-
// FIXME: #7372: hits type inference bug with iterators
850849
// send to other readers
851-
for i in range(0u, reader_convos.len()) {
852-
match reader_convos[i] {
853-
(ref rc, _) => rc.send(()),
854-
}
850+
for &(ref rc, _) in reader_convos.iter() {
851+
rc.send(())
855852
}
856853
}
857854
let read_mode = arc.downgrade(write_mode);
858855
do (&read_mode).read |state| {
859-
// FIXME: #7372: hits type inference bug with iterators
860856
// complete handshake with other readers
861-
for i in range(0u, reader_convos.len()) {
862-
match reader_convos[i] {
863-
(_, ref rp) => rp.recv(),
864-
}
857+
for &(_, ref rp) in reader_convos.iter() {
858+
rp.recv()
865859
}
866860
wc1.send(()); // tell writer to try again
867861
assert_eq!(*state, 31337);

src/libextra/bitv.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,22 +145,24 @@ impl BigBitv {
145145
let len = b.storage.len();
146146
assert_eq!(self.storage.len(), len);
147147
let mut changed = false;
148-
for i in range(0, len) {
148+
for (i, (a, b)) in self.storage.mut_iter()
149+
.zip(b.storage.iter())
150+
.enumerate() {
149151
let mask = big_mask(nbits, i);
150-
let w0 = self.storage[i] & mask;
151-
let w1 = b.storage[i] & mask;
152+
let w0 = *a & mask;
153+
let w1 = *b & mask;
152154
let w = op(w0, w1) & mask;
153155
if w0 != w {
154156
changed = true;
155-
self.storage[i] = w;
157+
*a = w;
156158
}
157159
}
158160
changed
159161
}
160162

161163
#[inline]
162164
pub fn each_storage(&mut self, op: &fn(v: &mut uint) -> bool) -> bool {
163-
range(0u, self.storage.len()).advance(|i| op(&mut self.storage[i]))
165+
self.storage.mut_iter().advance(|elt| op(elt))
164166
}
165167

166168
#[inline]
@@ -205,10 +207,9 @@ impl BigBitv {
205207

206208
#[inline]
207209
pub fn equals(&self, b: &BigBitv, nbits: uint) -> bool {
208-
let len = b.storage.len();
209-
for i in range(0, len) {
210+
for (i, elt) in b.storage.iter().enumerate() {
210211
let mask = big_mask(nbits, i);
211-
if mask & self.storage[i] != mask & b.storage[i] {
212+
if mask & self.storage[i] != mask & *elt {
212213
return false;
213214
}
214215
}

src/libextra/smallintmap.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,12 @@ pub struct SmallIntMap<T> {
2828
impl<V> Container for SmallIntMap<V> {
2929
/// Return the number of elements in the map
3030
fn len(&self) -> uint {
31-
let mut sz = 0;
32-
for i in range(0u, self.v.len()) {
33-
match self.v[i] {
34-
Some(_) => sz += 1,
35-
None => {}
36-
}
37-
}
38-
sz
31+
self.v.iter().count(|elt| elt.is_some())
32+
}
33+
34+
/// Return true if there are no elements in the map
35+
fn is_empty(&self) -> bool {
36+
self.v.iter().all(|elt| elt.is_none())
3937
}
4038
}
4139

src/libextra/sort.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -469,10 +469,7 @@ impl<T:Clone + Ord> MergeState<T> {
469469
base2: uint, len2: uint) {
470470
assert!(len1 != 0 && len2 != 0 && base1+len1 == base2);
471471

472-
let mut tmp = ~[];
473-
for i in range(base1, base1+len1) {
474-
tmp.push(array[i].clone());
475-
}
472+
let mut tmp = array.slice(base1, base1 + len1).to_owned();
476473

477474
let mut c1 = 0;
478475
let mut c2 = base2;
@@ -579,10 +576,7 @@ impl<T:Clone + Ord> MergeState<T> {
579576
base2: uint, len2: uint) {
580577
assert!(len1 != 1 && len2 != 0 && base1 + len1 == base2);
581578

582-
let mut tmp = ~[];
583-
for i in range(base2, base2+len2) {
584-
tmp.push(array[i].clone());
585-
}
579+
let mut tmp = array.slice(base2, base2 + len2).to_owned();
586580

587581
let mut c1 = base1 + len1 - 1;
588582
let mut c2 = len2 - 1;

src/libstd/at_vec.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
1313
use clone::Clone;
1414
use container::Container;
15-
use iterator::{Iterator, range};
15+
use iterator::Iterator;
1616
use option::{Option, Some, None};
1717
use sys;
1818
use unstable::raw::Repr;
@@ -92,8 +92,8 @@ pub fn append<T:Clone>(lhs: @[T], rhs: &[T]) -> @[T] {
9292
for x in lhs.iter() {
9393
push((*x).clone());
9494
}
95-
for i in range(0u, rhs.len()) {
96-
push(rhs[i].clone());
95+
for elt in rhs.iter() {
96+
push(elt.clone());
9797
}
9898
}
9999
}

src/libstd/hashmap.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use container::{Container, Mutable, Map, MutableMap, Set, MutableSet};
1919
use clone::Clone;
2020
use cmp::{Eq, Equiv};
2121
use hash::Hash;
22-
use iterator::{Iterator, IteratorUtil, FromIterator, Extendable, range};
22+
use iterator::{Iterator, IteratorUtil, FromIterator, Extendable};
2323
use iterator::{FilterMap, Chain, Repeat, Zip};
2424
use num;
2525
use option::{None, Option, Some};
@@ -265,8 +265,8 @@ impl<K:Hash + Eq,V> Container for HashMap<K, V> {
265265
impl<K:Hash + Eq,V> Mutable for HashMap<K, V> {
266266
/// Clear the map, removing all key-value pairs.
267267
fn clear(&mut self) {
268-
for idx in range(0u, self.buckets.len()) {
269-
self.buckets[idx] = None;
268+
for bkt in self.buckets.mut_iter() {
269+
*bkt = None;
270270
}
271271
self.size = 0;
272272
}

src/libstd/trie.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,8 +271,8 @@ impl<T> TrieNode<T> {
271271

272272
impl<T> TrieNode<T> {
273273
fn each<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) -> bool {
274-
for idx in range(0u, self.children.len()) {
275-
match self.children[idx] {
274+
for elt in self.children.iter() {
275+
match *elt {
276276
Internal(ref x) => if !x.each(|i,t| f(i,t)) { return false },
277277
External(k, ref v) => if !f(&k, v) { return false },
278278
Nothing => ()

src/libstd/vec.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,8 +1597,8 @@ impl<T:Clone> OwnedCopyableVector<T> for ~[T] {
15971597
let new_len = self.len() + rhs.len();
15981598
self.reserve(new_len);
15991599

1600-
for i in range(0u, rhs.len()) {
1601-
self.push(unsafe { raw::get(rhs, i) })
1600+
for elt in rhs.iter() {
1601+
self.push((*elt).clone())
16021602
}
16031603
}
16041604

0 commit comments

Comments
 (0)