Add 5.timesi() |idx| { ... }
This commit is contained in:
parent
a57686d46d
commit
1c472564e3
@ -10,22 +10,22 @@ import str::{extensions, str_slice, unique_str};
|
||||
import vec::extensions;
|
||||
import vec::{const_vector, copyable_vector, immutable_vector};
|
||||
import vec::{immutable_copyable_vector, iter_trait_extensions, vec_concat};
|
||||
import iter::{base_iter, extended_iter, copyable_iter, times};
|
||||
import iter::{base_iter, extended_iter, copyable_iter, times, timesi};
|
||||
import option::extensions;
|
||||
import option_iter::extensions;
|
||||
import ptr::{extensions, ptr};
|
||||
import rand::extensions;
|
||||
import result::extensions;
|
||||
import int::{num, times};
|
||||
import i8::{num, times};
|
||||
import i16::{num, times};
|
||||
import i32::{num, times};
|
||||
import i64::{num, times};
|
||||
import uint::{num, times};
|
||||
import u8::{num, times};
|
||||
import u16::{num, times};
|
||||
import u32::{num, times};
|
||||
import u64::{num, times};
|
||||
import int::{num, times, timesi};
|
||||
import i8::{num, times, timesi};
|
||||
import i16::{num, times, timesi};
|
||||
import i32::{num, times, timesi};
|
||||
import i64::{num, times, timesi};
|
||||
import uint::{num, times, timesi};
|
||||
import u8::{num, times, timesi};
|
||||
import u16::{num, times, timesi};
|
||||
import u32::{num, times, timesi};
|
||||
import u64::{num, times, timesi};
|
||||
import float::num;
|
||||
import f32::num;
|
||||
import f64::num;
|
||||
@ -34,7 +34,7 @@ import num::num;
|
||||
export path, option, some, none, unreachable;
|
||||
export extensions;
|
||||
// The following exports are the extension impls for numeric types
|
||||
export num, times;
|
||||
export num, times, timesi;
|
||||
// The following exports are the common traits
|
||||
export str_slice, unique_str;
|
||||
export const_vector, copyable_vector, immutable_vector;
|
||||
|
@ -11,7 +11,7 @@ export range;
|
||||
export compl;
|
||||
export abs;
|
||||
export parse_buf, from_str, to_str, to_str_bytes, str;
|
||||
export num, ord, eq, times;
|
||||
export num, ord, eq, times, timesi;
|
||||
|
||||
const min_value: T = -1 as T << (inst::bits - 1 as T);
|
||||
const max_value: T = min_value - 1 as T;
|
||||
@ -155,6 +155,23 @@ impl times of iter::times for T {
|
||||
}
|
||||
}
|
||||
|
||||
impl timesi of iter::timesi for T {
|
||||
#[inline(always)]
|
||||
/// Like `times`, but provides an index
|
||||
fn timesi(it: fn(uint) -> bool) {
|
||||
let slf = self as uint;
|
||||
if slf < 0u {
|
||||
fail #fmt("The .timesi method expects a nonnegative number, \
|
||||
but found %?", self);
|
||||
}
|
||||
let mut i = 0u;
|
||||
while i < slf {
|
||||
if !it(i) { break }
|
||||
i += 1u;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: Has alignment issues on windows and 32-bit linux (#2609)
|
||||
#[test]
|
||||
#[ignore]
|
||||
|
@ -16,6 +16,9 @@ trait extended_iter<A> {
|
||||
iface times {
|
||||
fn times(it: fn() -> bool);
|
||||
}
|
||||
iface timesi{
|
||||
fn timesi(it: fn(uint) -> bool);
|
||||
}
|
||||
|
||||
trait copyable_iter<A:copy> {
|
||||
fn filter_to_vec(pred: fn(A) -> bool) -> ~[A];
|
||||
|
@ -11,7 +11,7 @@ export range;
|
||||
export compl;
|
||||
export to_str, to_str_bytes;
|
||||
export from_str, from_str_radix, str, parse_buf;
|
||||
export num, ord, eq, times;
|
||||
export num, ord, eq, times, timesi;
|
||||
|
||||
const min_value: T = 0 as T;
|
||||
const max_value: T = 0 as T - 1 as T;
|
||||
@ -120,6 +120,19 @@ impl times of iter::times for T {
|
||||
}
|
||||
}
|
||||
|
||||
impl timesi of iter::timesi for T {
|
||||
#[inline(always)]
|
||||
/// Like `times`, but with an index, `eachi`-style.
|
||||
fn timesi(it: fn(uint) -> bool) {
|
||||
let slf = self as uint;
|
||||
let mut i = 0u;
|
||||
while i < slf {
|
||||
if !it(i) { break }
|
||||
i += 1u;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Parse a string to an int
|
||||
fn from_str(s: ~str) -> option<T> { parse_buf(str::bytes(s), 10u) }
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user