Add mutableByteArrayContents 0_3_1
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 20 Sep 2010 00:21:47 +0000 (00:21 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 20 Sep 2010 00:21:47 +0000 (00:21 +0000)
Data/Primitive/ByteArray.hs

index c568705..76b3574 100644 (file)
@@ -19,7 +19,7 @@ module Data.Primitive.ByteArray (
   readByteArray, writeByteArray, indexByteArray,
   unsafeFreezeByteArray, unsafeThawByteArray,
   sizeofByteArray, sizeofMutableByteArray, sameMutableByteArray,
-  byteArrayContents,
+  byteArrayContents, mutableByteArrayContents,
 
   memcpyByteArray, memcpyByteArray', memmoveByteArray, memsetByteArray
 ) where
@@ -73,6 +73,14 @@ byteArrayContents :: ByteArray -> Addr
 {-# INLINE byteArrayContents #-}
 byteArrayContents (ByteArray arr#) = Addr (byteArrayContents# arr#)
 
+-- | Yield a pointer to the array's data. This operation is only safe on
+-- /pinned/ byte arrays allocated by 'newPinnedByteArray' or
+-- 'newAlignedPinnedByteArray'.
+mutableByteArrayContents :: MutableByteArray s -> Addr
+{-# INLINE mutableByteArrayContents #-}
+mutableByteArrayContents (MutableByteArray arr#)
+  = Addr (byteArrayContents# (unsafeCoerce# arr#))
+
 -- | Check if the two arrays refer to the same memory block.
 sameMutableByteArray :: MutableByteArray s -> MutableByteArray s -> Bool
 {-# INLINE sameMutableByteArray #-}