mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
The few and proud isolated bits from stdlib-work so far that don't break everything. Note util.rs hasn't yet been declared mod in the std crate. Don't do that yet, as it breaks make check.
This commit is contained in:
parent
d94f0e2498
commit
023e5af639
@ -18,3 +18,9 @@ iter range(mutable int lo, int hi) -> int {
|
||||
}
|
||||
}
|
||||
|
||||
iter urange(mutable uint lo, uint hi) -> uint {
|
||||
while (lo < hi) {
|
||||
put lo;
|
||||
lo += uint(1);
|
||||
}
|
||||
}
|
||||
|
@ -28,3 +28,14 @@ fn len[T](vec[T] v) -> uint {
|
||||
fn buf[T](vec[T] v) -> vbuf {
|
||||
ret rustrt.vec_buf[T](v);
|
||||
}
|
||||
|
||||
// Ought to take mutable &vec[T] v and just mutate it instead of copy
|
||||
// and return. Blocking on issue #89 for this.
|
||||
fn grow[T](mutable vec[T] v, int n, T initval) -> vec[T] {
|
||||
let int i = n;
|
||||
while (i > 0) {
|
||||
i -= 1;
|
||||
v += vec(initval);
|
||||
}
|
||||
ret v;
|
||||
}
|
||||
|
46
src/lib/util.rs
Normal file
46
src/lib/util.rs
Normal file
@ -0,0 +1,46 @@
|
||||
type option[T] = tag(none(), some(T));
|
||||
type box[T] = tup(@T);
|
||||
type boxo[T] = option[box[T]];
|
||||
type boxm[T] = tup(mutable @T);
|
||||
type boxmo[T] = option[boxm[T]];
|
||||
|
||||
type map[T, U] = fn(&T) -> U;
|
||||
|
||||
fn option_map[T, U](map[T, U] f, &option[T] opt) -> option[U] {
|
||||
alt (opt) {
|
||||
case (some[T](x)) {
|
||||
ret some[U](f[T, U](x));
|
||||
}
|
||||
case (none[T]()) {
|
||||
ret none[U]();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn unbox[T](&box[T] b) -> T {
|
||||
ret b._0;
|
||||
}
|
||||
|
||||
|
||||
fn unboxm[T](&boxm[T] b) -> T {
|
||||
ret b._0;
|
||||
}
|
||||
|
||||
fn unboxo[T](boxo[T] b) -> option[T] {
|
||||
// Pending issue #90, no need to alias the function item in order to pass
|
||||
// it as an arg.
|
||||
let map[box[T], T] f = unbox[T];
|
||||
be option_map[box[T], T](f, b);
|
||||
}
|
||||
|
||||
fn unboxmo[T](boxmo[T] b) -> option[T] {
|
||||
// Issue #90, as above
|
||||
let map[boxm[T], T] f = unboxm[T];
|
||||
be option_map[boxm[T], T](f, b);
|
||||
}
|
||||
|
||||
fn id[T](T x) -> T {
|
||||
ret x;
|
||||
}
|
||||
|
||||
type rational = rec(int num, int den);
|
Loading…
Reference in New Issue
Block a user