diff options
| author | Patrick Walton <[email protected]> | 2010-11-03 17:10:37 -0700 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2010-11-05 10:23:22 -0700 |
| commit | 1d214b4df3013a53e50d778fa921ed99bc498d02 (patch) | |
| tree | c87006304b72bd7fec9962afac5370de4e2d57bd /src/lib | |
| parent | Fix buggy while and do-while translation in rustc. Add test. (diff) | |
| download | rust-1d214b4df3013a53e50d778fa921ed99bc498d02.tar.xz rust-1d214b4df3013a53e50d778fa921ed99bc498d02.zip | |
Move the option type to its own module
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/deque.rs | 18 | ||||
| -rw-r--r-- | src/lib/list.rs | 8 | ||||
| -rw-r--r-- | src/lib/option.rs | 40 | ||||
| -rw-r--r-- | src/lib/std.rc | 1 | ||||
| -rw-r--r-- | src/lib/util.rs | 18 |
5 files changed, 54 insertions, 31 deletions
diff --git a/src/lib/deque.rs b/src/lib/deque.rs index 959339d8..92b1aeda 100644 --- a/src/lib/deque.rs +++ b/src/lib/deque.rs @@ -2,7 +2,7 @@ * A deque, for fun. Untested as of yet. Likely buggy. */ -import std.util; +import std.option; import std._vec; import std._int; @@ -23,7 +23,7 @@ type t[T] = obj { fn create[T]() -> t[T] { - type cell[T] = mutable util.option[T]; + type cell[T] = mutable option.t[T]; let uint initial_capacity = 32u; // 2^5 @@ -39,7 +39,7 @@ fn create[T]() -> t[T] { if (i < nelts) { ret old.((lo + i) % nelts); } else { - ret util.none[T]; + ret option.none; } } @@ -50,7 +50,7 @@ fn create[T]() -> t[T] { fn get[T](vec[cell[T]] elts, uint i) -> T { alt (elts.(i)) { - case (util.some[T](?t)) { ret t; } + case (option.some[T](?t)) { ret t; } case (_) { fail; } } } @@ -77,7 +77,7 @@ fn create[T]() -> t[T] { hi = nelts; } - elts.(lo) = util.some[T](t); + elts.(lo) = option.some[T](t); nelts += 1u; } @@ -88,7 +88,7 @@ fn create[T]() -> t[T] { hi = nelts; } - elts.(hi) = util.some[T](t); + elts.(hi) = option.some[T](t); hi = (hi + 1u) % _vec.len[cell[T]](elts); nelts += 1u; } @@ -99,7 +99,7 @@ fn create[T]() -> t[T] { */ fn pop_front() -> T { let T t = get[T](elts, lo); - elts.(lo) = util.none[T]; + elts.(lo) = option.none[T]; lo = (lo + 1u) % _vec.len[cell[T]](elts); nelts -= 1u; ret t; @@ -113,7 +113,7 @@ fn create[T]() -> t[T] { } let T t = get[T](elts, hi); - elts.(hi) = util.none[T]; + elts.(hi) = option.none[T]; nelts -= 1u; ret t; } @@ -132,7 +132,7 @@ fn create[T]() -> t[T] { } } - let vec[cell[T]] v = _vec.init_elt[cell[T]](util.none[T], + let vec[cell[T]] v = _vec.init_elt[cell[T]](option.none[T], initial_capacity); ret deque[T](0u, 0u, 0u, v); diff --git a/src/lib/list.rs b/src/lib/list.rs index da8d3c0a..8e0380d1 100644 --- a/src/lib/list.rs +++ b/src/lib/list.rs @@ -1,7 +1,7 @@ -import util.option; -import util.some; -import util.none; +import option; +import option.some; +import option.none; // FIXME: It would probably be more appealing to define this as // type list[T] = rec(T hd, option[@list[T]] tl), but at the moment @@ -27,7 +27,7 @@ fn foldl[T,U](&list[T] ls, &U u, fn(&T t, U u) -> U f) -> U { } fn find[T,U](&list[T] ls, - (fn(&T) -> option[U]) f) -> option[U] { + (fn(&T) -> option.t[U]) f) -> option.t[U] { alt(ls) { case (cons[T](?hd, ?tl)) { alt (f(hd)) { diff --git a/src/lib/option.rs b/src/lib/option.rs new file mode 100644 index 00000000..dbf08b3e --- /dev/null +++ b/src/lib/option.rs @@ -0,0 +1,40 @@ +// lib/option.rs + +tag t[T] { + none; + some(T); +} + +type operator[T, U] = fn(&T) -> U; + +fn get[T](&t[T] opt) -> T { + alt (opt) { + case (some[T](?x)) { + ret x; + } + case (none[T]) { + fail; + } + } +} + +fn map[T, U](&operator[T, U] f, &t[T] opt) -> t[U] { + alt (opt) { + case (some[T](?x)) { + ret some[U](f(x)); + } + case (none[T]) { + ret none[U]; + } + } +} + +// Local Variables: +// mode: rust; +// fill-column: 78; +// indent-tabs-mode: nil +// c-basic-offset: 4 +// buffer-file-coding-system: utf-8-unix +// compile-command: "make -k -C .. 2>&1 | sed -e 's/\\/x\\//x:\\//g'"; +// End: + diff --git a/src/lib/std.rc b/src/lib/std.rc index 16cfbb75..e00f2ef2 100644 --- a/src/lib/std.rc +++ b/src/lib/std.rc @@ -20,6 +20,7 @@ mod _task; // Utility modules. +mod option; mod util; // Authorize various rule-bendings. diff --git a/src/lib/util.rs b/src/lib/util.rs index f6e1327b..72844d5f 100644 --- a/src/lib/util.rs +++ b/src/lib/util.rs @@ -1,21 +1,3 @@ -tag option[T] { - none; - some(T); -} - -type operator[T, U] = fn(&T) -> U; - -fn option_map[T, U](&operator[T, U] f, &option[T] opt) -> option[U] { - alt (opt) { - case (some[T](?x)) { - ret some[U](f(x)); - } - case (none[T]) { - ret none[U]; - } - } -} - fn id[T](&T x) -> T { ret x; } |