@@ -1383,7 +1383,6 @@ pinnedChunksOf :: forall m a. (MonadIO m, Unbox a)
1383-- pinnedChunksOf n = D.foldMany (pinnedWriteN n)
1383-- pinnedChunksOf n = D.foldMany (pinnedWriteN n)
1384pinnedChunksOf = chunksOfAs Pinned
1384pinnedChunksOf = chunksOfAs Pinned
1386−-- XXX This should take a PinnedState
1387-- XXX buffer to a list instead?
1386-- XXX buffer to a list instead?
1388-- | Buffer the stream into arrays in memory.
1387-- | Buffer the stream into arrays in memory.
1389{-# INLINE arrayStreamKFromStreamDAs #-}
1388{-# INLINE arrayStreamKFromStreamDAs #-}
@@ -2088,15 +2087,19 @@ arrayStreamKLength as = K.foldl' (+) 0 (K.map length as)
2089{-# INLINE fromArrayStreamK #-}
2088{-# INLINE fromArrayStreamK #-}
2090fromArrayStreamK :: (Unbox a, MonadIO m) =>
2089fromArrayStreamK :: (Unbox a, MonadIO m) =>
2091− StreamK m (MutArray a) -> m (MutArray a)
2090+ PinnedState -> StreamK m (MutArray a) -> m (MutArray a)
2092−fromArrayStreamK as = do
2091+fromArrayStreamK ps as = do
2093 len <- arrayStreamKLength as
2092 len <- arrayStreamKLength as
2093+ arr <- newAs ps len
2094+ -- XXX is StreamK fold faster or StreamD fold?
2095+ K.foldlM' spliceUnsafe (pure arr) as
2094− fromStreamDN len $ D.unfoldMany reader $ D.fromStreamK as
2096+ -- fromStreamDN len $ D.unfoldMany reader $ D.fromStreamK as
2096{-# INLINE fromStreamDAs #-}
2098{-# INLINE fromStreamDAs #-}
2097fromStreamDAs ::
2099fromStreamDAs ::
2098 (MonadIO m, Unbox a) => PinnedState -> D.Stream m a -> m (MutArray a)
2100 (MonadIO m, Unbox a) => PinnedState -> D.Stream m a -> m (MutArray a)
2101+fromStreamDAs ps m =
2099−fromStreamDAs ps m = arrayStreamKFromStreamDAs ps m >>= fromArrayStreamK
2102+ arrayStreamKFromStreamDAs Unpinned m >>= fromArrayStreamK ps
2101-- CAUTION: a very large number (millions) of arrays can degrade performance
2104-- CAUTION: a very large number (millions) of arrays can degrade performance
2102-- due to GC overhead because we need to buffer the arrays before we flatten
2105-- due to GC overhead because we need to buffer the arrays before we flatten