packages feed

foreign 0.2.0.1 → 0.2.1.0

raw patch · 4 files changed

+51/−7 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ HsForeign.CppStd: newStdStringFromShort :: ShortByteString -> IO (Ptr StdString)
+ HsForeign.CppStd: peekStdStringShort :: Ptr StdString -> IO ShortByteString

Files

foreign.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.4 name:               foreign-version:            0.2.0.1+version:            0.2.1.0 synopsis:           A collection of helpers for ffi. description:   Please see the README on Github at <https://github.com/4eUeP/foreign#readme>
src/HsForeign/CppStd.hs view
@@ -4,6 +4,7 @@   ( -- * StdString     StdString   , newStdString+  , newStdStringFromShort   , maybeNewStdString   , hs_new_std_string   , hs_new_std_string_def@@ -11,17 +12,21 @@   , hs_std_string_cstr   , hs_delete_std_string   , unsafePeekStdString+  , peekStdStringShort     -- * StdVector   , StdVector    ) where -import           Data.ByteString                (ByteString)-import qualified Data.ByteString.Unsafe         as BS+import           Data.ByteString        (ByteString)+import           Data.ByteString.Short  (ShortByteString)+import qualified Data.ByteString.Short  as BSS+import qualified Data.ByteString.Unsafe as BS import           Data.Word import           Foreign.Ptr -import           HsForeign.String (withByteString)+import           HsForeign.Primitive+import           HsForeign.String  ------------------------------------------------------------------------------- -- StdString@@ -34,6 +39,9 @@ newStdString :: ByteString -> IO (Ptr StdString) newStdString bs = withByteString bs $ hs_new_std_string +newStdStringFromShort :: ShortByteString -> IO (Ptr StdString)+newStdStringFromShort sbs = withShortByteString sbs $ hs_new_std_string'+ maybeNewStdString :: Maybe ByteString -> IO (Ptr StdString) maybeNewStdString Nothing   = pure nullPtr maybeNewStdString (Just bs) = newStdString bs@@ -45,7 +53,19 @@   BS.unsafePackCStringFinalizer ptr siz (hs_delete_std_string stdstring) {-# INLINE unsafePeekStdString #-} +peekStdStringShort :: Ptr StdString -> IO ShortByteString+peekStdStringShort stdstring = do+  siz <- hs_std_string_size stdstring+  ptr <- hs_std_string_cstr stdstring+  BSS.packCStringLen (castPtr ptr, siz)++-- TODO+--withStdString :: (Ptr StdString -> IO a) -> IO (ByteString, a)+--withStdString = undefined+ foreign import ccall unsafe hs_new_std_string :: Ptr Word8 -> Int -> IO (Ptr StdString)+foreign import ccall unsafe "hs_new_std_string"+  hs_new_std_string' :: ByteArray# -> Int -> IO (Ptr StdString) foreign import ccall unsafe hs_new_std_string_def :: IO (Ptr StdString) foreign import ccall unsafe hs_std_string_size :: Ptr StdString -> IO Int foreign import ccall unsafe hs_std_string_cstr :: Ptr StdString -> IO (Ptr Word8)@@ -56,5 +76,20 @@  data StdVector a -peekStdVectorOfString :: Ptr (StdVector StdString) -> [ByteString]-peekStdVectorOfString = undefined+-- TODO++--peekStdVectorOfString :: Ptr (StdVector StdString) -> [ByteString]+--peekStdVectorOfString = undefined++-------------------------------------------------------------------------------+-- StdMap++-- TODO++-------------------------------------------------------------------------------+-- StdMultiMap++-- TODO++--data CStdMultiMap k v+--newtype StdMultiMap k v = StdMultiMap (CStdMultiMap k v)
src/HsForeign/Primitive.hs view
@@ -34,6 +34,7 @@ import           Data.Primitive import           Data.Primitive.Unlifted.Array import           Foreign.ForeignPtr+import           Foreign.Ptr import           GHC.Exts  -------------------------------------------------------------------------------@@ -127,7 +128,8 @@ {-# INLINABLE withPrimArray #-}  withPrimList :: Prim a => [a] -> (Ptr a -> Int -> IO b) -> IO b-withPrimList = withPrimArray . primArrayFromList+withPrimList [] f = f nullPtr 0+withPrimList xs f = withPrimArray (primArrayFromList xs) f {-# INLINABLE withPrimList #-}  -- From Z-Data package: Z.Foreign
test/HsForeign/StringSpec.hs view
@@ -18,3 +18,10 @@       -- 3. unsafePeekStdString peek the std::string with a delete finalizer.       let f = unsafePeekStdString =<< (withByteString s $ \p l -> hs_new_std_string p l)        in unsafeDupablePerformIO f === s++    prop "newStdStringFromShort" $ \s -> do+      let f = do p <- newStdStringFromShort s+                 s' <- peekStdStringShort p+                 hs_delete_std_string p+                 pure s'+       in unsafeDupablePerformIO f === s