Add Mutable.clone
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 24 May 2010 07:50:45 +0000 (07:50 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 24 May 2010 07:50:45 +0000 (07:50 +0000)
Data/Vector/Generic/Mutable.hs
Data/Vector/Mutable.hs
Data/Vector/Primitive/Mutable.hs
Data/Vector/Storable/Mutable.hs
Data/Vector/Unboxed/Mutable.hs

index 5b66efa..7837140 100644 (file)
@@ -30,7 +30,7 @@ module Data.Vector.Generic.Mutable (
   -- * Construction
 
   -- ** Initialisation
-  new, unsafeNew, replicate,
+  new, unsafeNew, replicate, clone,
 
   -- ** Growing
   grow, unsafeGrow,
@@ -474,6 +474,14 @@ replicate :: (PrimMonad m, MVector v a) => Int -> a -> m (v (PrimState m) a)
 {-# INLINE replicate #-}
 replicate n x = basicUnsafeReplicate (delay_inline max 0 n) x
 
+-- | Create a copy of a mutable vector.
+clone :: (PrimMonad m, MVector v a) => v (PrimState m) a -> m (v (PrimState m) a)
+{-# INLINE clone #-}
+clone v = do
+            v' <- unsafeNew (length v)
+            unsafeCopy v' v
+            return v'
+
 -- Growing
 -- -------
 
index 5b03f76..2d58dc4 100644 (file)
@@ -31,7 +31,7 @@ module Data.Vector.Mutable (
   -- * Construction
 
   -- ** Initialisation
-  new, unsafeNew, replicate,
+  new, unsafeNew, replicate, clone,
 
   -- ** Growing
   grow, unsafeGrow,
@@ -199,6 +199,11 @@ replicate :: PrimMonad m => Int -> a -> m (MVector (PrimState m) a)
 {-# INLINE replicate #-}
 replicate = G.replicate
 
+-- | Create a copy of a mutable vector.
+clone :: PrimMonad m => MVector (PrimState m) a -> m (MVector (PrimState m) a)
+{-# INLINE clone #-}
+clone = G.clone
+
 -- Growing
 -- -------
 
index 02af272..4fc8d38 100644 (file)
@@ -31,7 +31,7 @@ module Data.Vector.Primitive.Mutable (
   -- * Construction
 
   -- ** Initialisation
-  new, unsafeNew, replicate,
+  new, unsafeNew, replicate, clone,
 
   -- ** Growing
   grow, unsafeGrow,
@@ -192,6 +192,12 @@ replicate :: (PrimMonad m, Prim a) => Int -> a -> m (MVector (PrimState m) a)
 {-# INLINE replicate #-}
 replicate = G.replicate
 
+-- | Create a copy of a mutable vector.
+clone :: (PrimMonad m, Prim a)
+      => MVector (PrimState m) a -> m (MVector (PrimState m) a)
+{-# INLINE clone #-}
+clone = G.clone
+
 -- Growing
 -- -------
 
index de15eb3..967da9c 100644 (file)
@@ -31,7 +31,7 @@ module Data.Vector.Storable.Mutable(
   -- * Construction
 
   -- ** Initialisation
-  new, unsafeNew, replicate,
+  new, unsafeNew, replicate, clone,
 
   -- ** Growing
   grow, unsafeGrow,
@@ -210,6 +210,12 @@ replicate :: (PrimMonad m, Storable a) => Int -> a -> m (MVector (PrimState m) a
 {-# INLINE replicate #-}
 replicate = G.replicate
 
+-- | Create a copy of a mutable vector.
+clone :: (PrimMonad m, Storable a)
+      => MVector (PrimState m) a -> m (MVector (PrimState m) a)
+{-# INLINE clone #-}
+clone = G.clone
+
 -- Growing
 -- -------
 
index 96d5d3a..b0994ab 100644 (file)
@@ -29,7 +29,7 @@ module Data.Vector.Unboxed.Mutable (
   -- * Construction
 
   -- ** Initialisation
-  new, unsafeNew, replicate,
+  new, unsafeNew, replicate, clone,
 
   -- ** Growing
   grow, unsafeGrow,
@@ -155,6 +155,12 @@ replicate :: (PrimMonad m, Unbox a) => Int -> a -> m (MVector (PrimState m) a)
 {-# INLINE replicate #-}
 replicate = G.replicate
 
+-- | Create a copy of a mutable vector.
+clone :: (PrimMonad m, Unbox a)
+      => MVector (PrimState m) a -> m (MVector (PrimState m) a)
+{-# INLINE clone #-}
+clone = G.clone
+
 -- Growing
 -- -------