{-# LANGUAGE CApiFFI #-}
module OpenCascade.RWMesh.CafReader
( CafReader
, setDocument
, perform
, singleShape
, setFileLengthUnit
) where

import OpenCascade.RWMesh.Types (CafReader)
import qualified OpenCascade.TDocStd.Types as TDocStd
import qualified OpenCascade.Message.Types as Message
import qualified OpenCascade.TopoDS.Types as TopoDS
import OpenCascade.TopoDS.Internal.Destructors (deleteShape)
import OpenCascade.Handle (Handle)
import OpenCascade.Internal.Bool (cBoolToBool)
import Foreign.C (CBool (..), CDouble (..))
import Foreign.C.String (CString, withCString)
import Foreign.Ptr (Ptr)
import Data.Coerce (coerce)
import Data.Acquire (Acquire, mkAcquire)

foreign import capi unsafe "hs_RWMesh_CafReader.h hs_RWMesh_CafReader_setDocument" setDocument :: Ptr CafReader -> Ptr (Handle TDocStd.Document) -> IO ()

foreign import capi unsafe "hs_RWMesh_CafReader.h hs_RWMesh_CafReader_setFileLengthUnit" rawSetFileLengthUnit :: Ptr CafReader -> CDouble -> IO ()

setFileLengthUnit :: Ptr CafReader -> Double -> IO ()
setFileLengthUnit :: Ptr CafReader -> Double -> IO ()
setFileLengthUnit = (Ptr CafReader -> CDouble -> IO ())
-> Ptr CafReader -> Double -> IO ()
forall a b. Coercible a b => a -> b
coerce Ptr CafReader -> CDouble -> IO ()
rawSetFileLengthUnit

foreign import capi unsafe "hs_RWMesh_CafReader.h hs_RWMesh_CafReader_perform" rawPerform :: Ptr CafReader -> CString -> Ptr Message.ProgressRange -> IO CBool

perform :: Ptr CafReader -> String -> Ptr Message.ProgressRange -> IO Bool
perform :: Ptr CafReader -> String -> Ptr ProgressRange -> IO Bool
perform Ptr CafReader
reader String
filename Ptr ProgressRange
progress = CBool -> Bool
cBoolToBool (CBool -> Bool) -> IO CBool -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> (CString -> IO CBool) -> IO CBool
forall a. String -> (CString -> IO a) -> IO a
withCString String
filename ((CString -> IO CBool) -> IO CBool)
-> (CString -> IO CBool) -> IO CBool
forall a b. (a -> b) -> a -> b
$ \CString
str -> Ptr CafReader -> CString -> Ptr ProgressRange -> IO CBool
rawPerform Ptr CafReader
reader CString
str Ptr ProgressRange
progress)

foreign import capi unsafe "hs_RWMesh_CafReader.h hs_RWMesh_CafReader_singleShape" rawSingleShape :: Ptr CafReader -> IO (Ptr TopoDS.Shape)

singleShape :: Ptr CafReader -> Acquire (Ptr TopoDS.Shape)
singleShape :: Ptr CafReader -> Acquire (Ptr Shape)
singleShape Ptr CafReader
reader = IO (Ptr Shape) -> (Ptr Shape -> IO ()) -> Acquire (Ptr Shape)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr CafReader -> IO (Ptr Shape)
rawSingleShape Ptr CafReader
reader) Ptr Shape -> IO ()
deleteShape