Skip to content

Commit 04ce755

Browse files
committed
---
yaml --- r: 4611 b: refs/heads/master c: 4dec0f6 h: refs/heads/master i: 4609: 99200dd 4607: 90c3a45 v: v3
1 parent 1588474 commit 04ce755

File tree

3 files changed

+34
-8
lines changed

3 files changed

+34
-8
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 97dc75da1661cc29bef070221c2c9635e854023c
2+
refs/heads/master: 4dec0f6d96703db9230c82b12e243f0a95820b37

trunk/src/lib/ivec.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,32 @@ fn zip[@T, @U](v: &[T], u: &[U]) -> [{_0: T, _1: U}] {
303303
}
304304
}
305305

306+
// Swaps two elements in a vector
307+
fn swap[@T](v: &[mutable T], a: uint, b: uint) {
308+
let t: T = v.(a);
309+
v.(a) = v.(b);
310+
v.(b) = t;
311+
}
312+
313+
// In place vector reversal
314+
fn reverse[@T](v: &[mutable T]) {
315+
let i: uint = 0u;
316+
let ln = len[T](v);
317+
while i < ln / 2u { swap(v, i, ln - i - 1u); i += 1u; }
318+
}
319+
320+
321+
// Functional vector reversal. Returns a reversed copy of v.
322+
fn reversed[@T](v: &[T]) -> [T] {
323+
let rs: [T] = ~[];
324+
let i = len[T](v);
325+
if i == 0u { ret rs; } else { i -= 1u; }
326+
while i != 0u { rs += ~[v.(i)]; i -= 1u; }
327+
rs += ~[v.(0)];
328+
ret rs;
329+
}
330+
331+
306332
mod unsafe {
307333
type ivec_repr =
308334
{mutable fill: uint,
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11

22
use std;
3-
import std::vec;
3+
import std::ivec;
44

55
fn main() {
6-
let v: vec[mutable int] = [mutable 10, 20];
6+
let v: [mutable int] = ~[mutable 10, 20];
77
assert (v.(0) == 10);
88
assert (v.(1) == 20);
9-
vec::reverse(v);
9+
ivec::reverse(v);
1010
assert (v.(0) == 20);
1111
assert (v.(1) == 10);
12-
let v2 = vec::reversed[int]([10, 20]);
12+
let v2 = ivec::reversed[int](~[10, 20]);
1313
assert (v2.(0) == 20);
1414
assert (v2.(1) == 10);
1515
v.(0) = 30;
1616
assert (v2.(0) == 20);
1717
// Make sure they work with 0-length vectors too.
1818

19-
let v4 = vec::reversed[int]([]);
20-
let v3: vec[mutable int] = vec::empty_mut();
21-
vec::reverse[int](v3);
19+
let v4 = ivec::reversed[int](~[]);
20+
let v3: [mutable int] = ~[mutable];
21+
ivec::reverse[int](v3);
2222
}

0 commit comments

Comments
 (0)