primitive-extras 0.2 → 0.3
raw patch · 3 files changed
+17/−33 lines, 3 filesdep +vector
Dependencies added: vector
Files
- library/PrimitiveExtras/IO.hs +0/−30
- library/PrimitiveExtras/Pure.hs +14/−1
- primitive-extras.cabal +3/−2
library/PrimitiveExtras/IO.hs view
@@ -86,36 +86,6 @@ else return () in iterate from -traversePrimArrayWithIndexConcurrently ::- Prim a =>- PrimArray a ->- Int ->- (Int -> a -> IO ()) ->- IO (IO ()) {-^ An action, which blocks until the concurrent computation is finished. -}-traversePrimArrayWithIndexConcurrently primArray threadsAmount action =- let size = sizeofPrimArray primArray- maxIndex = pred size- step = div size threadsAmount- in case step of- 0 -> itraversePrimArray_ action primArray $> return ()- _ -> do- semaphore <- newTVarIO threadsAmount- let- startThreads index = if index >= size- then return ()- else let- !nextIndex = step + index- in do- forkIO $ do- traversePrimArrayWithIndexInRange primArray index (min nextIndex size) action- atomically (modifyTVar' semaphore pred)- startThreads nextIndex- in do- startThreads 0- return $ atomically $ do- activeThreads <- readTVar semaphore- guard (activeThreads == 0)- -- * TVarArray -------------------------
library/PrimitiveExtras/Pure.hs view
@@ -3,7 +3,8 @@ import PrimitiveExtras.Prelude import PrimitiveExtras.Types-import qualified PrimitiveExtras.UnliftedArray as A+import qualified Data.Vector.Unboxed as A+import qualified Data.Vector.Primitive as B {-| Get length of the outer dimension of a primitive multi array -}@@ -16,3 +17,15 @@ marr <- newPrimArray size writePrimArray marr index value unsafeFreezePrimArray marr++primArrayByteArray :: PrimArray a -> ByteArray+primArrayByteArray (PrimArray unliftedByteArray) =+ ByteArray unliftedByteArray++primArrayPrimitiveVector :: Prim a => PrimArray a -> B.Vector a+primArrayPrimitiveVector primArray =+ B.Vector 0 (sizeofPrimArray primArray) (primArrayByteArray primArray)++primArrayUnboxedVector :: Prim a => PrimArray a -> A.Vector a+primArrayUnboxedVector primArray =+ unsafeCoerce (primArrayPrimitiveVector primArray)
primitive-extras.cabal view
@@ -1,7 +1,7 @@ name: primitive-extras version:- 0.2+ 0.3 category: Primitive synopsis:@@ -59,4 +59,5 @@ deferred-folds >=0.6 && <0.7, foldl >=1 && <2, primitive >=0.6.4 && <0.7,- profunctors >=5 && <6+ profunctors >=5 && <6,+ vector >=0.12 && <0.13