on master help sign in
Change the API of unsafeWriteIndex and add fromListIO
9bda2e6Adithya Kumar
src/Streamly/Internal/Data/Array/Foreign/Mut/Type.hs+8−5
@@ -26,6 +26,7 @@ module Streamly.Internal.Data.Array.Foreign.Mut.Type
26 -- * From containers
26 -- * From containers
27 , fromList
27 , fromList
28 , fromListN
28 , fromListN
29+ , fromListIO
29 , fromStreamDN
30 , fromStreamDN
30 , fromStreamD
31 , fromStreamD
31
32
@@ -303,15 +304,12 @@ unsafeWithNewArray count f = do
303-------------------------------------------------------------------------------
304-------------------------------------------------------------------------------
304
305
305{-# INLINE unsafeWriteIndex #-}
306{-# INLINE unsafeWriteIndex #-}
306−unsafeWriteIndex :: forall a. Storable a => Array a -> Int -> a -> IO (Array a)
307+unsafeWriteIndex :: forall a. Storable a => Array a -> Int -> a -> IO ()
307−unsafeWriteIndex arr@Array {..} i x =
308+unsafeWriteIndex Array {..} i x =
308 unsafeWithForeignPtr aStart
309 unsafeWithForeignPtr aStart
309 $ \begin -> do
310 $ \begin -> do
310 poke (begin `plusPtr` (i * sizeOf (undefined :: a))) x
311 poke (begin `plusPtr` (i * sizeOf (undefined :: a))) x
311− return arr
312
312
313−-- XXX grow the array when we are beyond bound.
314−--
315-- Internal routine for when the array is being created. Appends one item at
313-- Internal routine for when the array is being created. Appends one item at
316-- the end of the array. Useful when sequentially writing a stream to the
314-- the end of the array. Useful when sequentially writing a stream to the
317-- array.
315-- array.
@@ -981,6 +979,11 @@ fromStreamD m = do
981 len <- K.foldl' (+) 0 (K.map length buffered)
979 len <- K.foldl' (+) 0 (K.map length buffered)
982 fromStreamDN len $ D.unfoldMany read $ D.fromStreamK buffered
980 fromStreamDN len $ D.unfoldMany read $ D.fromStreamK buffered
983
981
982+-- XXX Replace fromList with this
983+{-# INLINABLE fromListIO #-}
984+fromListIO :: Storable a => [a] -> IO (Array a)
985+fromListIO xs = fromStreamD $ D.fromList xs
986+
984-- | Create an 'Array' from a list. The list must be of finite size.
987-- | Create an 'Array' from a list. The list must be of finite size.
985--
988--
986-- @since 0.7.0
989-- @since 0.7.0
test/Streamly/Test/Common/Array.hs+3−3
@@ -190,9 +190,9 @@ testArraysOf =
190
190
191unsafeWriteIndex :: [Int] -> Int -> Int -> IO Bool
191unsafeWriteIndex :: [Int] -> Int -> Int -> IO Bool
192unsafeWriteIndex xs i x = do
192unsafeWriteIndex xs i x = do
193− let arr = MA.fromList xs
193+ arr <- MA.fromListIO xs
194− arr1 <- MA.unsafeWriteIndex arr i x
194+ MA.unsafeWriteIndex arr i x
195− x1 <- MA.unsafeIndexIO arr1 i
195+ x1 <- MA.unsafeIndexIO arr i
196 return $ x1 == x
196 return $ x1 == x
197
197
198lastN :: Int -> [a] -> [a]
198lastN :: Int -> [a] -> [a]