@@ -20,7 +20,7 @@ module Streamly.Internal.Data.Array.Foreign.Mut.Type
20 , ArrayContents
20 , ArrayContents
21 , arrayToFptrContents
21 , arrayToFptrContents
22 , fptrToArrayContents
22 , fptrToArrayContents
23− , unsafeWithArrayContents
23+ , unsafeWithArray
24 , nilArrayContents
24 , nilArrayContents
@@ -333,12 +333,10 @@ arrayToFptrContents (ArrayContents contents) = PlainPtr contents
335-- | Similar to unsafeWithForeignPtr.
335-- | Similar to unsafeWithForeignPtr.
336−{-# INLINE unsafeWithArrayContents #-}
336+unsafeWithArray :: MonadIO m => Array a -> (Ptr a -> m b) -> m b
337−unsafeWithArrayContents :: MonadIO m =>
337+unsafeWithArray Array{..} f = do
338− ArrayContents -> Ptr a -> (Ptr a -> m b) -> m b
338+ r <- f arrStart
339−unsafeWithArrayContents contents ptr f = do
341− liftIO $ touch contents
339+ liftIO $ touch arrContents
344-------------------------------------------------------------------------------
342-------------------------------------------------------------------------------
@@ -532,7 +530,7 @@ withNewArrayUnsafe ::
532 (MonadIO m, Storable a) => Int -> (Ptr a -> m ()) -> m (Array a)
530 (MonadIO m, Storable a) => Int -> (Ptr a -> m ()) -> m (Array a)
533withNewArrayUnsafe count f = do
531withNewArrayUnsafe count f = do
534 arr <- newArray count
532 arr <- newArray count
535− unsafeWithArrayContents (arrContents arr) (arrStart arr)
533+ unsafeWithArray arr
536 $ \p -> f p >> return arr
534 $ \p -> f p >> return arr
538-------------------------------------------------------------------------------
536-------------------------------------------------------------------------------
@@ -546,8 +544,8 @@ withNewArrayUnsafe count f = do
546{-# INLINE putIndexUnsafe #-}
544{-# INLINE putIndexUnsafe #-}
547putIndexUnsafe :: forall m a. (MonadIO m, Storable a)
545putIndexUnsafe :: forall m a. (MonadIO m, Storable a)
548 => Int -> a -> Array a -> m ()
546 => Int -> a -> Array a -> m ()
549−putIndexUnsafe i x Array{..} =
547+putIndexUnsafe i x arr@(Array{..}) =
550− unsafeWithArrayContents arrContents arrStart $ \ptr -> do
548+ unsafeWithArray arr $ \ptr -> do
551 let elemPtr = PTR_INDEX(ptr,i,a)
549 let elemPtr = PTR_INDEX(ptr,i,a)
552 assert (i >= 0 && PTR_VALID(elemPtr,aEnd,a)) (return ())
550 assert (i >= 0 && PTR_VALID(elemPtr,aEnd,a)) (return ())
553 liftIO $ poke elemPtr x
551 liftIO $ poke elemPtr x
@@ -576,7 +574,7 @@ putIndexPtr start end i x = do
576{-# INLINE putIndex #-}
574{-# INLINE putIndex #-}
577putIndex :: (MonadIO m, Storable a) => Int -> a -> Array a -> m ()
575putIndex :: (MonadIO m, Storable a) => Int -> a -> Array a -> m ()
578putIndex i x arr =
576putIndex i x arr =
579− unsafeWithArrayContents (arrContents arr) (arrStart arr)
577+ unsafeWithArray arr
580 $ \p -> putIndexPtr p (aEnd arr) i x
578 $ \p -> putIndexPtr p (aEnd arr) i x
582-- | Write an input stream of (index, value) pairs to an array. Throws an
580-- | Write an input stream of (index, value) pairs to an array. Throws an
@@ -601,8 +599,8 @@ putIndices Array{..} = FL.mkFoldM step initial extract
601-- /Pre-release/
599-- /Pre-release/
602modifyIndexUnsafe :: forall m a b. (MonadIO m, Storable a) =>
600modifyIndexUnsafe :: forall m a b. (MonadIO m, Storable a) =>
603 Int -> (a -> (a, b)) -> Array a -> m b
601 Int -> (a -> (a, b)) -> Array a -> m b
604−modifyIndexUnsafe i f Array{..} = do
602+modifyIndexUnsafe i f arr@(Array{..}) = do
605− liftIO $ unsafeWithArrayContents arrContents arrStart $ \ptr -> do
603+ liftIO $ unsafeWithArray arr $ \ptr -> do
606 let elemPtr = PTR_INDEX(ptr,i,a)
604 let elemPtr = PTR_INDEX(ptr,i,a)
607 assert (i >= 0 && PTR_NEXT(elemPtr,a) <= aEnd) (return ())
605 assert (i >= 0 && PTR_NEXT(elemPtr,a) <= aEnd) (return ())
608 r <- peek elemPtr
606 r <- peek elemPtr
@@ -628,8 +626,8 @@ modifyIndexPtr i f start end = liftIO $ do
628-- /Pre-release/
626-- /Pre-release/
629modifyIndex :: forall m a b. (MonadIO m, Storable a) =>
627modifyIndex :: forall m a b. (MonadIO m, Storable a) =>
630 Int -> (a -> (a, b)) -> Array a -> m b
628 Int -> (a -> (a, b)) -> Array a -> m b
631−modifyIndex i f Array{..} = do
629+modifyIndex i f arr@(Array{..}) = do
632− liftIO $ unsafeWithArrayContents arrContents arrStart $ \ptr -> do
630+ liftIO $ unsafeWithArray arr $ \ptr -> do
633 modifyIndexPtr i f ptr aEnd
631 modifyIndexPtr i f ptr aEnd
635-- | Modify the array indices generated by the supplied stream.
633-- | Modify the array indices generated by the supplied stream.
@@ -655,8 +653,8 @@ modifyIndices f Array{..} = Fold step initial extract
655-- /Pre-release/
653-- /Pre-release/
656modify :: forall m a. (MonadIO m, Storable a)
654modify :: forall m a. (MonadIO m, Storable a)
657 => (a -> a) -> Array a -> m ()
655 => (a -> a) -> Array a -> m ()
658−modify f Array{..} = liftIO $
656+modify f arr@Array{..} = liftIO $
659− unsafeWithArrayContents arrContents arrStart go
657+ unsafeWithArray arr go
@@ -682,8 +680,8 @@ swapPtrs ptr1 ptr2 = do
682{-# INLINE unsafeSwapIndices #-}
680{-# INLINE unsafeSwapIndices #-}
683unsafeSwapIndices :: forall m a. (MonadIO m, Storable a)
681unsafeSwapIndices :: forall m a. (MonadIO m, Storable a)
684 => Int -> Int -> Array a -> m ()
682 => Int -> Int -> Array a -> m ()
685−unsafeSwapIndices i1 i2 Array{..} = liftIO $ do
683+unsafeSwapIndices i1 i2 arr = liftIO $ do
686− unsafeWithArrayContents arrContents arrStart $ \ptr -> do
684+ unsafeWithArray arr $ \ptr -> do
687 let ptr1 = PTR_INDEX(ptr,i1,a)
685 let ptr1 = PTR_INDEX(ptr,i1,a)
688 ptr2 = PTR_INDEX(ptr,i2,a)
686 ptr2 = PTR_INDEX(ptr,i2,a)
689 swapPtrs ptr1 (ptr2 :: Ptr a)
687 swapPtrs ptr1 (ptr2 :: Ptr a)
@@ -1049,8 +1047,8 @@ snoc = snocWith f
1049-- Unsafe because it does not check the bounds of the array.
1047-- Unsafe because it does not check the bounds of the array.
1050{-# INLINE_NORMAL getIndexUnsafe #-}
1048{-# INLINE_NORMAL getIndexUnsafe #-}
1051getIndexUnsafe :: forall m a. (MonadIO m, Storable a) => Int -> Array a -> m a
1049getIndexUnsafe :: forall m a. (MonadIO m, Storable a) => Int -> Array a -> m a
1052−getIndexUnsafe i Array {..} =
1050+getIndexUnsafe i arr@(Array {..}) =
1053− unsafeWithArrayContents arrContents arrStart $ \ptr -> do
1051+ unsafeWithArray arr $ \ptr -> do
1054 let elemPtr = PTR_INDEX(ptr,i,a)
1052 let elemPtr = PTR_INDEX(ptr,i,a)
1055 assert (i >= 0 && PTR_VALID(elemPtr,aEnd,a)) (return ())
1053 assert (i >= 0 && PTR_VALID(elemPtr,aEnd,a)) (return ())
1056 liftIO $ peek elemPtr
1054 liftIO $ peek elemPtr
@@ -1069,7 +1067,7 @@ getIndexPtr start end i = do
1069{-# INLINE getIndex #-}
1067{-# INLINE getIndex #-}
1070getIndex :: (MonadIO m, Storable a) => Int -> Array a -> m a
1068getIndex :: (MonadIO m, Storable a) => Int -> Array a -> m a
1071getIndex i arr =
1069getIndex i arr =
1072− unsafeWithArrayContents (arrContents arr) (arrStart arr)
1070+ unsafeWithArray arr
1073 $ \p -> getIndexPtr p (aEnd arr) i
1071 $ \p -> getIndexPtr p (aEnd arr) i
1075{-# INLINE getIndexPtrRev #-}
1073{-# INLINE getIndexPtrRev #-}
@@ -1089,7 +1087,7 @@ getIndexPtrRev start end i = do
1089{-# INLINE getIndexRev #-}
1087{-# INLINE getIndexRev #-}
1090getIndexRev :: (MonadIO m, Storable a) => Int -> Array a -> m a
1088getIndexRev :: (MonadIO m, Storable a) => Int -> Array a -> m a
1091getIndexRev i arr =
1089getIndexRev i arr =
1092− unsafeWithArrayContents (arrContents arr) (arrStart arr)
1090+ unsafeWithArray arr
1093 $ \p -> getIndexPtrRev p (aEnd arr) i
1091 $ \p -> getIndexPtrRev p (aEnd arr) i
1095data GetIndicesState contents start end st =
1093data GetIndicesState contents start end st =
@@ -2250,8 +2248,8 @@ cast arr =
2250-- /Pre-release/
2248-- /Pre-release/
2252asPtrUnsafe :: Array a -> (Ptr b -> IO c) -> IO c
2250asPtrUnsafe :: Array a -> (Ptr b -> IO c) -> IO c
2253−asPtrUnsafe Array{..} act = do
2251+asPtrUnsafe arr act = do
2254− unsafeWithArrayContents arrContents arrStart $ \ptr -> act (castPtr ptr)
2252+ unsafeWithArray arr $ \ptr -> act (castPtr ptr)
2256-------------------------------------------------------------------------------
2254-------------------------------------------------------------------------------
2257-- Equality
2255-- Equality