packages feed

primitive-extras 0.1.5 → 0.1.6

raw patch · 4 files changed

+36/−2 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ PrimitiveExtras.Data: data TVarArray a
+ PrimitiveExtras.IO: freezeTVarArrayAsPrimArray :: Prim a => TVarArray a -> IO (PrimArray a)
+ PrimitiveExtras.IO: modifyTVarArrayAt :: TVarArray a -> Int -> (a -> a) -> IO ()
+ PrimitiveExtras.IO: newTVarArray :: a -> Int -> IO (TVarArray a)

Files

library/PrimitiveExtras/Data.hs view
@@ -1,6 +1,7 @@ module PrimitiveExtras.Data (-  PrimMultiArray+  PrimMultiArray,+  TVarArray, ) where 
library/PrimitiveExtras/IO.hs view
@@ -6,12 +6,18 @@ import qualified PrimitiveExtras.UnliftedArray as A  +-- * UnliftedArray+-------------------------+ generateUnliftedArray :: PrimUnlifted a => Int -> (Int -> IO a) -> IO (UnliftedArray a) generateUnliftedArray = A.generate  replicateUnliftedArray :: PrimUnlifted a => Int -> IO a -> IO (UnliftedArray a) replicateUnliftedArray = A.replicateIO +-- * Array+-------------------------+ generateArray :: Int -> (Int -> IO a) -> IO (Array a) generateArray size elementIO =   do@@ -40,6 +46,9 @@           else unsafeFreezeArray array       in loop 0 +-- * PrimArray+-------------------------+ generatePrimArray :: Prim a => Int -> (Int -> IO a) -> IO (PrimArray a) generatePrimArray size elementIO =   do@@ -107,3 +116,25 @@                 activeThreads <- readTVar semaphore                 guard (activeThreads == 0) +-- * TVarArray+-------------------------++newTVarArray :: a -> Int -> IO (TVarArray a)+newTVarArray a size = TVarArray <$> replicateArray size (newTVarIO a)++freezeTVarArrayAsPrimArray :: Prim a => TVarArray a -> IO (PrimArray a)+freezeTVarArrayAsPrimArray (TVarArray varArray) =+  do+    let size = sizeofArray varArray+    mpa <- newPrimArray size+    forMFromZero_ size $ \ index -> do+      var <- indexArrayM varArray index+      value <- atomically (readTVar var)+      writePrimArray mpa index value+    unsafeFreezePrimArray mpa++modifyTVarArrayAt :: TVarArray a -> Int -> (a -> a) -> IO ()+modifyTVarArrayAt (TVarArray array) index fn =+  do+    var <- indexArrayM array index+    atomically $ modifyTVar' var fn
library/PrimitiveExtras/Types.hs view
@@ -5,3 +5,5 @@   newtype PrimMultiArray a = PrimMultiArray (UnliftedArray (PrimArray a))++newtype TVarArray a = TVarArray (Array (TVar a))
primitive-extras.cabal view
@@ -1,7 +1,7 @@ name:   primitive-extras version:-  0.1.5+  0.1.6 category:   Primitive synopsis: