core: Change a number of arguments in vec to const vecs

This commit is contained in:
Brian Anderson 2012-02-29 18:13:29 -08:00
parent 4132cbd22a
commit 99f231f347

View File

@ -52,7 +52,7 @@ fn vec_from_buf_shared<T>(t: *sys::type_desc,
Returns true if two vectors have the same length Returns true if two vectors have the same length
*/ */
pure fn same_length<T, U>(xs: [T], ys: [U]) -> bool { pure fn same_length<T, U>(xs: [const T], ys: [const U]) -> bool {
vec::len(xs) == vec::len(ys) vec::len(xs) == vec::len(ys)
} }
@ -278,7 +278,7 @@ fn slice_mut<T: copy>(v: [const T], start: uint, end: uint) -> [mutable T] {
Split the vector `v` by applying each element against the predicate `f`. Split the vector `v` by applying each element against the predicate `f`.
*/ */
fn split<T: copy>(v: [T], f: fn(T) -> bool) -> [[T]] { fn split<T: copy>(v: [const T], f: fn(T) -> bool) -> [[T]] {
let ln = len(v); let ln = len(v);
if (ln == 0u) { ret [] } if (ln == 0u) { ret [] }
@ -303,7 +303,7 @@ fn split<T: copy>(v: [T], f: fn(T) -> bool) -> [[T]] {
Split the vector `v` by applying each element against the predicate `f` up Split the vector `v` by applying each element against the predicate `f` up
to `n` times. to `n` times.
*/ */
fn splitn<T: copy>(v: [T], n: uint, f: fn(T) -> bool) -> [[T]] { fn splitn<T: copy>(v: [const T], n: uint, f: fn(T) -> bool) -> [[T]] {
let ln = len(v); let ln = len(v);
if (ln == 0u) { ret [] } if (ln == 0u) { ret [] }
@ -331,7 +331,7 @@ fn splitn<T: copy>(v: [T], n: uint, f: fn(T) -> bool) -> [[T]] {
Reverse split the vector `v` by applying each element against the predicate Reverse split the vector `v` by applying each element against the predicate
`f`. `f`.
*/ */
fn rsplit<T: copy>(v: [T], f: fn(T) -> bool) -> [[T]] { fn rsplit<T: copy>(v: [const T], f: fn(T) -> bool) -> [[T]] {
let ln = len(v); let ln = len(v);
if (ln == 0u) { ret [] } if (ln == 0u) { ret [] }
@ -356,7 +356,7 @@ fn rsplit<T: copy>(v: [T], f: fn(T) -> bool) -> [[T]] {
Reverse split the vector `v` by applying each element against the predicate Reverse split the vector `v` by applying each element against the predicate
`f` up to `n times. `f` up to `n times.
*/ */
fn rsplitn<T: copy>(v: [T], n: uint, f: fn(T) -> bool) -> [[T]] { fn rsplitn<T: copy>(v: [const T], n: uint, f: fn(T) -> bool) -> [[T]] {
let ln = len(v); let ln = len(v);
if (ln == 0u) { ret [] } if (ln == 0u) { ret [] }
@ -412,7 +412,7 @@ fn pop<T>(&v: [const T]) -> T unsafe {
Append an element to a vector Append an element to a vector
*/ */
fn push<T: copy>(&v: [T], initval: T) { fn push<T: copy>(&v: [const T], initval: T) {
v += [initval]; v += [initval];
} }
@ -432,7 +432,7 @@ fn push<T: copy>(&v: [T], initval: T) {
n - The number of elements to add n - The number of elements to add
initval - The value for the new elements initval - The value for the new elements
*/ */
fn grow<T: copy>(&v: [T], n: uint, initval: T) { fn grow<T: copy>(&v: [const T], n: uint, initval: T) {
reserve(v, next_power_of_two(len(v) + n)); reserve(v, next_power_of_two(len(v) + n));
let i: uint = 0u; let i: uint = 0u;
while i < n { v += [initval]; i += 1u; } while i < n { v += [initval]; i += 1u; }
@ -471,7 +471,7 @@ fn grow_mut<T: copy>(&v: [mutable T], n: uint, initval: T) {
n - The number of elements to add n - The number of elements to add
init_op - A function to call to retreive each appended element's value init_op - A function to call to retreive each appended element's value
*/ */
fn grow_fn<T>(&v: [T], n: uint, op: init_op<T>) { fn grow_fn<T>(&v: [const T], n: uint, op: init_op<T>) {
reserve(v, next_power_of_two(len(v) + n)); reserve(v, next_power_of_two(len(v) + n));
let i: uint = 0u; let i: uint = 0u;
while i < n { v += [op(i)]; i += 1u; } while i < n { v += [op(i)]; i += 1u; }
@ -527,7 +527,8 @@ fn map_mut<T: copy, U>(v: [const T], f: fn(T) -> U) -> [U] {
Apply a function to each pair of elements and return the results Apply a function to each pair of elements and return the results
*/ */
fn map2<T: copy, U: copy, V>(v0: [T], v1: [U], f: fn(T, U) -> V) -> [V] { fn map2<T: copy, U: copy, V>(v0: [const T], v1: [const U],
f: fn(T, U) -> V) -> [V] {
let v0_len = len(v0); let v0_len = len(v0);
if v0_len != len(v1) { fail; } if v0_len != len(v1) { fail; }
let u: [V] = []; let u: [V] = [];
@ -645,7 +646,7 @@ fn any<T>(v: [T], f: fn(T) -> bool) -> bool {
If the vectors contains no elements then false is returned. If the vectors contains no elements then false is returned.
*/ */
fn any2<T, U>(v0: [T], v1: [U], f: fn(T, U) -> bool) -> bool { fn any2<T, U>(v0: [const T], v1: [U], f: fn(T, U) -> bool) -> bool {
let v0_len = len(v0); let v0_len = len(v0);
let v1_len = len(v1); let v1_len = len(v1);
let i = 0u; let i = 0u;
@ -675,7 +676,7 @@ fn all<T>(v: [T], f: fn(T) -> bool) -> bool {
If the vectors are not the same size then false is returned. If the vectors are not the same size then false is returned.
*/ */
fn all2<T, U>(v0: [T], v1: [U], f: fn(T, U) -> bool) -> bool { fn all2<T, U>(v0: [const T], v1: [const U], f: fn(T, U) -> bool) -> bool {
let v0_len = len(v0); let v0_len = len(v0);
if v0_len != len(v1) { ret false; } if v0_len != len(v1) { ret false; }
let i = 0u; let i = 0u;
@ -688,7 +689,7 @@ fn all2<T, U>(v0: [T], v1: [U], f: fn(T, U) -> bool) -> bool {
Return true if a vector contains an element with the given value Return true if a vector contains an element with the given value
*/ */
fn contains<T>(v: [T], x: T) -> bool { fn contains<T>(v: [const T], x: T) -> bool {
for elt: T in v { if x == elt { ret true; } } for elt: T in v { if x == elt { ret true; } }
ret false; ret false;
} }
@ -713,7 +714,7 @@ fn count<T>(v: [const T], x: T) -> uint {
When function `f` returns true then an option containing the element When function `f` returns true then an option containing the element
is returned. If `f` matches no elements then none is returned. is returned. If `f` matches no elements then none is returned.
*/ */
fn find<T: copy>(v: [T], f: fn(T) -> bool) -> option<T> { fn find<T: copy>(v: [const T], f: fn(T) -> bool) -> option<T> {
find_from(v, 0u, len(v), f) find_from(v, 0u, len(v), f)
} }
@ -726,8 +727,8 @@ fn find<T: copy>(v: [T], f: fn(T) -> bool) -> option<T> {
When function `f` returns true then an option containing the element When function `f` returns true then an option containing the element
is returned. If `f` matches no elements then none is returned. is returned. If `f` matches no elements then none is returned.
*/ */
fn find_from<T: copy>(v: [T], start: uint, end: uint, f: fn(T) -> bool) -> fn find_from<T: copy>(v: [const T], start: uint, end: uint,
option<T> { f: fn(T) -> bool) -> option<T> {
option::map(position_from(v, start, end, f)) { |i| v[i] } option::map(position_from(v, start, end, f)) { |i| v[i] }
} }
@ -740,7 +741,7 @@ fn find_from<T: copy>(v: [T], start: uint, end: uint, f: fn(T) -> bool) ->
returns true then an option containing the element is returned. If `f` returns true then an option containing the element is returned. If `f`
matches no elements then none is returned. matches no elements then none is returned.
*/ */
fn rfind<T: copy>(v: [T], f: fn(T) -> bool) -> option<T> { fn rfind<T: copy>(v: [const T], f: fn(T) -> bool) -> option<T> {
rfind_from(v, 0u, len(v), f) rfind_from(v, 0u, len(v), f)
} }
@ -753,8 +754,8 @@ fn rfind<T: copy>(v: [T], f: fn(T) -> bool) -> option<T> {
[`start`, `end`). When function `f` returns true then an option containing [`start`, `end`). When function `f` returns true then an option containing
the element is returned. If `f` matches no elements then none is returned. the element is returned. If `f` matches no elements then none is returned.
*/ */
fn rfind_from<T: copy>(v: [T], start: uint, end: uint, f: fn(T) -> bool) -> fn rfind_from<T: copy>(v: [const T], start: uint, end: uint,
option<T> { f: fn(T) -> bool) -> option<T> {
option::map(rposition_from(v, start, end, f)) { |i| v[i] } option::map(rposition_from(v, start, end, f)) { |i| v[i] }
} }
@ -768,7 +769,7 @@ fn rfind_from<T: copy>(v: [T], start: uint, end: uint, f: fn(T) -> bool) ->
option::some(uint) - The first index containing a matching value option::some(uint) - The first index containing a matching value
option::none - No elements matched option::none - No elements matched
*/ */
fn position_elt<T>(v: [T], x: T) -> option<uint> { fn position_elt<T>(v: [const T], x: T) -> option<uint> {
position(v) { |y| x == y } position(v) { |y| x == y }
} }
@ -781,7 +782,7 @@ fn position_elt<T>(v: [T], x: T) -> option<uint> {
then an option containing the index is returned. If `f` matches no elements then an option containing the index is returned. If `f` matches no elements
then none is returned. then none is returned.
*/ */
fn position<T>(v: [T], f: fn(T) -> bool) -> option<uint> { fn position<T>(v: [const T], f: fn(T) -> bool) -> option<uint> {
position_from(v, 0u, len(v), f) position_from(v, 0u, len(v), f)
} }
@ -794,8 +795,8 @@ fn position<T>(v: [T], f: fn(T) -> bool) -> option<uint> {
When function `f` returns true then an option containing the index is When function `f` returns true then an option containing the index is
returned. If `f` matches no elements then none is returned. returned. If `f` matches no elements then none is returned.
*/ */
fn position_from<T>(v: [T], start: uint, end: uint, f: fn(T) -> bool) -> fn position_from<T>(v: [const T], start: uint, end: uint,
option<uint> { f: fn(T) -> bool) -> option<uint> {
assert start <= end; assert start <= end;
assert end <= len(v); assert end <= len(v);
let i = start; let i = start;
@ -813,7 +814,7 @@ fn position_from<T>(v: [T], start: uint, end: uint, f: fn(T) -> bool) ->
option::some(uint) - The last index containing a matching value option::some(uint) - The last index containing a matching value
option::none - No elements matched option::none - No elements matched
*/ */
fn rposition_elt<T>(v: [T], x: T) -> option<uint> { fn rposition_elt<T>(v: [const T], x: T) -> option<uint> {
rposition(v) { |y| x == y } rposition(v) { |y| x == y }
} }
@ -826,7 +827,7 @@ fn rposition_elt<T>(v: [T], x: T) -> option<uint> {
`f` returns true then an option containing the index is returned. If `f` `f` returns true then an option containing the index is returned. If `f`
matches no elements then none is returned. matches no elements then none is returned.
*/ */
fn rposition<T>(v: [T], f: fn(T) -> bool) -> option<uint> { fn rposition<T>(v: [const T], f: fn(T) -> bool) -> option<uint> {
rposition_from(v, 0u, len(v), f) rposition_from(v, 0u, len(v), f)
} }
@ -839,8 +840,8 @@ fn rposition<T>(v: [T], f: fn(T) -> bool) -> option<uint> {
[`start`, `end`). When function `f` returns true then an option containing [`start`, `end`). When function `f` returns true then an option containing
the index is returned. If `f` matches no elements then none is returned. the index is returned. If `f` matches no elements then none is returned.
*/ */
fn rposition_from<T>(v: [T], start: uint, end: uint, f: fn(T) -> bool) -> fn rposition_from<T>(v: [const T], start: uint, end: uint,
option<uint> { f: fn(T) -> bool) -> option<uint> {
assert start <= end; assert start <= end;
assert end <= len(v); assert end <= len(v);
let i = end; let i = end;
@ -865,7 +866,7 @@ fn rposition_from<T>(v: [T], start: uint, end: uint, f: fn(T) -> bool) ->
and the i-th element of the second vector contains the second element and the i-th element of the second vector contains the second element
of the i-th tuple of the input vector. of the i-th tuple of the input vector.
*/ */
fn unzip<T: copy, U: copy>(v: [(T, U)]) -> ([T], [U]) { fn unzip<T: copy, U: copy>(v: [const (T, U)]) -> ([T], [U]) {
let as = [], bs = []; let as = [], bs = [];
for (a, b) in v { as += [a]; bs += [b]; } for (a, b) in v { as += [a]; bs += [b]; }
ret (as, bs); ret (as, bs);
@ -883,7 +884,7 @@ fn unzip<T: copy, U: copy>(v: [(T, U)]) -> ([T], [U]) {
<same_length> (v, u) <same_length> (v, u)
*/ */
fn zip<T: copy, U: copy>(v: [T], u: [U]) -> [(T, U)] { fn zip<T: copy, U: copy>(v: [const T], u: [const U]) -> [(T, U)] {
let zipped = []; let zipped = [];
let sz = len(v), i = 0u; let sz = len(v), i = 0u;
assert sz == len(u); assert sz == len(u);
@ -979,7 +980,7 @@ fn iter<T>(v: [const T], f: fn(T)) {
Iterates over two vectors in parallel Iterates over two vectors in parallel
*/ */
fn iter2<U, T>(v: [U], v2: [T], f: fn(U, T)) { fn iter2<U, T>(v: [ U], v2: [const T], f: fn(U, T)) {
let i = 0; let i = 0;
for elt in v { f(elt, v2[i]); i += 1; } for elt in v { f(elt, v2[i]); i += 1; }
} }
@ -1036,7 +1037,7 @@ fn riteri<T>(v: [const T], f: fn(uint, T)) {
The total number of permutations produced is `len(v)!`. If `v` contains The total number of permutations produced is `len(v)!`. If `v` contains
repeated elements, then some permutations are repeated. repeated elements, then some permutations are repeated.
*/ */
fn permute<T: copy>(v: [const T], put: fn([T])) { fn permute<T: copy>(v: [T], put: fn([T])) {
let ln = len(v); let ln = len(v);
if ln == 0u { if ln == 0u {
put([]); put([]);
@ -1051,7 +1052,7 @@ fn permute<T: copy>(v: [const T], put: fn([T])) {
} }
} }
fn windowed <TT: copy> (nn: uint, xx: [TT]) -> [[TT]] { fn windowed <TT: copy> (nn: uint, xx: [const TT]) -> [[TT]] {
let ww = []; let ww = [];
assert 1u <= nn; assert 1u <= nn;