diff options
| author | Eric Holk <eholk@mozilla.com> | 2011-05-19 16:43:46 -0700 |
|---|---|---|
| committer | Graydon Hoare <graydon@mozilla.com> | 2011-05-19 17:25:37 -0700 |
| commit | 5d09e12e15b8b37739cb2935ae3e8e13c693bd8f (patch) | |
| tree | 207a6fc129d8095db6e63e50fe0f62d1c2fdd85f /src/lib/vec.rs | |
| parent | 7f938f4945bcf6ba27f872b179a517e4d5c39a4f (diff) | |
| download | rust-5d09e12e15b8b37739cb2935ae3e8e13c693bd8f.tar.gz rust-5d09e12e15b8b37739cb2935ae3e8e13c693bd8f.zip | |
Added two version of reverse and a swap function to the standard library.
Diffstat (limited to 'src/lib/vec.rs')
| -rw-r--r-- | src/lib/vec.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/lib/vec.rs b/src/lib/vec.rs index ba604073856..f3f06a1dc85 100644 --- a/src/lib/vec.rs +++ b/src/lib/vec.rs @@ -322,6 +322,45 @@ fn freeze[T](vec[mutable T] v) -> vec[T] { ret result; } +// Swaps two elements in a vector +fn swap[T](&vec[T] v, uint a, uint b) { + let T t = v.(a); + v.(a) = v.(b); + v.(b) = t; +} + +// In place vector reversal +fn reverse[T](&vec[T] v) -> () { + let uint i = 0u; + auto ln = len[T](v); + + while(i < ln / 2u) { + swap(v, i, ln - i - 1u); + i += 1u; + } +} + +// Functional vector reversal. Returns a reversed copy of v. +fn reversed[T](vec[T] v) -> vec[T] { + let vec[T] res = []; + + auto i = len[T](v); + if (i == 0u) { + ret res; + } + else { + i -= 1u; + } + + while(i != 0u) { + push[T](res, v.(i)); + i -= 1u; + } + push[T](res, v.(0)); + + ret res; +} + // Local Variables: // mode: rust; // fill-column: 78; |
