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

index 7e24f3c..b7c3182 100644 (file)
@@ -140,7 +140,7 @@ module Data.Vector (
   G.convert,
 
   -- ** Mutable vectors
-  unsafeFreeze, thaw, copy, unsafeCopy
+  unsafeFreeze, unsafeThaw, thaw, copy, unsafeCopy
 ) where
 
 import qualified Data.Vector.Generic as G
@@ -1307,6 +1307,12 @@ unsafeFreeze :: PrimMonad m => MVector (PrimState m) a -> m (Vector a)
 {-# INLINE unsafeFreeze #-}
 unsafeFreeze = G.unsafeFreeze
 
+-- | /O(1)/ Unsafely convert an immutable vector to a mutable one without
+-- copying. The immutable vector may not be used after this operation.
+unsafeThaw :: PrimMonad m => Vector a -> m (MVector (PrimState m) a)
+{-# INLINE unsafeThaw #-}
+unsafeThaw = G.unsafeThaw
+
 -- | /O(n)/ Yield a mutable copy of the immutable vector.
 thaw :: PrimMonad m => Vector a -> m (MVector (PrimState m) a)
 {-# INLINE thaw #-}
index dfe41d0..34a0029 100644 (file)
@@ -130,7 +130,7 @@ module Data.Vector.Generic (
   convert,
 
   -- ** Mutable vectors
-  unsafeFreeze, thaw, copy, unsafeCopy,
+  unsafeFreeze, unsafeThaw, thaw, copy, unsafeCopy,
 
   -- * Fusion support
 
@@ -1591,6 +1591,13 @@ unsafeFreeze
 {-# INLINE unsafeFreeze #-}
 unsafeFreeze = basicUnsafeFreeze
 
+
+-- | /O(1)/ Unsafely convert an immutable vector to a mutable one without
+-- copying. The immutable vector may not be used after this operation.
+unsafeThaw :: (PrimMonad m, Vector v a) => v a -> m (Mutable v (PrimState m) a)
+{-# INLINE unsafeThaw #-}
+unsafeThaw = basicUnsafeThaw
+
 -- | /O(n)/ Yield a mutable copy of the immutable vector.
 thaw :: (PrimMonad m, Vector v a) => v a -> m (Mutable v (PrimState m) a)
 {-# INLINE_STREAM thaw #-}
index d9a9398..becbe88 100644 (file)
@@ -129,7 +129,7 @@ module Data.Vector.Primitive (
   G.convert,
 
   -- ** Mutable vectors
-  unsafeFreeze, thaw, copy, unsafeCopy
+  unsafeFreeze, unsafeThaw, thaw, copy, unsafeCopy
 ) where
 
 import qualified Data.Vector.Generic           as G
@@ -1220,6 +1220,12 @@ unsafeFreeze :: (Prim a, PrimMonad m) => MVector (PrimState m) a -> m (Vector a)
 {-# INLINE unsafeFreeze #-}
 unsafeFreeze = G.unsafeFreeze
 
+-- | /O(1)/ Unsafely convert an immutable vector to a mutable one without
+-- copying. The immutable vector may not be used after this operation.
+unsafeThaw :: (Prim a, PrimMonad m) => Vector a -> m (MVector (PrimState m) a)
+{-# INLINE unsafeThaw #-}
+unsafeThaw = G.unsafeThaw
+
 -- | /O(n)/ Yield a mutable copy of the immutable vector.
 thaw :: (Prim a, PrimMonad m) => Vector a -> m (MVector (PrimState m) a)
 {-# INLINE thaw #-}
index ae4a096..3970105 100644 (file)
@@ -126,7 +126,7 @@ module Data.Vector.Storable (
   G.convert,
 
   -- ** Mutable vectors
-  unsafeFreeze, thaw, copy, unsafeCopy,
+  unsafeFreeze, unsafeThaw, thaw, copy, unsafeCopy,
 
   -- * Raw pointers
   unsafeFromForeignPtr, unsafeToForeignPtr, unsafeWith
@@ -1240,6 +1240,13 @@ unsafeFreeze
 {-# INLINE unsafeFreeze #-}
 unsafeFreeze = G.unsafeFreeze
 
+-- | /O(1)/ Unsafely convert an immutable vector to a mutable one without
+-- copying. The immutable vector may not be used after this operation.
+unsafeThaw
+        :: (Storable a, PrimMonad m) => Vector a -> m (MVector (PrimState m) a)
+{-# INLINE unsafeThaw #-}
+unsafeThaw = G.unsafeThaw
+
 -- | /O(n)/ Yield a mutable copy of the immutable vector.
 thaw :: (Storable a, PrimMonad m) => Vector a -> m (MVector (PrimState m) a)
 {-# INLINE thaw #-}
index a89ef8a..9fa37cd 100644 (file)
@@ -153,7 +153,7 @@ module Data.Vector.Unboxed (
   G.convert,
 
   -- ** Mutable vectors
-  unsafeFreeze, thaw, copy, unsafeCopy
+  unsafeFreeze, unsafeThaw, thaw, copy, unsafeCopy
 ) where
 
 import Data.Vector.Unboxed.Base
@@ -1248,6 +1248,12 @@ unsafeFreeze :: (Unbox a, PrimMonad m) => MVector (PrimState m) a -> m (Vector a
 {-# INLINE unsafeFreeze #-}
 unsafeFreeze = G.unsafeFreeze
 
+-- | /O(1)/ Unsafely convert an immutable vector to a mutable one without
+-- copying. The immutable vector may not be used after this operation.
+unsafeThaw :: (Unbox a, PrimMonad m) => Vector a -> m (MVector (PrimState m) a)
+{-# INLINE unsafeThaw #-}
+unsafeThaw = G.unsafeThaw
+
 -- | /O(n)/ Yield a mutable copy of the immutable vector.
 thaw :: (Unbox a, PrimMonad m) => Vector a -> m (MVector (PrimState m) a)
 {-# INLINE thaw #-}