on master help sign in
Change the API of unsafeWriteIndex and add fromListIO
commit9bda2e67b9d64d017797201fe6084780c3b6c302 authorAdithya Kumar <adithya@composewell.com> dateMon 26 Jul 2021, 16:14 (5 years ago) parentf197114
2 files changed+11−8
src/Streamly/Internal/Data/Array/Foreign/Mut/Type.hs+8−5 test/Streamly/Test/Common/Array.hs+3−3
src/Streamly/Internal/Data/Array/Foreign/Mut/Type.hs+8−5
@@ -26,6 +26,7 @@ module Streamly.Internal.Data.Array.Foreign.Mut.Type
2626 -- * From containers
2727 , fromList
2828 , fromListN
29+ , fromListIO
2930 , fromStreamDN
3031 , fromStreamD
3132
@@ -303,15 +304,12 @@ unsafeWithNewArray count f = do
303304-------------------------------------------------------------------------------
304305
305306{-# INLINE unsafeWriteIndex #-}
306−unsafeWriteIndex :: forall a. Storable a => Array a -> Int -> a -> IO (Array a)
307−unsafeWriteIndex arr@Array {..} i x =
307+unsafeWriteIndex :: forall a. Storable a => Array a -> Int -> a -> IO ()
308+unsafeWriteIndex Array {..} i x =
308309 unsafeWithForeignPtr aStart
309310 $ \begin -> do
310311 poke (begin `plusPtr` (i * sizeOf (undefined :: a))) x
311− return arr
312312
313−-- XXX grow the array when we are beyond bound.
314−--
315313-- Internal routine for when the array is being created. Appends one item at
316314-- the end of the array. Useful when sequentially writing a stream to the
317315-- array.
@@ -981,6 +979,11 @@ fromStreamD m = do
981979 len <- K.foldl' (+) 0 (K.map length buffered)
982980 fromStreamDN len $ D.unfoldMany read $ D.fromStreamK buffered
983981
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+
984987-- | Create an 'Array' from a list. The list must be of finite size.
985988--
986989-- @since 0.7.0
test/Streamly/Test/Common/Array.hs+3−3
@@ -190,9 +190,9 @@ testArraysOf =
190190
191191unsafeWriteIndex :: [Int] -> Int -> Int -> IO Bool
192192unsafeWriteIndex xs i x = do
193− let arr = MA.fromList xs
194− arr1 <- MA.unsafeWriteIndex arr i x
195− x1 <- MA.unsafeIndexIO arr1 i
193+ arr <- MA.fromListIO xs
194+ MA.unsafeWriteIndex arr i x
195+ x1 <- MA.unsafeIndexIO arr i
196196 return $ x1 == x
197197
198198lastN :: Int -> [a] -> [a]