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 +2/−1
- library/PrimitiveExtras/IO.hs +31/−0
- library/PrimitiveExtras/Types.hs +2/−0
- primitive-extras.cabal +1/−1
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: