Add unsafeBackpermute
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Wed, 9 Dec 2009 14:34:24 +0000 (14:34 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Wed, 9 Dec 2009 14:34:24 +0000 (14:34 +0000)
Data/Vector.hs
Data/Vector/Generic.hs
Data/Vector/Primitive.hs
Data/Vector/Storable.hs
Data/Vector/Unboxed.hs

index d6d1bc3..c159756 100644 (file)
@@ -34,6 +34,9 @@ module Data.Vector (
   accum, accumulate, accumulate_,
   (//), update, update_,
   backpermute, reverse,
+  unsafeAccum, unsafeAccumulate, unsafeAccumulate_,
+  unsafeUpd, unsafeUpdate, unsafeUpdate_,
+  unsafeBackpermute,
 
   -- * Mapping
   map, imap, concatMap,
@@ -73,11 +76,7 @@ module Data.Vector (
   enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
-  toList, fromList,
-
-  -- * Unsafe operations
-  unsafeAccum, unsafeAccumulate, unsafeAccumulate_,
-  unsafeUpd, unsafeUpdate, unsafeUpdate_
+  toList, fromList
 ) where
 
 import qualified Data.Vector.Generic as G
@@ -363,6 +362,10 @@ backpermute :: Vector a -> Vector Int -> Vector a
 {-# INLINE backpermute #-}
 backpermute = G.backpermute
 
+unsafeBackpermute :: Vector a -> Vector Int -> Vector a
+{-# INLINE unsafeBackpermute #-}
+unsafeBackpermute = G.unsafeBackpermute
+
 reverse :: Vector a -> Vector a
 {-# INLINE reverse #-}
 reverse = G.reverse
index 754f671..96c3ffe 100644 (file)
@@ -35,6 +35,9 @@ module Data.Vector.Generic (
   accum, accumulate, accumulate_,
   (//), update, update_,
   backpermute, reverse,
+  unsafeAccum, unsafeAccumulate, unsafeAccumulate_,
+  unsafeUpd, unsafeUpdate, unsafeUpdate_,
+  unsafeBackpermute,
 
   -- * Mapping
   map, imap, concatMap,
@@ -83,11 +86,7 @@ module Data.Vector.Generic (
   stream, unstream,
 
   -- * MVector-based initialisation
-  new,
-
-  -- * Unsafe operations
-  unsafeAccum, unsafeAccumulate, unsafeAccumulate_,
-  unsafeUpd, unsafeUpdate, unsafeUpdate_
+  new
 ) where
 
 import           Data.Vector.Generic.Mutable ( MVector )
@@ -581,6 +580,14 @@ backpermute v is = seq v
                  $ Stream.map (indexM v)
                  $ stream is
 
+unsafeBackpermute :: (Vector v a, Vector v Int) => v a -> v Int -> v a
+{-# INLINE unsafeBackpermute #-}
+unsafeBackpermute v is = seq v
+                       $ unstream
+                       $ Stream.unbox
+                       $ Stream.map (unsafeIndexM v)
+                       $ stream is
+
 reverse :: (Vector v a) => v a -> v a
 {-# INLINE reverse #-}
 reverse = new . New.reverse . New.unstream . stream
index a709e1a..c19474c 100644 (file)
@@ -32,6 +32,9 @@ module Data.Vector.Primitive (
 
   -- * Permutations
   accum, accumulate_, (//), update_, backpermute, reverse,
+  unsafeAccum, unsafeAccumulate_,
+  unsafeUpd, unsafeUpdate_,
+  unsafeBackpermute,
 
   -- * Mapping
   map, imap, concatMap,
@@ -69,11 +72,7 @@ module Data.Vector.Primitive (
   enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
-  toList, fromList,
-
-  -- * Unsafe operations
-  unsafeAccum, unsafeAccumulate_,
-  unsafeUpd, unsafeUpdate_
+  toList, fromList
 ) where
 
 import qualified Data.Vector.Generic           as G
@@ -349,6 +348,10 @@ backpermute :: Prim a => Vector a -> Vector Int -> Vector a
 {-# INLINE backpermute #-}
 backpermute = G.backpermute
 
+unsafeBackpermute :: Prim a => Vector a -> Vector Int -> Vector a
+{-# INLINE unsafeBackpermute #-}
+unsafeBackpermute = G.unsafeBackpermute
+
 reverse :: Prim a => Vector a -> Vector a
 {-# INLINE reverse #-}
 reverse = G.reverse
index 5901020..8894a0a 100644 (file)
@@ -32,6 +32,9 @@ module Data.Vector.Storable (
 
   -- * Permutations
   accum, accumulate_, (//), update_, backpermute, reverse,
+  unsafeAccum, unsafeAccumulate_,
+  unsafeUpd, unsafeUpdate_,
+  unsafeBackpermute,
 
   -- * Mapping
   map, imap, concatMap,
@@ -69,11 +72,7 @@ module Data.Vector.Storable (
   enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
-  toList, fromList,
-
-  -- * Unsafe operations
-  unsafeAccum, unsafeAccumulate_,
-  unsafeUpd, unsafeUpdate_
+  toList, fromList
 ) where
 
 import qualified Data.Vector.Generic          as G
@@ -380,6 +379,10 @@ backpermute :: Storable a => Vector a -> Vector Int -> Vector a
 {-# INLINE backpermute #-}
 backpermute = G.backpermute
 
+unsafeBackpermute :: Storable a => Vector a -> Vector Int -> Vector a
+{-# INLINE unsafeBackpermute #-}
+unsafeBackpermute = G.unsafeBackpermute
+
 reverse :: Storable a => Vector a -> Vector a
 {-# INLINE reverse #-}
 reverse = G.reverse
index a1e4859..3c8bbde 100644 (file)
@@ -32,6 +32,9 @@ module Data.Vector.Unboxed (
   accum, accumulate, accumulate_,
   (//), update, update_,
   backpermute, reverse,
+  unsafeAccum, unsafeAccumulate, unsafeAccumulate_,
+  unsafeUpd, unsafeUpdate, unsafeUpdate_,
+  unsafeBackpermute,
 
   -- * Mapping
   map, imap, concatMap,
@@ -71,11 +74,7 @@ module Data.Vector.Unboxed (
   enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
-  toList, fromList,
-
-  -- * Unsafe operations
-  unsafeAccum, unsafeAccumulate, unsafeAccumulate_,
-  unsafeUpd, unsafeUpdate, unsafeUpdate_
+  toList, fromList
 ) where
 
 import Data.Vector.Unboxed.Base
@@ -339,6 +338,10 @@ backpermute :: Unbox a => Vector a -> Vector Int -> Vector a
 {-# INLINE backpermute #-}
 backpermute = G.backpermute
 
+unsafeBackpermute :: Unbox a => Vector a -> Vector Int -> Vector a
+{-# INLINE unsafeBackpermute #-}
+unsafeBackpermute = G.unsafeBackpermute
+
 reverse :: Unbox a => Vector a -> Vector a
 {-# INLINE reverse #-}
 reverse = G.reverse