packages feed

primitive 0.5.1.0 → 0.5.2.1

raw patch · 11 files changed

+98/−46 lines, 11 filesdep ~basedep ~ghc-prim

Dependency ranges changed: base, ghc-prim

Files

Control/Monad/Primitive.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE MagicHash, UnboxedTuples, TypeFamilies #-}+{-# LANGUAGE CPP, MagicHash, UnboxedTuples, TypeFamilies #-}  -- | -- Module      : Control.Monad.Primitive
Data/Primitive/Array.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE MagicHash, UnboxedTuples, DeriveDataTypeable, BangPatterns #-}+{-# LANGUAGE CPP, MagicHash, UnboxedTuples, DeriveDataTypeable, BangPatterns #-}  -- | -- Module      : Data.Primitive.Array
Data/Primitive/ByteArray.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE MagicHash, UnboxedTuples, ForeignFunctionInterface,-             UnliftedFFITypes, DeriveDataTypeable #-}+{-# LANGUAGE CPP, MagicHash, UnboxedTuples, UnliftedFFITypes, DeriveDataTypeable #-}  -- | -- Module      : Data.Primitive.ByteArray@@ -151,8 +150,8 @@   = primitive_ (writeByteArray# arr# i# x)  #if __GLASGOW_HASKELL__ >= 702-i# :: Int -> Int#-i# (I# n#) = n#+unI# :: Int -> Int#+unI# (I# n#) = n# #endif  -- | Copy a slice of an immutable byte array to a mutable byte array.@@ -167,7 +166,7 @@ {-# INLINE copyByteArray #-} copyByteArray (MutableByteArray dst#) doff (ByteArray src#) soff sz #if __GLASGOW_HASKELL__ >= 702-  = primitive_ (copyByteArray# src# (i# soff) dst# (i# doff) (i# sz))+  = primitive_ (copyByteArray# src# (unI# soff) dst# (unI# doff) (unI# sz)) #else   = unsafePrimToPrim   $ memcpy_ba dst# (fromIntegral doff) src# (fromIntegral soff)@@ -189,7 +188,7 @@ copyMutableByteArray (MutableByteArray dst#) doff                      (MutableByteArray src#) soff sz #if __GLASGOW_HASKELL__ >= 702-  = primitive_ (copyMutableByteArray# src# (i# soff) dst# (i# doff) (i# sz))+  = primitive_ (copyMutableByteArray# src# (unI# soff) dst# (unI# doff) (unI# sz)) #else   = unsafePrimToPrim   $ memcpy_mba dst# (fromIntegral doff) src# (fromIntegral soff)@@ -237,8 +236,7 @@ {-# INLINE fillByteArray #-} fillByteArray = setByteArray --+#if __GLASGOW_HASKELL__ < 702 foreign import ccall unsafe "primitive-memops.h hsprimitive_memcpy"   memcpy_mba :: MutableByteArray# s -> CInt              -> MutableByteArray# s -> CInt@@ -248,6 +246,7 @@   memcpy_ba :: MutableByteArray# s -> CInt             -> ByteArray# -> CInt             -> CSize -> IO ()+#endif  foreign import ccall unsafe "primitive-memops.h hsprimitive_memmove"   memmove_mba :: MutableByteArray# s -> CInt
Data/Primitive/Internal/Compat.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE MagicHash #-}+{-# LANGUAGE CPP, MagicHash #-}  -- | -- Module      : Data.Primitive.Internal.Compat
Data/Primitive/Internal/Operations.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE MagicHash, ForeignFunctionInterface, UnliftedFFITypes #-}+{-# LANGUAGE MagicHash, UnliftedFFITypes #-}  -- | -- Module      : Data.Primitive.Internal.Operations
Data/Primitive/MachDeps.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE MagicHash #-}+{-# LANGUAGE CPP, MagicHash #-} -- | -- Module      : Data.Primitive.MachDeps -- Copyright   : (c) Roman Leshchinskiy 2009-2012
Data/Primitive/MutVar.hs view
@@ -19,7 +19,9 @@   writeMutVar,    atomicModifyMutVar,-  modifyMutVar+  atomicModifyMutVar',+  modifyMutVar,+  modifyMutVar' ) where  import Control.Monad.Primitive ( PrimMonad(..), primitive_ )@@ -58,9 +60,27 @@ {-# INLINE atomicModifyMutVar #-} atomicModifyMutVar (MutVar mv#) f = primitive $ atomicModifyMutVar# mv# f +-- | Strict version of 'atomicModifyMutVar'. This forces both the value stored+-- in the 'MutVar' as well as the value returned.+atomicModifyMutVar' :: PrimMonad m => MutVar (PrimState m) a -> (a -> (a, b)) -> m b+{-# INLINE atomicModifyMutVar' #-}+atomicModifyMutVar' mv f = do+  b <- atomicModifyMutVar mv force+  b `seq` return b+  where+    force x = let (a, b) = f x in (a, a `seq` b)+ -- | Mutate the contents of a 'MutVar' modifyMutVar :: PrimMonad m => MutVar (PrimState m) a -> (a -> a) -> m () {-# INLINE modifyMutVar #-} modifyMutVar (MutVar mv#) g = primitive_ $ \s# ->   case readMutVar# mv# s# of     (# s'#, a #) -> writeMutVar# mv# (g a) s'#++-- | Strict version of 'modifyMutVar'+modifyMutVar' :: PrimMonad m => MutVar (PrimState m) a -> (a -> a) -> m ()+{-# INLINE modifyMutVar' #-}+modifyMutVar' (MutVar mv#) g = primitive_ $ \s# ->+  case readMutVar# mv# s# of+    (# s'#, a #) -> let a' = g a in a' `seq` writeMutVar# mv# a' s'#+
Data/Primitive/Types.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE UnboxedTuples, MagicHash, DeriveDataTypeable #-}+{-# LANGUAGE CPP, UnboxedTuples, MagicHash, DeriveDataTypeable #-}  -- | -- Module      : Data.Primitive.Types@@ -22,7 +22,6 @@ import Data.Primitive.Internal.Operations  import GHC.Base (-    unsafeCoerce#,     Int(..), Char(..),   ) import GHC.Float (@@ -114,16 +113,16 @@                         { (# s1#, x# #) -> (# s1#, ctr x# #) }  \ ; writeByteArray# arr# i# (ctr x#) s# = wr_arr arr# i# x# s#    \ ; setByteArray# arr# i# n# (ctr x#) s#                          \-    = case internal (set_arr arr# i# n# x#) (unsafeCoerce# s#) of \-        { (# s1#, _ #) -> unsafeCoerce# s1# }                   \+    = case unsafeCoerce# (internal (set_arr arr# i# n# x#)) s# of \+        { (# s1#, _ #) -> s1# }                                 \                                                                 \ ; indexOffAddr# addr# i# = ctr (idx_addr addr# i#)              \ ; readOffAddr#  addr# i# s# = case rd_addr addr# i# s# of       \                         { (# s1#, x# #) -> (# s1#, ctr x# #) }  \ ; writeOffAddr# addr# i# (ctr x#) s# = wr_addr addr# i# x# s#   \ ; setOffAddr# addr# i# n# (ctr x#) s#                           \-    = case internal (set_addr addr# i# n# x#) (unsafeCoerce# s#) of \-        { (# s1#, _ #) -> unsafeCoerce# s1# }                   \+    = case unsafeCoerce# (internal (set_addr addr# i# n# x#)) s# of \+        { (# s1#, _ #) -> s1# }                                 \ ; {-# INLINE sizeOf# #-}                                        \ ; {-# INLINE alignment# #-}                                     \ ; {-# INLINE indexByteArray# #-}                                \
cbits/primitive-memops.c view
@@ -19,7 +19,7 @@     memset(p, 0, n * sizeof(Hs ## TYPE));                                    \   else if (sizeof(Hs ## TYPE) == sizeof(int)*2) {                            \     int *q = (int *)p;                                                       \-    const int *r = (const int *)&x;                                          \+    const int *r = (const int *)(void *)&x;                                  \     while (n>0) {                                                            \       q[0] = r[0];                                                           \       q[1] = r[1];                                                           \@@ -49,4 +49,3 @@ MEMSET(Float, HsFloat) MEMSET(Double, HsDouble) MEMSET(Char, HsChar)-
+ changelog view
@@ -0,0 +1,41 @@+Changes in version 0.5.2.0++ * Add strict variants of 'MutVar' modification functions++Changes in version 0.5.1.0++ * Add support for GHC 7.7's new primitive 'Bool' representation++Changes in version 0.5.0.1++ * Disable array copying primitives for GHC 7.6.* and earlier++Changes in version 0.5++ * New in "Data.Primitive.MutVar": 'atomicModifyMutVar'++ * Efficient block fill operations: 'setByteArray', 'setAddr'++Changes in version 0.4.1++ * New module "Data.Primitive.MutVar"++Changes in version 0.4.0.1++ * Critical bug fix in 'fillByteArray'++Changes in version 0.4++ * Support for GHC 7.2 array copying primitives++ * New in "Data.Primitive.ByteArray": 'copyByteArray',+   'copyMutableByteArray', 'moveByteArray', 'fillByteArray'++ * Deprecated in "Data.Primitive.ByteArray": 'memcpyByteArray',+   'memcpyByteArray'', 'memmoveByteArray', 'memsetByteArray'++ * New in "Data.Primitive.Array": 'copyArray', 'copyMutableByteArray'++ * New in "Data.Primitive.Addr": 'copyAddr', 'moveAddr'++ * Deprecated in "Data.Primitive.Addr": 'memcpyAddr'
primitive.cabal view
@@ -1,7 +1,8 @@ Name:           primitive-Version:        0.5.1.0+Version:        0.5.2.1 License:        BSD3 License-File:   LICENSE+ Author:         Roman Leshchinskiy <rl@cse.unsw.edu.au> Maintainer:     Roman Leshchinskiy <rl@cse.unsw.edu.au> Copyright:      (c) Roman Leshchinskiy 2009-2012@@ -9,26 +10,18 @@ Bug-Reports:    https://github.com/haskell/primitive/issues Category:       Data Synopsis:       Primitive memory-related operations-Description:-        .-        This package provides various primitive memory-related operations.-        .-        Changes in version 0.5.0.1-        .-        * Disable array copying primitives for GHC 7.6.* and earlier-        .-        Changes in version 0.5-        .-        * New in "Data.Primitive.MutVar": @atomicModifyMutVar@-        .-        * Efficient block fill operations: @setByteArray@, @setAddr@-        .--Cabal-Version:  >= 1.6+Cabal-Version:  >= 1.10 Build-Type:     Simple+Description:    This package provides various primitive memory-related operations. +Extra-Source-Files: changelog+ Library-  Extensions: CPP+  Default-Language: Haskell2010+  Other-Extensions:+        BangPatterns, CPP, DeriveDataTypeable,+        MagicHash, TypeFamilies, UnboxedTuples, UnliftedFFITypes+   Exposed-Modules:         Control.Monad.Primitive         Data.Primitive@@ -43,18 +36,19 @@         Data.Primitive.Internal.Compat         Data.Primitive.Internal.Operations -  Build-Depends: base >= 4 && < 5, ghc-prim+  Build-Depends: base >= 4.3 && < 4.8, ghc-prim >= 0.2 && < 0.4 -  Ghc-Options: -O2+  Ghc-Options: -O2 -Wall    Include-Dirs: cbits   Install-Includes: primitive-memops.h   includes: primitive-memops.h   c-sources: cbits/primitive-memops.c-  cc-options: -O3 -ftree-vectorize -fomit-frame-pointer-  if arch(i386) || arch(x86_64) {-    cc-options: -msse2-  }+  cc-options: -O3 -fomit-frame-pointer -Wall+  if !os(solaris)+      cc-options: -ftree-vectorize+  if arch(i386) || arch(x86_64)+      cc-options: -msse2  source-repository head   type:     git