Skip to content

Commit 134e5c8

Browse files
committed
Demode sort.rs
1 parent b06599a commit 134e5c8

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

src/cargo/cargo.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1499,7 +1499,8 @@ fn print_pkg(s: source, p: package) {
14991499
fn print_source(s: source) {
15001500
info(s.name + ~" (" + s.url + ~")");
15011501

1502-
let pks = sort::merge_sort(sys::shape_lt, copy s.packages);
1502+
let unsorted_pks = s.packages; // to prevent illegal borrow?
1503+
let pks = sort::merge_sort(sys::shape_lt, unsorted_pks);
15031504
let l = vec::len(pks);
15041505

15051506
print(io::with_str_writer(|writer| {

src/libstd/sort.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
//! Sorting methods
2+
#[forbid(deprecated_mode)];
3+
#[forbid(deprecated_pattern)];
4+
25
import vec::{len, push};
36
import core::cmp::{Eq, Ord};
47

@@ -15,12 +18,12 @@ type le<T> = pure fn(v1: &T, v2: &T) -> bool;
1518
* Has worst case O(n log n) performance, best case O(n), but
1619
* is not space efficient. This is a stable sort.
1720
*/
18-
fn merge_sort<T: copy>(le: le<T>, v: ~[const T]) -> ~[T] {
21+
fn merge_sort<T: copy>(le: le<T>, v: &[const T]) -> ~[T] {
1922
type slice = (uint, uint);
2023

2124
return merge_sort_(le, v, (0u, len(v)));
2225

23-
fn merge_sort_<T: copy>(le: le<T>, v: ~[const T], slice: slice)
26+
fn merge_sort_<T: copy>(le: le<T>, v: &[const T], slice: slice)
2427
-> ~[T] {
2528
let begin = slice.first();
2629
let end = slice.second();
@@ -35,7 +38,7 @@ fn merge_sort<T: copy>(le: le<T>, v: ~[const T]) -> ~[T] {
3538
return merge(le, merge_sort_(le, v, a), merge_sort_(le, v, b));
3639
}
3740

38-
fn merge<T: copy>(le: le<T>, a: ~[T], b: ~[T]) -> ~[T] {
41+
fn merge<T: copy>(le: le<T>, a: &[T], b: &[T]) -> ~[T] {
3942
let mut rs = ~[];
4043
vec::reserve(rs, len(a) + len(b));
4144
let a_len = len(a);
@@ -54,7 +57,7 @@ fn merge_sort<T: copy>(le: le<T>, v: ~[const T]) -> ~[T] {
5457
}
5558
}
5659

57-
fn part<T: copy>(compare_func: le<T>, arr: ~[mut T], left: uint,
60+
fn part<T: copy>(compare_func: le<T>, arr: &[mut T], left: uint,
5861
right: uint, pivot: uint) -> uint {
5962
let pivot_value = arr[pivot];
6063
arr[pivot] <-> arr[right];
@@ -71,7 +74,7 @@ fn part<T: copy>(compare_func: le<T>, arr: ~[mut T], left: uint,
7174
return storage_index;
7275
}
7376

74-
fn qsort<T: copy>(compare_func: le<T>, arr: ~[mut T], left: uint,
77+
fn qsort<T: copy>(compare_func: le<T>, arr: &[mut T], left: uint,
7578
right: uint) {
7679
if right > left {
7780
let pivot = (left + right) / 2u;
@@ -90,12 +93,12 @@ fn qsort<T: copy>(compare_func: le<T>, arr: ~[mut T], left: uint,
9093
* Has worst case O(n^2) performance, average case O(n log n).
9194
* This is an unstable sort.
9295
*/
93-
fn quick_sort<T: copy>(compare_func: le<T>, arr: ~[mut T]) {
96+
fn quick_sort<T: copy>(compare_func: le<T>, arr: &[mut T]) {
9497
if len::<T>(arr) == 0u { return; }
9598
qsort::<T>(compare_func, arr, 0u, len::<T>(arr) - 1u);
9699
}
97100

98-
fn qsort3<T: copy Ord Eq>(arr: ~[mut T], left: int, right: int) {
101+
fn qsort3<T: copy Ord Eq>(arr: &[mut T], left: int, right: int) {
99102
if right <= left { return; }
100103
let v: T = arr[right];
101104
let mut i: int = left - 1;
@@ -152,14 +155,14 @@ fn qsort3<T: copy Ord Eq>(arr: ~[mut T], left: int, right: int) {
152155
*
153156
* This is an unstable sort.
154157
*/
155-
fn quick_sort3<T: copy Ord Eq>(arr: ~[mut T]) {
158+
fn quick_sort3<T: copy Ord Eq>(arr: &[mut T]) {
156159
if arr.len() <= 1 { return; }
157160
qsort3(arr, 0, (arr.len() - 1) as int);
158161
}
159162

160163
#[cfg(test)]
161164
mod test_qsort3 {
162-
fn check_sort(v1: ~[mut int], v2: ~[mut int]) {
165+
fn check_sort(v1: &[mut int], v2: &[mut int]) {
163166
let len = vec::len::<int>(v1);
164167
quick_sort3::<int>(v1);
165168
let mut i = 0u;
@@ -198,7 +201,7 @@ mod test_qsort3 {
198201

199202
#[cfg(test)]
200203
mod test_qsort {
201-
fn check_sort(v1: ~[mut int], v2: ~[mut int]) {
204+
fn check_sort(v1: &[mut int], v2: &[mut int]) {
202205
let len = vec::len::<int>(v1);
203206
pure fn leual(a: &int, b: &int) -> bool { *a <= *b }
204207
quick_sort::<int>(leual, v1);
@@ -258,7 +261,7 @@ mod test_qsort {
258261
#[cfg(test)]
259262
mod tests {
260263

261-
fn check_sort(v1: ~[int], v2: ~[int]) {
264+
fn check_sort(v1: &[int], v2: &[int]) {
262265
let len = vec::len::<int>(v1);
263266
pure fn le(a: &int, b: &int) -> bool { *a <= *b }
264267
let f = le;

0 commit comments

Comments
 (0)