packages feed

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 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