File tree Expand file tree Collapse file tree 3 files changed +69
-1
lines changed Expand file tree Collapse file tree 3 files changed +69
-1
lines changed Original file line number Diff line number Diff line change 1
1
---
2
- refs/heads/master: 7f938f4945bcf6ba27f872b179a517e4d5c39a4f
2
+ refs/heads/master: 5d09e12e15b8b37739cb2935ae3e8e13c693bd8f
Original file line number Diff line number Diff line change @@ -322,6 +322,45 @@ fn freeze[T](vec[mutable T] v) -> vec[T] {
322
322
ret result;
323
323
}
324
324
325
+ // Swaps two elements in a vector
326
+ fn swap[ T ] ( & vec[ T ] v, uint a, uint b) {
327
+ let T t = v. ( a) ;
328
+ v. ( a) = v. ( b) ;
329
+ v. ( b) = t;
330
+ }
331
+
332
+ // In place vector reversal
333
+ fn reverse[ T ] ( & vec[ T ] v) -> ( ) {
334
+ let uint i = 0 u;
335
+ auto ln = len[ T ] ( v) ;
336
+
337
+ while ( i < ln / 2 u) {
338
+ swap ( v, i, ln - i - 1 u) ;
339
+ i += 1 u;
340
+ }
341
+ }
342
+
343
+ // Functional vector reversal. Returns a reversed copy of v.
344
+ fn reversed[ T ] ( vec[ T ] v) -> vec[ T ] {
345
+ let vec[ T ] res = [ ] ;
346
+
347
+ auto i = len[ T ] ( v) ;
348
+ if ( i == 0 u) {
349
+ ret res;
350
+ }
351
+ else {
352
+ i -= 1 u;
353
+ }
354
+
355
+ while ( i != 0 u) {
356
+ push[ T ] ( res, v. ( i) ) ;
357
+ i -= 1 u;
358
+ }
359
+ push[ T ] ( res, v. ( 0 ) ) ;
360
+
361
+ ret res;
362
+ }
363
+
325
364
// Local Variables:
326
365
// mode: rust;
327
366
// fill-column: 78;
Original file line number Diff line number Diff line change
1
+ use std;
2
+ import std:: vec;
3
+
4
+ fn main ( ) {
5
+ let vec[ int] v = [ 10 , 20 ] ;
6
+
7
+ assert v. ( 0 ) == 10 ;
8
+ assert v. ( 1 ) == 20 ;
9
+
10
+ vec:: reverse[ int] ( v) ;
11
+
12
+ assert v. ( 0 ) == 20 ;
13
+ assert v. ( 1 ) == 10 ;
14
+
15
+ auto v2 = vec:: reversed[ int] ( v) ;
16
+
17
+ assert v2. ( 0 ) == 10 ;
18
+ assert v2. ( 1 ) == 20 ;
19
+
20
+ v. ( 0 ) = 30 ;
21
+
22
+ assert v2. ( 0 ) == 10 ;
23
+
24
+ // Make sure they work with 0-length vectors too.
25
+ let vec[ int] v3 = [ ] ;
26
+ auto v4 = vec:: reversed[ int] ( v3) ;
27
+
28
+ vec:: reverse[ int] ( v3) ;
29
+ }
You can’t perform that action at this time.
0 commit comments