Use copyBytes instead of a direct call to memcpy
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Wed, 7 Apr 2010 03:21:56 +0000 (03:21 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Wed, 7 Apr 2010 03:21:56 +0000 (03:21 +0000)
Data/Vector/Storable/Mutable.hs

index 244f18a..bb1a2ad 100644 (file)
@@ -1,5 +1,5 @@
 {-# LANGUAGE MultiParamTypeClasses, FlexibleInstances,
-             ScopedTypeVariables, ForeignFunctionInterface #-}
+             ScopedTypeVariables #-}
 
 -- |
 -- Module      : Data.Vector.Storable.Mutable
@@ -36,6 +36,7 @@ import Foreign.Storable
 import Foreign.ForeignPtr
 import Foreign.Ptr
 import Foreign.Marshal.Array ( advancePtr )
+import Foreign.Marshal.Utils ( copyBytes )
 import Foreign.C.Types ( CInt )
 
 import Control.Monad.Primitive
@@ -89,7 +90,7 @@ instance Storable a => G.MVector MVector a where
     $ withForeignPtr fp $ \_ ->
       withForeignPtr fq $ \_ ->
       do
-        memcpy p q (fromIntegral (n * sizeOf (undefined :: a)))
+        copyBytes p q (fromIntegral (n * sizeOf (undefined :: a)))
         return ()
 
 -- | Create a mutable vector from a 'ForeignPtr' with an offset and a length.
@@ -240,7 +241,3 @@ grow :: (PrimMonad m, Storable a)
 {-# INLINE grow #-}
 grow = G.grow
 
-foreign import ccall unsafe "string.h memcpy"
-  memcpy :: Ptr a -> Ptr a -> CInt -> IO (Ptr a)
-
-