Skip to content

Commit 5adaa6f

Browse files
committed
Do some cleanup in stdlib.
1 parent 169f1e5 commit 5adaa6f

File tree

4 files changed

+69
-69
lines changed

4 files changed

+69
-69
lines changed

src/lib/list.rs

+18-13
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
1-
21
import option::some;
32
import option::none;
43

5-
6-
// FIXME: It would probably be more appealing to define this as
7-
// type list[T] = rec(T hd, option[@list[T]] tl), but at the moment
8-
// our recursion rules do not permit that.
94
tag list[T] { cons(T, @list[T]); nil; }
105

116
fn from_vec[@T](v: vec[T]) -> list[T] {
@@ -48,31 +43,41 @@ fn has[@T](ls_: &list[T], elt: &T) -> bool {
4843
while true {
4944
alt ls {
5045
cons(hd, tl) { if elt == hd { ret true; } else { ls = *tl; } }
51-
nil. { ret false; }
46+
nil. { break; }
5247
}
5348
}
54-
ret false; // Typestate checker doesn't understand infinite loops
55-
49+
ret false;
5650
}
5751

5852
fn length[@T](ls: &list[T]) -> uint {
5953
fn count[T](t: &T, u: &uint) -> uint { ret u + 1u; }
60-
ret foldl[T, uint](ls, 0u, bind count[T](_, _));
54+
ret foldl(ls, 0u, count);
6155
}
6256

63-
fn cdr[@T](ls: &list[T]) -> list[T] { alt ls { cons(_, tl) { ret *tl; } } }
57+
fn cdr[@T](ls: &list[T]) -> list[T] {
58+
alt ls {
59+
cons(_, tl) { ret *tl; }
60+
nil. { fail "list empty" }
61+
}
62+
}
6463

65-
fn car[@T](ls: &list[T]) -> T { alt ls { cons(hd, _) { ret hd; } } }
64+
fn car[@T](ls: &list[T]) -> T {
65+
alt ls {
66+
cons(hd, _) { ret hd; }
67+
nil. { fail "list empty" }
68+
}
69+
}
6670

6771
fn append[@T](l: &list[T], m: &list[T]) -> list[T] {
6872
alt l {
6973
nil. { ret m; }
7074
cons(x, xs) {
71-
let rest: list[T] = append[T](*xs, m);
72-
ret cons[T](x, @rest);
75+
let rest = append(*xs, m);
76+
ret cons(x, @rest);
7377
}
7478
}
7579
}
80+
7681
// Local Variables:
7782
// mode: rust;
7883
// fill-column: 78;

src/lib/map.rs

+37-43
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,9 @@ fn mk_hashmap[@K, @V](hasher: &hashfn[K], eqer: &eqfn[K]) -> hashmap[K, V] {
5353
* will fail.
5454
*/
5555

56-
fn insert_common[@K,
57-
@V](hasher: &hashfn[K], eqer: &eqfn[K],
58-
bkts: &[mutable bucket[K, V]], nbkts: uint,
59-
key: &K, val: &V) -> bool {
56+
fn insert_common[@K, @V](hasher: &hashfn[K], eqer: &eqfn[K],
57+
bkts: &[mutable bucket[K, V]], nbkts: uint,
58+
key: &K, val: &V) -> bool {
6059
let i: uint = 0u;
6160
let h: uint = hasher(key);
6261
while i < nbkts {
@@ -67,93 +66,88 @@ fn mk_hashmap[@K, @V](hasher: &hashfn[K], eqer: &eqfn[K]) -> hashmap[K, V] {
6766

6867
let k_ = k;
6968
if eqer(key, k_) {
70-
bkts.(j) = some[K, V](k_, val);
69+
bkts.(j) = some(k_, val);
7170
ret false;
7271
}
7372
i += 1u;
7473
}
75-
_ { bkts.(j) = some[K, V](key, val); ret true; }
74+
_ { bkts.(j) = some(key, val); ret true; }
7675
}
7776
}
7877
fail; // full table
79-
8078
}
81-
fn find_common[@K,
82-
@V](hasher: &hashfn[K], eqer: &eqfn[K],
83-
bkts: &[mutable bucket[K, V]], nbkts: uint, key: &K)
84-
-> option::t[V] {
79+
fn find_common[@K, @V](hasher: &hashfn[K], eqer: &eqfn[K],
80+
bkts: &[mutable bucket[K, V]], nbkts: uint,
81+
key: &K) -> option::t[V] {
8582
let i: uint = 0u;
8683
let h: uint = hasher(key);
8784
while i < nbkts {
8885
let j: uint = hash(h, nbkts, i);
8986
alt bkts.(j) {
9087
some(k, v) {
9188
// Copy to please alias analysis.
92-
9389
let k_ = k;
9490
let v_ = v;
95-
if eqer(key, k_) { ret option::some[V](v_); }
91+
if eqer(key, k_) { ret option::some(v_); }
9692
}
97-
nil. { ret option::none[V]; }
98-
deleted[K, V]. { }
93+
nil. { ret option::none; }
94+
deleted. { }
9995
}
10096
i += 1u;
10197
}
102-
ret option::none[V];
98+
ret option::none;
10399
}
104-
fn rehash[@K,
105-
@V](hasher: &hashfn[K], eqer: &eqfn[K],
106-
oldbkts: &[mutable bucket[K, V]], noldbkts: uint,
107-
newbkts: &[mutable bucket[K, V]], nnewbkts: uint) {
100+
fn rehash[@K, @V](hasher: &hashfn[K], eqer: &eqfn[K],
101+
oldbkts: &[mutable bucket[K, V]], noldbkts: uint,
102+
newbkts: &[mutable bucket[K, V]], nnewbkts: uint) {
108103
for b: bucket[K, V] in oldbkts {
109104
alt b {
110105
some(k_, v_) {
111106
let k = k_;
112107
let v = v_;
113-
insert_common[K, V](hasher, eqer, newbkts, nnewbkts, k, v);
108+
insert_common(hasher, eqer, newbkts, nnewbkts, k, v);
114109
}
115110
_ { }
116111
}
117112
}
118113
}
119-
obj hashmap[@K,
120-
@V](hasher: hashfn[K],
121-
eqer: eqfn[K],
122-
mutable bkts: [mutable bucket[K, V]],
123-
mutable nbkts: uint,
124-
mutable nelts: uint,
125-
lf: util::rational) {
114+
obj hashmap[@K, @V](hasher: hashfn[K],
115+
eqer: eqfn[K],
116+
mutable bkts: [mutable bucket[K, V]],
117+
mutable nbkts: uint,
118+
mutable nelts: uint,
119+
lf: util::rational) {
126120
fn size() -> uint { ret nelts; }
127121
fn insert(key: &K, val: &V) -> bool {
128122
let load: util::rational =
129123
{num: nelts + 1u as int, den: nbkts as int};
130124
if !util::rational_leq(load, lf) {
131125
let nnewbkts: uint = uint::next_power_of_two(nbkts + 1u);
132-
let newbkts = make_buckets[K, V](nnewbkts);
133-
rehash[K, V](hasher, eqer, bkts, nbkts, newbkts, nnewbkts);
126+
let newbkts = make_buckets(nnewbkts);
127+
rehash(hasher, eqer, bkts, nbkts, newbkts, nnewbkts);
134128
bkts = newbkts;
135129
nbkts = nnewbkts;
136130
}
137-
if insert_common[K, V](hasher, eqer, bkts, nbkts, key, val) {
131+
if insert_common(hasher, eqer, bkts, nbkts, key, val) {
138132
nelts += 1u;
139133
ret true;
140134
}
141135
ret false;
142136
}
143137
fn contains_key(key: &K) -> bool {
144-
ret alt find_common[K, V](hasher, eqer, bkts, nbkts, key) {
138+
ret alt find_common(hasher, eqer, bkts, nbkts, key) {
145139
option::some(_) { true }
146140
_ { false }
147141
};
148142
}
149143
fn get(key: &K) -> V {
150-
ret alt find_common[K, V](hasher, eqer, bkts, nbkts, key) {
144+
ret alt find_common(hasher, eqer, bkts, nbkts, key) {
151145
option::some(val) { val }
152146
_ { fail }
153147
};
154148
}
155149
fn find(key: &K) -> option::t[V] {
156-
be find_common[K, V](hasher, eqer, bkts, nbkts, key);
150+
be find_common(hasher, eqer, bkts, nbkts, key);
157151
}
158152
fn remove(key: &K) -> option::t[V] {
159153
let i: uint = 0u;
@@ -165,21 +159,21 @@ fn mk_hashmap[@K, @V](hasher: &hashfn[K], eqer: &eqfn[K]) -> hashmap[K, V] {
165159
let k_ = k;
166160
let vo = option::some(v);
167161
if eqer(key, k_) {
168-
bkts.(j) = deleted[K, V];
162+
bkts.(j) = deleted;
169163
nelts -= 1u;
170164
ret vo;
171165
}
172166
}
173167
deleted. { }
174-
nil. { ret option::none[V]; }
168+
nil. { ret option::none; }
175169
}
176170
i += 1u;
177171
}
178-
ret option::none[V];
172+
ret option::none;
179173
}
180174
fn rehash() {
181-
let newbkts = make_buckets[K, V](nbkts);
182-
rehash[K, V](hasher, eqer, bkts, nbkts, newbkts, nbkts);
175+
let newbkts = make_buckets(nbkts);
176+
rehash(hasher, eqer, bkts, nbkts, newbkts, nbkts);
183177
bkts = newbkts;
184178
}
185179
iter items() -> @{key: K, val: V} {
@@ -193,8 +187,8 @@ fn mk_hashmap[@K, @V](hasher: &hashfn[K], eqer: &eqfn[K]) -> hashmap[K, V] {
193187
}
194188
}
195189
}
196-
let bkts = make_buckets[K, V](initial_capacity);
197-
ret hashmap[K, V](hasher, eqer, bkts, initial_capacity, 0u, load_factor);
190+
let bkts = make_buckets(initial_capacity);
191+
ret hashmap(hasher, eqer, bkts, initial_capacity, 0u, load_factor);
198192
}
199193

200194
// Hash map constructors for basic types
@@ -206,13 +200,13 @@ fn new_str_hash[@V]() -> hashmap[str, V] {
206200
fn new_int_hash[@V]() -> hashmap[int, V] {
207201
fn hash_int(x: &int) -> uint { ret x as uint; }
208202
fn eq_int(a: &int, b: &int) -> bool { ret a == b; }
209-
ret mk_hashmap[int, V](hash_int, eq_int);
203+
ret mk_hashmap(hash_int, eq_int);
210204
}
211205

212206
fn new_uint_hash[@V]() -> hashmap[uint, V] {
213207
fn hash_uint(x: &uint) -> uint { ret x; }
214208
fn eq_uint(a: &uint, b: &uint) -> bool { ret a == b; }
215-
ret mk_hashmap[uint, V](hash_uint, eq_uint);
209+
ret mk_hashmap(hash_uint, eq_uint);
216210
}
217211

218212
// Local Variables:

src/lib/option.rs

+13-11
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,39 @@
1-
2-
3-
41
// lib/option::rs
2+
53
tag t[@T] { none; some(T); }
64

75
type operator[@T, @U] = fn(&T) -> U ;
86

9-
fn get[@T](opt: &t[T]) -> T { ret alt opt { some(x) { x } none. { fail } }; }
7+
fn get[@T](opt: &t[T]) -> T {
8+
alt opt {
9+
some(x) { x }
10+
none. { fail "option none" }
11+
}
12+
}
1013

1114
fn map[@T, @U](f: &operator[T, U], opt: &t[T]) -> t[U] {
12-
ret alt opt { some(x) { some[U](f(x)) } none. { none[U] } };
15+
alt opt { some(x) { some(f(x)) } none. { none } }
1316
}
1417

1518
fn is_none[@T](opt: &t[T]) -> bool {
16-
ret alt opt { none. { true } some(_) { false } };
19+
alt opt { none. { true } some(_) { false } }
1720
}
1821

19-
fn is_some[@T](opt: &t[T]) -> bool { ret !is_none(opt); }
22+
fn is_some[@T](opt: &t[T]) -> bool { !is_none(opt) }
2023

2124
fn from_maybe[@T](def: &T, opt: &t[T]) -> T {
22-
let f = bind util::id[T](_);
23-
ret maybe[T, T](def, f, opt);
25+
alt opt { some(x) { x } none. { def } }
2426
}
2527

2628
fn maybe[@T, @U](def: &U, f: fn(&T) -> U , opt: &t[T]) -> U {
27-
ret alt opt { none. { def } some(t) { f(t) } };
29+
alt opt { none. { def } some(t) { f(t) } }
2830
}
2931

30-
3132
// Can be defined in terms of the above when/if we have const bind.
3233
fn may[@T](f: fn(&T) , opt: &t[T]) {
3334
alt opt { none. {/* nothing */ } some(t) { f(t); } }
3435
}
36+
3537
// Local Variables:
3638
// mode: rust;
3739
// fill-column: 78;

src/lib/sio.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@ fn make_socket(ctx: ctx, p: port[aio::socket_event]) -> client {
1717
aio::connected(client) {
1818
ret { ctx: ctx, client: client, evt: p };
1919
}
20+
_ { fail "Could not connect to client"; }
2021
}
21-
log_err ("Could not connect to client");
22-
fail;
2322
}
2423

2524
fn connect_to(ctx: ctx, ip: str, portnum: int) -> client {

0 commit comments

Comments
 (0)