MVector.clear
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Sat, 12 Jul 2008 13:08:27 +0000 (13:08 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Sat, 12 Jul 2008 13:08:27 +0000 (13:08 +0000)
Data/Vector/MVector.hs
Data/Vector/Mutable.hs
Data/Vector/Unboxed/Mutable.hs

index a7306d8..075a581 100644 (file)
@@ -65,6 +65,9 @@ class (Monad m, MVectorPure v a) => MVector v m a where
   -- | Replace the element at the given position. Index is not checked!
   unsafeWrite      :: v a -> Int -> a -> m ()
 
+  -- | Clear all references to external objects
+  clear            :: v a -> m ()
+
   -- | Write the value at each position.
   set              :: v a -> a -> m ()
 
@@ -231,4 +234,3 @@ map f v = map_loop 0
                                write v i (f x)
                | otherwise = return ()
 
-
index ea56ded..3851de5 100644 (file)
@@ -57,10 +57,16 @@ instance MVector (Vector s) (ST s) a where
       case writeArray# arr# (i# +# j#) x s# of s2# -> (# s2#, () #)
     )
 
+  {-# INLINE clear #-}
+  clear v = MVector.set v uninitialised
+
+
+uninitialised :: a
+uninitialised = error "Data.Vector.Mutable: uninitialised elemen t"
 
 unsafeNew :: Int -> ST s (Vector s a)
 {-# INLINE unsafeNew #-}
-unsafeNew n = unsafeNewWith n (error "Data.Vector.Mutable: uninitialised elemen t")
+unsafeNew n = unsafeNewWith n uninitialised
 
 unsafeNewWith :: Int -> a -> ST s (Vector s a)
 {-# INLINE unsafeNewWith #-}
index 56e647f..267b447 100644 (file)
@@ -58,4 +58,6 @@ instance Unbox a => MVector (Vector s) (ST s) a where
       case write# arr# (i# +# j#) x s# of s2# -> (# s2#, () #)
     )
 
+  {-# INLINE clear #-}
+  clear _ = return ()