Uint-ify various bits of _str and _vec, enrich _vec a bit.
This commit is contained in:
parent
fdf2eaac91
commit
f360d222c8
|
@ -4,13 +4,13 @@ native "rust" mod rustrt {
|
||||||
type sbuf;
|
type sbuf;
|
||||||
fn str_buf(str s) -> sbuf;
|
fn str_buf(str s) -> sbuf;
|
||||||
fn str_len(str s) -> uint;
|
fn str_len(str s) -> uint;
|
||||||
fn str_alloc(int n_bytes) -> str;
|
fn str_alloc(uint n_bytes) -> str;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_utf8(vec[u8] v) -> bool {
|
fn is_utf8(vec[u8] v) -> bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn alloc(int n_bytes) -> str {
|
fn alloc(uint n_bytes) -> str {
|
||||||
ret rustrt.str_alloc(n_bytes);
|
ret rustrt.str_alloc(n_bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,39 @@
|
||||||
import vbuf = rustrt.vbuf;
|
import vbuf = rustrt.vbuf;
|
||||||
|
import op = util.operator;
|
||||||
|
|
||||||
native "rust" mod rustrt {
|
native "rust" mod rustrt {
|
||||||
type vbuf;
|
type vbuf;
|
||||||
fn vec_buf[T](vec[T] v) -> vbuf;
|
fn vec_buf[T](vec[T] v) -> vbuf;
|
||||||
fn vec_len[T](vec[T] v) -> uint;
|
fn vec_len[T](vec[T] v) -> uint;
|
||||||
fn vec_alloc[T](int n_elts) -> vec[T];
|
fn vec_alloc[T](uint n_elts) -> vec[T];
|
||||||
}
|
}
|
||||||
|
|
||||||
fn alloc[T](int n_elts) -> vec[T] {
|
fn alloc[T](uint n_elts) -> vec[T] {
|
||||||
ret rustrt.vec_alloc[T](n_elts);
|
ret rustrt.vec_alloc[T](n_elts);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn init[T](&T t, int n_elts) -> vec[T] {
|
type init_op[T] = fn(uint i) -> T;
|
||||||
|
|
||||||
|
fn init_fn[T](&init_op[T] op, uint n_elts) -> vec[T] {
|
||||||
let vec[T] v = alloc[T](n_elts);
|
let vec[T] v = alloc[T](n_elts);
|
||||||
let int i = n_elts;
|
let uint i = n_elts;
|
||||||
while (i > 0) {
|
while (i > uint(0)) {
|
||||||
i -= 1;
|
i -= uint(1);
|
||||||
|
v += vec(op(i));
|
||||||
|
}
|
||||||
|
ret v;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn init_elt[T](&T t, uint n_elts) -> vec[T] {
|
||||||
|
// FIXME: should be:
|
||||||
|
// fn elt_op[X](X x, uint i) -> X { ret x; }
|
||||||
|
// auto inner = bind elt_op[T](t, _);
|
||||||
|
// ret init_fn[T](inner, n_elts);
|
||||||
|
// but this does not work presently.
|
||||||
|
let vec[T] v = alloc[T](n_elts);
|
||||||
|
let uint i = n_elts;
|
||||||
|
while (i > uint(0)) {
|
||||||
|
i -= uint(1);
|
||||||
v += vec(t);
|
v += vec(t);
|
||||||
}
|
}
|
||||||
ret v;
|
ret v;
|
||||||
|
@ -39,3 +57,15 @@ fn grow[T](mutable vec[T] v, int n, T initval) -> vec[T] {
|
||||||
}
|
}
|
||||||
ret v;
|
ret v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn map[T,U](&op[T,U] f, &vec[T] v) -> vec[U] {
|
||||||
|
// FIXME: should be
|
||||||
|
// let vec[U] u = alloc[U](len[T](v));
|
||||||
|
// but this does not work presently.
|
||||||
|
let vec[U] u = vec();
|
||||||
|
for (T ve in v) {
|
||||||
|
u += vec(f[T,U](ve));
|
||||||
|
}
|
||||||
|
ret u;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,10 @@ use std (name = "std",
|
||||||
uuid = _, ver = _);
|
uuid = _, ver = _);
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
auto s = std._str.alloc(10);
|
auto s = std._str.alloc(uint(10));
|
||||||
s += "hello ";
|
s += "hello ";
|
||||||
log s;
|
log s;
|
||||||
s += "there";
|
s += "there";
|
||||||
log s;
|
log s;
|
||||||
auto z = std._vec.alloc[int](10);
|
auto z = std._vec.alloc[int](uint(10));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue