Skip to content

Commit 9e83b2f

Browse files
committed
Convert vec::{reverse, swap} to methods.
1 parent a890c2c commit 9e83b2f

File tree

10 files changed

+77
-93
lines changed

10 files changed

+77
-93
lines changed

src/libextra/priority_queue.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ impl<T:Ord> PriorityQueue<T> {
107107
let mut end = q.len();
108108
while end > 1 {
109109
end -= 1;
110-
vec::swap(q.data, 0, end);
110+
q.data.swap(0, end);
111111
q.siftdown_range(0, end)
112112
}
113113
q.to_vec()

src/libextra/sort.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,17 @@ pub fn merge_sort<T:Copy>(v: &[T], le: Le<T>) -> ~[T] {
6565

6666
fn part<T>(arr: &mut [T], left: uint,
6767
right: uint, pivot: uint, compare_func: Le<T>) -> uint {
68-
vec::swap(arr, pivot, right);
68+
arr.swap(pivot, right);
6969
let mut storage_index: uint = left;
7070
let mut i: uint = left;
7171
while i < right {
7272
if compare_func(&arr[i], &arr[right]) {
73-
vec::swap(arr, i, storage_index);
73+
arr.swap(i, storage_index);
7474
storage_index += 1;
7575
}
7676
i += 1;
7777
}
78-
vec::swap(arr, storage_index, right);
78+
arr.swap(storage_index, right);
7979
return storage_index;
8080
}
8181

@@ -120,29 +120,29 @@ fn qsort3<T:Copy + Ord + Eq>(arr: &mut [T], left: int, right: int) {
120120
j -= 1;
121121
}
122122
if i >= j { break; }
123-
vec::swap(arr, i as uint, j as uint);
123+
arr.swap(i as uint, j as uint);
124124
if arr[i] == v {
125125
p += 1;
126-
vec::swap(arr, p as uint, i as uint);
126+
arr.swap(p as uint, i as uint);
127127
}
128128
if v == arr[j] {
129129
q -= 1;
130-
vec::swap(arr, j as uint, q as uint);
130+
arr.swap(j as uint, q as uint);
131131
}
132132
}
133-
vec::swap(arr, i as uint, right as uint);
133+
arr.swap(i as uint, right as uint);
134134
j = i - 1;
135135
i += 1;
136136
let mut k: int = left;
137137
while k < p {
138-
vec::swap(arr, k as uint, j as uint);
138+
arr.swap(k as uint, j as uint);
139139
k += 1;
140140
j -= 1;
141141
if k == arr.len() as int { break; }
142142
}
143143
k = right - 1;
144144
while k > q {
145-
vec::swap(arr, i as uint, k as uint);
145+
arr.swap(i as uint, k as uint);
146146
k -= 1;
147147
i += 1;
148148
if k == 0 { break; }
@@ -259,7 +259,7 @@ fn binarysort<T:Copy + Ord>(array: &mut [T], start: uint) {
259259
fn reverse_slice<T>(v: &mut [T], start: uint, end:uint) {
260260
let mut i = start;
261261
while i < end / 2 {
262-
vec::swap(v, i, end - i - 1);
262+
v.swap(i, end - i - 1);
263263
i += 1;
264264
}
265265
}
@@ -479,7 +479,7 @@ impl<T:Copy + Ord> MergeState<T> {
479479
let mut len1 = len1;
480480
let mut len2 = len2;
481481

482-
vec::swap(array, dest, c2);
482+
array.swap(dest, c2);
483483
dest += 1; c2 += 1; len2 -= 1;
484484

485485
if len2 == 0 {
@@ -501,7 +501,7 @@ impl<T:Copy + Ord> MergeState<T> {
501501
loop {
502502
assert!(len1 > 1 && len2 != 0);
503503
if array[c2] < tmp[c1] {
504-
vec::swap(array, dest, c2);
504+
array.swap(dest, c2);
505505
dest += 1; c2 += 1; len2 -= 1;
506506
count2 += 1; count1 = 0;
507507
if len2 == 0 {
@@ -534,7 +534,7 @@ impl<T:Copy + Ord> MergeState<T> {
534534
dest += count1; c1 += count1; len1 -= count1;
535535
if len1 <= 1 { break_outer = true; break; }
536536
}
537-
vec::swap(array, dest, c2);
537+
array.swap(dest, c2);
538538
dest += 1; c2 += 1; len2 -= 1;
539539
if len2 == 0 { break_outer = true; break; }
540540

@@ -589,7 +589,7 @@ impl<T:Copy + Ord> MergeState<T> {
589589
let mut len1 = len1;
590590
let mut len2 = len2;
591591

592-
vec::swap(array, dest, c1);
592+
array.swap(dest, c1);
593593
dest -= 1; c1 -= 1; len1 -= 1;
594594

595595
if len1 == 0 {
@@ -613,7 +613,7 @@ impl<T:Copy + Ord> MergeState<T> {
613613
loop {
614614
assert!(len1 != 0 && len2 > 1);
615615
if tmp[c2] < array[c1] {
616-
vec::swap(array, dest, c1);
616+
array.swap(dest, c1);
617617
dest -= 1; c1 -= 1; len1 -= 1;
618618
count1 += 1; count2 = 0;
619619
if len1 == 0 {
@@ -666,7 +666,7 @@ impl<T:Copy + Ord> MergeState<T> {
666666
copy_vec(array, dest+1, tmp.slice(c2+1, c2+1+count2));
667667
if len2 <= 1 { break_outer = true; break; }
668668
}
669-
vec::swap(array, dest, c1);
669+
array.swap(dest, c1);
670670
dest -= 1; c1 -= 1; len1 -= 1;
671671
if len1 == 0 { break_outer = true; break; }
672672
min_gallop -= 1;
@@ -1049,7 +1049,7 @@ mod big_tests {
10491049
fn makeRange(n: uint) -> ~[uint] {
10501050
let one = do vec::from_fn(n) |i| { i };
10511051
let mut two = copy one;
1052-
vec::reverse(two);
1052+
two.reverse();
10531053
vec::append(two, one)
10541054
}
10551055

@@ -1073,7 +1073,7 @@ mod big_tests {
10731073
tim_sort(arr); // *sort
10741074
isSorted(arr);
10751075

1076-
vec::reverse(arr);
1076+
arr.reverse();
10771077
tim_sort(arr); // \sort
10781078
isSorted(arr);
10791079

@@ -1083,7 +1083,7 @@ mod big_tests {
10831083
for 3.times {
10841084
let i1 = rng.gen_uint_range(0, n);
10851085
let i2 = rng.gen_uint_range(0, n);
1086-
vec::swap(arr, i1, i2);
1086+
arr.swap(i1, i2);
10871087
}
10881088
tim_sort(arr); // 3sort
10891089
isSorted(arr);
@@ -1145,7 +1145,7 @@ mod big_tests {
11451145
tim_sort(arr); // *sort
11461146
isSorted(arr);
11471147

1148-
vec::reverse(arr);
1148+
arr.reverse();
11491149
tim_sort(arr); // \sort
11501150
isSorted(arr);
11511151

@@ -1155,7 +1155,7 @@ mod big_tests {
11551155
for 3.times {
11561156
let i1 = rng.gen_uint_range(0, n);
11571157
let i2 = rng.gen_uint_range(0, n);
1158-
vec::swap(arr, i1, i2);
1158+
arr.swap(i1, i2);
11591159
}
11601160
tim_sort(arr); // 3sort
11611161
isSorted(arr);

src/libextra/test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ fn run_tests(opts: &TestOpts,
449449
debug!("using %u test tasks", concurrency);
450450
451451
let mut remaining = filtered_tests;
452-
vec::reverse(remaining);
452+
remaining.reverse();
453453
let mut pending = 0;
454454
455455
let (p, ch) = stream();

src/libstd/num/strconv.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ use char;
1818
use str;
1919
use str::{StrSlice};
2020
use kinds::Copy;
21-
use vec;
22-
use vec::{CopyableVector, ImmutableVector};
21+
use vec::{CopyableVector, ImmutableVector, MutableVector};
2322
use vec::OwnedVector;
2423
use num::{NumCast, Zero, One, cast, pow_with_uint};
2524
use f64;
@@ -257,7 +256,7 @@ pub fn to_str_bytes_common<T:NumCast+Zero+One+Eq+Ord+NumStrConv+Copy+
257256
_ => ()
258257
}
259258

260-
vec::reverse(buf);
259+
buf.reverse();
261260

262261
// Remember start of the fractional digits.
263262
// Points one beyond end of buf if none get generated,

src/libstd/rand.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ impl<R: Rng> RngUtil for R {
590590
// invariant: elements with index >= i have been locked in place.
591591
i -= 1u;
592592
// lock element i in place.
593-
vec::swap(values, i, self.gen_uint_range(0u, i + 1u));
593+
values.swap(i, self.gen_uint_range(0u, i + 1u));
594594
}
595595
}
596596
}

src/libstd/vec.rs

Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ pub fn rsplit<T:Copy>(v: &[T], f: &fn(t: &T) -> bool) -> ~[~[T]] {
251251
}
252252
}
253253
result.push(v.slice(0u, end).to_owned());
254-
reverse(result);
254+
result.reverse();
255255
result
256256
}
257257

@@ -278,7 +278,7 @@ pub fn rsplitn<T:Copy>(v: &[T], n: uint, f: &fn(t: &T) -> bool) -> ~[~[T]] {
278278
}
279279
}
280280
result.push(v.slice(0u, end).to_owned());
281-
reverse(result);
281+
result.reverse();
282282
result
283283
}
284284

@@ -751,40 +751,10 @@ pub fn zip<T, U>(mut v: ~[T], mut u: ~[U]) -> ~[(T, U)] {
751751
w.push((v.pop(),u.pop()));
752752
i -= 1;
753753
}
754-
reverse(w);
754+
w.reverse();
755755
w
756756
}
757757

758-
/**
759-
* Swaps two elements in a vector
760-
*
761-
* # Arguments
762-
*
763-
* * v The input vector
764-
* * a - The index of the first element
765-
* * b - The index of the second element
766-
*/
767-
#[inline]
768-
pub fn swap<T>(v: &mut [T], a: uint, b: uint) {
769-
unsafe {
770-
// Can't take two mutable loans from one vector, so instead just cast
771-
// them to their raw pointers to do the swap
772-
let pa: *mut T = &mut v[a];
773-
let pb: *mut T = &mut v[b];
774-
ptr::swap_ptr(pa, pb);
775-
}
776-
}
777-
778-
/// Reverse the order of elements in a vector, in place
779-
pub fn reverse<T>(v: &mut [T]) {
780-
let mut i: uint = 0;
781-
let ln = v.len();
782-
while i < ln / 2 {
783-
swap(v, i, ln - i - 1);
784-
i += 1;
785-
}
786-
}
787-
788758
/// Returns a vector with the order of elements reversed
789759
pub fn reversed<T:Copy>(v: &[T]) -> ~[T] {
790760
let mut rs: ~[T] = ~[];
@@ -840,8 +810,8 @@ pub fn each_permutation<T:Copy>(values: &[T], fun: &fn(perm : &[T]) -> bool) ->
840810
}
841811
// swap indices[k] and indices[l]; sort indices[k+1..]
842812
// (they're just reversed)
843-
vec::swap(indices, k, l);
844-
reverse(indices.mut_slice(k+1, length));
813+
indices.swap(k, l);
814+
indices.mut_slice(k+1, length).reverse();
845815
// fixup permutation based on indices
846816
for uint::range(k, length) |i| {
847817
permutation[i] = copy values[indices[i]];
@@ -1598,7 +1568,7 @@ impl<T> OwnedVector<T> for ~[T] {
15981568
self.push(x);
15991569
let mut j = len;
16001570
while j > i {
1601-
swap(*self, j, j - 1);
1571+
self.swap(j, j - 1);
16021572
j -= 1;
16031573
}
16041574
}
@@ -1611,7 +1581,7 @@ impl<T> OwnedVector<T> for ~[T] {
16111581

16121582
let mut j = i;
16131583
while j < len - 1 {
1614-
swap(*self, j, j + 1);
1584+
self.swap(j, j + 1);
16151585
j += 1;
16161586
}
16171587
self.pop()
@@ -1629,7 +1599,7 @@ impl<T> OwnedVector<T> for ~[T] {
16291599
fail!("vec::swap_remove - index %u >= length %u", index, ln);
16301600
}
16311601
if index < ln - 1 {
1632-
swap(*self, index, ln - 1);
1602+
self.swap(index, ln - 1);
16331603
}
16341604
self.pop()
16351605
}
@@ -1660,7 +1630,7 @@ impl<T> OwnedVector<T> for ~[T] {
16601630
if !f(&self[i]) {
16611631
deleted += 1;
16621632
} else if deleted > 0 {
1663-
swap(*self, i - deleted, i);
1633+
self.swap(i - deleted, i);
16641634
}
16651635
}
16661636

@@ -1772,6 +1742,10 @@ pub trait MutableVector<'self, T> {
17721742
fn mut_iter(self) -> VecMutIterator<'self, T>;
17731743
fn mut_rev_iter(self) -> VecMutRevIterator<'self, T>;
17741744

1745+
fn swap(self, a: uint, b: uint);
1746+
1747+
fn reverse(self);
1748+
17751749
/**
17761750
* Consumes `src` and moves as many elements as it can into `self`
17771751
* from the range [start,end).
@@ -1823,6 +1797,34 @@ impl<'self,T> MutableVector<'self, T> for &'self mut [T] {
18231797
}
18241798
}
18251799

1800+
/**
1801+
* Swaps two elements in a vector
1802+
*
1803+
* # Arguments
1804+
*
1805+
* * a - The index of the first element
1806+
* * b - The index of the second element
1807+
*/
1808+
fn swap(self, a: uint, b: uint) {
1809+
unsafe {
1810+
// Can't take two mutable loans from one vector, so instead just cast
1811+
// them to their raw pointers to do the swap
1812+
let pa: *mut T = &mut self[a];
1813+
let pb: *mut T = &mut self[b];
1814+
ptr::swap_ptr(pa, pb);
1815+
}
1816+
}
1817+
1818+
/// Reverse the order of elements in a vector, in place
1819+
fn reverse(self) {
1820+
let mut i: uint = 0;
1821+
let ln = self.len();
1822+
while i < ln / 2 {
1823+
self.swap(i, ln - i - 1);
1824+
i += 1;
1825+
}
1826+
}
1827+
18261828
#[inline]
18271829
fn move_from(self, mut src: ~[T], start: uint, end: uint) -> uint {
18281830
for self.mut_iter().zip(src.mut_slice(start, end).mut_iter()).advance |(a, b)| {
@@ -2887,7 +2889,7 @@ mod tests {
28872889
let mut v: ~[int] = ~[10, 20];
28882890
assert_eq!(v[0], 10);
28892891
assert_eq!(v[1], 20);
2890-
reverse(v);
2892+
v.reverse();
28912893
assert_eq!(v[0], 20);
28922894
assert_eq!(v[1], 10);
28932895
let v2 = reversed::<int>([10, 20]);
@@ -2900,7 +2902,7 @@ mod tests {
29002902
let v4 = reversed::<int>([]);
29012903
assert_eq!(v4, ~[]);
29022904
let mut v3: ~[int] = ~[];
2903-
reverse::<int>(v3);
2905+
v3.reverse();
29042906
}
29052907

29062908
#[test]
@@ -3549,7 +3551,7 @@ mod tests {
35493551
#[test]
35503552
fn test_reverse_part() {
35513553
let mut values = [1,2,3,4,5];
3552-
reverse(values.mut_slice(1, 4));
3554+
values.mut_slice(1, 4).reverse();
35533555
assert_eq!(values, [1,4,3,2,5]);
35543556
}
35553557

0 commit comments

Comments
 (0)