module LLVM.Internal.FFI.RawOStream where
import LLVM.Prelude
import Foreign.Ptr
import Foreign.C
import Control.Exception (bracket)
import LLVM.Internal.FFI.ByteRangeCallback
import LLVM.Internal.FFI.LLVMCTypes
import LLVM.Internal.FFI.PtrHierarchy
type RawPWriteStreamCallback = Ptr RawPWriteStream -> IO ()
foreign import ccall "wrapper" wrapRawPWriteStreamCallback ::
RawPWriteStreamCallback -> IO (FunPtr RawPWriteStreamCallback)
foreign import ccall safe "LLVM_Hs_WithFileRawPWriteStream" withFileRawPWriteStream' ::
CString -> LLVMBool -> LLVMBool -> Ptr (OwnerTransfered CString) -> FunPtr RawPWriteStreamCallback -> IO LLVMBool
withFileRawPWriteStream :: CString -> LLVMBool -> LLVMBool -> Ptr (OwnerTransfered CString) -> RawPWriteStreamCallback -> IO LLVMBool
withFileRawPWriteStream p ex bin err c =
bracket (wrapRawPWriteStreamCallback c) freeHaskellFunPtr (withFileRawPWriteStream' p ex bin err)
foreign import ccall safe "LLVM_Hs_WithBufferRawPWriteStream" withBufferRawPWriteStream' ::
FunPtr ByteRangeCallback -> FunPtr RawPWriteStreamCallback -> IO ()
withBufferRawPWriteStream :: ByteRangeCallback -> RawPWriteStreamCallback -> IO ()
withBufferRawPWriteStream oc c =
bracket (wrapRawPWriteStreamCallback c) freeHaskellFunPtr $ \c ->
bracket (wrapByteRangeCallback oc) freeHaskellFunPtr $ \oc ->
withBufferRawPWriteStream' oc c