aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/_int.rs6
-rw-r--r--src/lib/_vec.rs11
-rw-r--r--src/lib/util.rs46
3 files changed, 63 insertions, 0 deletions
diff --git a/src/lib/_int.rs b/src/lib/_int.rs
index 1bb6cb45..2afb3c4f 100644
--- a/src/lib/_int.rs
+++ b/src/lib/_int.rs
@@ -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);
+ }
+}
diff --git a/src/lib/_vec.rs b/src/lib/_vec.rs
index c938e6fb..86733fb5 100644
--- a/src/lib/_vec.rs
+++ b/src/lib/_vec.rs
@@ -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;
+}
diff --git a/src/lib/util.rs b/src/lib/util.rs
new file mode 100644
index 00000000..bf57bb52
--- /dev/null
+++ b/src/lib/util.rs
@@ -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);