about summary refs log tree commit diff
path: root/src/libcore/dvec.rs
diff options
context:
space:
mode:
authorBen Blum <bblum@andrew.cmu.edu>2012-07-17 13:24:04 -0400
committerBen Blum <bblum@andrew.cmu.edu>2012-07-17 13:32:52 -0400
commit156eceb24a44451dd34e8408301b9711478317e4 (patch)
tree318cea60ac5cce9971d164be2d680c6685019ec3 /src/libcore/dvec.rs
parentb67bfe50efcea01a90aff7d13e240a43ecdabd19 (diff)
dvec/vec interface cleanup: fixing reach, reverse, adding more pure
Diffstat (limited to 'src/libcore/dvec.rs')
-rw-r--r--src/libcore/dvec.rs54
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 }
     }
 }