packages feed

opencascade-hs-0.0.0.1: src/OpenCascade/TopExp/Explorer.hs

{-# LANGUAGE CApiFFI #-}
module OpenCascade.TopExp.Explorer
( Explorer
, new
, more
, next
, value
) where

import OpenCascade.TopExp.Types (Explorer)
import OpenCascade.TopExp.Internal.Destructors (deleteExplorer)
import qualified OpenCascade.TopoDS as TopoDS
import qualified OpenCascade.TopAbs as TopAbs
import Data.Acquire
import Foreign.Ptr
import Foreign.C
import OpenCascade.Internal.Bool (cBoolToBool)

foreign import capi unsafe "hs_TopExp_Explorer.h hs_new_TopExp_Explorer" rawNew :: Ptr TopoDS.Shape -> CInt -> IO (Ptr Explorer)

new :: Ptr TopoDS.Shape -> TopAbs.ShapeEnum -> Acquire (Ptr Explorer)
new shape theType = mkAcquire (rawNew shape (fromIntegral . fromEnum $ theType)) deleteExplorer

foreign import capi unsafe "hs_TopExp_Explorer.h hs_TopExp_Explorer_more" rawMore :: Ptr Explorer -> IO (CBool)

more :: Ptr Explorer -> IO Bool
more = fmap (cBoolToBool) . rawMore 

foreign import capi unsafe "hs_TopExp_Explorer.h hs_TopExp_Explorer_next" next :: Ptr Explorer -> IO ()

foreign import capi unsafe "hs_TopExp_Explorer.h hs_TopExp_Explorer_value" value :: Ptr Explorer -> IO (Ptr TopoDS.Shape)