Skip to content

Commit 539437e

Browse files
committed
cleaned up top example
1 parent e19d676 commit 539437e

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

top.rs

+8-7
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ struct Top<'a, T> {
66
// Maximum number of elements to contain.
77
count: usize,
88
// Element ordering function.
9-
order: fn(&&T, &&T) -> Ordering,
9+
order: fn(&T, &T) -> Ordering,
1010
// Elements contained, by reference.
1111
elems: Vec<&'a T>,
1212
}
@@ -21,12 +21,10 @@ impl<T: fmt::Debug> fmt::Debug for Top<'_, T> {
2121
}
2222
}
2323

24-
2524
// Can parameterize a function to make it able to take a specified type of data.
26-
27-
fn make_top<'a, T>(count: usize, order: fn(&&T, &&T) -> Ordering, vals: &'a [T]) -> Top<'a, T> {
25+
fn make_top<T>(count: usize, order: fn(&T, &T) -> Ordering, vals: &[T]) -> Top<'_, T> {
2826
let mut elems: Vec<&T> = vals.iter().collect();
29-
elems.sort_by(order);
27+
elems.sort_by(|&v1, &v2| order(v1, v2));
3028
if count < elems.len() {
3129
elems.truncate(count);
3230
}
@@ -37,16 +35,19 @@ fn make_top<'a, T>(count: usize, order: fn(&&T, &&T) -> Ordering, vals: &'a [T])
3735
impl<'a, T> Top<'a, T> {
3836
fn update(&mut self, val: &'a T) {
3937
self.elems.push(val);
40-
self.elems.sort_by(self.order);
41-
while self.elems.len() > self.count {
38+
let order = self.order;
39+
self.elems.sort_by(|&v1, &v2| order(v1, v2));
40+
if self.elems.len() > self.count {
4241
let _ = self.elems.pop();
4342
}
43+
assert!(self.elems.len() <= self.count);
4444
}
4545
}
4646

4747
fn main() {
4848
let vals = [9, 7, 3, 1, 4, 6, 8, 2, 5];
4949
let mut top = make_top(3, |x, y| x.cmp(y), &vals);
50+
println!("{:?}", top);
5051
top.update(&0);
5152
println!("{:?}", top);
5253
}

0 commit comments

Comments
 (0)