diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 30609fe9c3cf075fbb0f78555649ac6de3a6374e..c7955413975d0d4700ac04af908f066745b958f0 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -753,10 +753,26 @@ fn reversed(v: [const T]) -> [T] { "] #[inline(always)] fn iter(v: [const T], f: fn(T)) { + iter_between(v, 0u, vec::len(v), f) +} + +/* +Function: iter_between + +Iterates over a vector + +Iterates over vector `v` and, for each element, calls function `f` with the +element's value. + +*/ +#[inline(always)] +fn iter_between(v: [const T], start: uint, end: uint, f: fn(T)) { + assert start <= end; + assert end <= vec::len(v); unsafe { - let mut n = vec::len(v); - let mut p = unsafe::to_ptr(v); - while n > 0u { + let mut n = end; + let mut p = ptr::offset(unsafe::to_ptr(v), start); + while n > start { f(*p); p = ptr::offset(p, 1u); n -= 1u;