diff options
| author | Ben Blum <bblum@andrew.cmu.edu> | 2012-07-17 13:24:04 -0400 |
|---|---|---|
| committer | Ben Blum <bblum@andrew.cmu.edu> | 2012-07-17 13:32:52 -0400 |
| commit | 156eceb24a44451dd34e8408301b9711478317e4 (patch) | |
| tree | 318cea60ac5cce9971d164be2d680c6685019ec3 /src/libcore/dvec.rs | |
| parent | b67bfe50efcea01a90aff7d13e240a43ecdabd19 (diff) | |
dvec/vec interface cleanup: fixing reach, reverse, adding more pure
Diffstat (limited to 'src/libcore/dvec.rs')
| -rw-r--r-- | src/libcore/dvec.rs | 54 |
1 files changed, 32 insertions, 22 deletions
diff --git a/src/libcore/dvec.rs b/src/libcore/dvec.rs index 2a5df0ea156..bdbdb6cef16 100644 --- a/src/libcore/dvec.rs +++ b/src/libcore/dvec.rs @@ -76,7 +76,7 @@ fn unwrap<A>(-d: dvec<A>) -> ~[mut A] { } impl private_methods<A> for dvec<A> { - fn check_not_borrowed() { + pure fn check_not_borrowed() { unsafe { let data: *() = unsafe::reinterpret_cast(self.data); if data.is_null() { @@ -119,11 +119,13 @@ impl extensions<A> for dvec<A> { } /// Returns the number of elements currently in the dvec - fn len() -> uint { - do self.borrow |v| { - let l = v.len(); - self.return(v); - l + pure fn len() -> uint { + unchecked { + do self.borrow |v| { + let l = v.len(); + self.return(v); + l + } } } @@ -172,6 +174,13 @@ impl extensions<A> for dvec<A> { result } } + + // Reverse the elements in the list, in place + fn reverse() { + do self.borrow |v| { + vec::reverse(v); + } + } } impl extensions<A:copy> for dvec<A> { @@ -229,23 +238,25 @@ impl extensions<A:copy> for dvec<A> { * * See `unwrap()` if you do not wish to copy the contents. */ - fn get() -> ~[A] { - do self.borrow |v| { - let w = vec::from_mut(copy v); - self.return(v); - w + pure fn get() -> ~[A] { + unchecked { + do self.borrow |v| { + let w = vec::from_mut(copy v); + self.return(v); + w + } } } /// Copy out an individual element #[inline(always)] - fn [](idx: uint) -> A { + pure fn [](idx: uint) -> A { self.get_elt(idx) } /// Copy out an individual element #[inline(always)] - fn get_elt(idx: uint) -> A { + pure fn get_elt(idx: uint) -> A { self.check_not_borrowed(); ret self.data[idx]; } @@ -271,7 +282,7 @@ impl extensions<A:copy> for dvec<A> { /// Returns the last element, failing if the vector is empty #[inline(always)] - fn last() -> A { + pure fn last() -> A { self.check_not_borrowed(); let length = self.len(); @@ -285,13 +296,12 @@ impl extensions<A:copy> for dvec<A> { /// Iterates over the elements in reverse order #[inline(always)] fn reach(f: fn(A) -> bool) { - let length = self.len(); - let mut i = 0u; - while i < length { - if !f(self.get_elt(i)) { - break; - } - i += 1u; - } + do self.swap |v| { vec::reach(v, f); v } + } + + /// Iterates over the elements and indices in reverse order + #[inline(always)] + fn reachi(f: fn(uint, A) -> bool) { + do self.swap |v| { vec::reachi(v, f); v } } } |
