Use memcpy from primitive
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Sun, 4 Apr 2010 12:55:46 +0000 (12:55 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Sun, 4 Apr 2010 12:55:46 +0000 (12:55 +0000)
Data/Vector/Primitive/Mutable.hs

index 17b2b96..2c2a70a 100644 (file)
@@ -1,6 +1,5 @@
 {-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, ScopedTypeVariables,
-             FlexibleContexts, ForeignFunctionInterface, UnliftedFFITypes,
-             MagicHash #-}
+             FlexibleContexts #-}
 
 -- |
 -- Module      : Data.Vector.Primitive.Mutable
@@ -71,12 +70,8 @@ instance Prim a => G.MVector MVector a where
   basicUnsafeWrite (MVector i n arr) j x = writeByteArray arr (i+j) x
 
   {-# INLINE basicUnsafeCopy #-}
-  basicUnsafeCopy (MVector i n (MutableByteArray dst))
-                  (MVector j _ (MutableByteArray src))
-    = unsafePrimToPrim
-    $ memcpy_off dst (fromIntegral (i * sz))
-                 src (fromIntegral (j * sz))
-                 (fromIntegral (n * sz))
+  basicUnsafeCopy (MVector i n dst) (MVector j _ src)
+    = memcpyByteArray dst (i * sz) src (j * sz) (n * sz)
     where
       sz = sizeOf (undefined :: a)
 
@@ -201,8 +196,3 @@ grow :: (PrimMonad m, Prim a)
 {-# INLINE grow #-}
 grow = G.grow
 
-foreign import ccall unsafe "memops.h memcpy_off"
-  memcpy_off :: MutableByteArray# s -> CInt
-             -> MutableByteArray# s -> CInt -> CInt -> IO ()
-
-