zlib-core-0.1.0.0: src/Codec/Compression/Zlib/Basic/Core.hsc
{-# LANGUAGE CApiFFI #-}
{-# LANGUAGE BlockArguments #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module Codec.Compression.Zlib.Basic.Core (
zlibVersion,
deflateInit, deflate, deflateEnd,
inflateInit, inflate, inflateEnd
) where
import Foreign.Ptr
import Foreign.C.String
import Control.Monad.Primitive
import System.IO.Unsafe
import Codec.Compression.Zlib.Structure.Core
import Codec.Compression.Zlib.Constant.Core
zlibVersion :: String
zlibVersion = unsafePerformIO $ peekCString c_zlibVersion
deflateInit :: PrimBase m =>
StreamPrim (PrimState m) -> CompressionLevel -> m ReturnCode
deflateInit strm cl = withStreamPtr strm $ unsafeIOToPrim . (`c_deflateInit` cl)
deflate :: PrimBase m => StreamPrim (PrimState m) -> Flush -> m ReturnCode
deflate strm fls = withStreamPtr strm $ unsafeIOToPrim . (`c_deflate` fls)
deflateEnd :: PrimBase m => StreamPrim (PrimState m) -> m ReturnCode
deflateEnd strm = withStreamPtr strm $ unsafeIOToPrim . c_deflateEnd
inflateInit :: PrimBase m => StreamPrim (PrimState m) -> m ReturnCode
inflateInit strm = withStreamPtr strm $ unsafeIOToPrim . c_inflateInit
inflate :: PrimBase m => StreamPrim (PrimState m) -> Flush -> m ReturnCode
inflate strm fls = withStreamPtr strm \s -> unsafeIOToPrim $ c_inflate s fls
inflateEnd :: PrimBase m => StreamPrim (PrimState m) -> m ReturnCode
inflateEnd strm = withStreamPtr strm $ unsafeIOToPrim . c_inflateEnd
foreign import ccall "zlibVersion" c_zlibVersion :: CString
foreign import capi "zlib.h deflateInit" c_deflateInit :: Ptr Stream -> CompressionLevel -> IO ReturnCode
foreign import ccall "deflate" c_deflate :: Ptr Stream -> Flush -> IO ReturnCode
foreign import ccall "deflateEnd" c_deflateEnd :: Ptr Stream -> IO ReturnCode
foreign import capi "zlib.h inflateInit" c_inflateInit :: Ptr Stream -> IO ReturnCode
foreign import ccall "inflate" c_inflate :: Ptr Stream -> Flush -> IO ReturnCode
foreign import ccall "inflateEnd" c_inflateEnd :: Ptr Stream -> IO ReturnCode