{-# LANGUAGE CApiFFI #-} module OpenCascade.XSControl.Reader ( Reader , readFile , transferRoots , oneShape ) where import Prelude hiding (readFile) import OpenCascade.XSControl.Types (Reader) import OpenCascade.IFSelect.ReturnStatus (ReturnStatus) import qualified OpenCascade.TopoDS.Types as TopoDS import OpenCascade.TopoDS.Internal.Destructors (deleteShape) import OpenCascade.Internal.Bool (cBoolToBool) import Foreign.C.String (CString, withCString) import Foreign.C (CInt (..), CBool (..)) import Foreign.Ptr (Ptr) import Data.Acquire (Acquire, mkAcquire) foreign import capi unsafe "hs_XSControl_Reader.h hs_XSControl_Reader_readFile" rawReadFile :: Ptr Reader -> CString -> IO CInt readFile :: Ptr Reader -> String -> IO ReturnStatus readFile :: Ptr Reader -> String -> IO ReturnStatus readFile Ptr Reader reader String s = Int -> ReturnStatus forall a. Enum a => Int -> a toEnum (Int -> ReturnStatus) -> (CInt -> Int) -> CInt -> ReturnStatus forall b c a. (b -> c) -> (a -> b) -> a -> c . CInt -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral (CInt -> ReturnStatus) -> IO CInt -> IO ReturnStatus forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> (CString -> IO CInt) -> IO CInt forall a. String -> (CString -> IO a) -> IO a withCString String s (Ptr Reader -> CString -> IO CInt rawReadFile Ptr Reader reader) foreign import capi unsafe "hs_XSControl_Reader.h hs_XSControl_Reader_transferRoots" rawTransferRoots :: Ptr Reader -> IO (CBool) transferRoots :: Ptr Reader -> IO Bool transferRoots :: Ptr Reader -> IO Bool transferRoots Ptr Reader reader = CBool -> Bool cBoolToBool (CBool -> Bool) -> IO CBool -> IO Bool forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Ptr Reader -> IO CBool rawTransferRoots Ptr Reader reader foreign import capi unsafe "hs_XSControl_Reader.h hs_XSControl_Reader_oneShape" rawOneShape :: Ptr Reader -> IO (Ptr TopoDS.Shape) oneShape :: Ptr Reader -> Acquire (Ptr TopoDS.Shape) oneShape :: Ptr Reader -> Acquire (Ptr Shape) oneShape Ptr Reader reader = IO (Ptr Shape) -> (Ptr Shape -> IO ()) -> Acquire (Ptr Shape) forall a. IO a -> (a -> IO ()) -> Acquire a mkAcquire (Ptr Reader -> IO (Ptr Shape) rawOneShape Ptr Reader reader) Ptr Shape -> IO () deleteShape