{-# LANGUAGE CApiFFI #-}
module OpenCascade.Bnd.Box
( Box
, new
, cornerMin
, cornerMax
) where

import OpenCascade.Bnd.Types
import OpenCascade.Bnd.Internal.Destructors (deleteBox)
import OpenCascade.GP.Types (Pnt)
import OpenCascade.GP.Internal.Destructors (deletePnt)
import Data.Acquire (Acquire, mkAcquire)
import Foreign.Ptr (Ptr)

foreign import capi unsafe "hs_Bnd_Box.h hs_new_Bnd_Box" rawNew ::  IO (Ptr Box)

new :: Acquire (Ptr Box)
new :: Acquire (Ptr Box)
new = IO (Ptr Box) -> (Ptr Box -> IO ()) -> Acquire (Ptr Box)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire IO (Ptr Box)
rawNew Ptr Box -> IO ()
deleteBox

foreign import capi unsafe "hs_Bnd_Box.h hs_Bnd_Box_cornerMin" rawCornerMin :: Ptr Box -> IO (Ptr Pnt)

cornerMin :: Ptr Box -> Acquire (Ptr Pnt)
cornerMin :: Ptr Box -> Acquire (Ptr Pnt)
cornerMin Ptr Box
box = IO (Ptr Pnt) -> (Ptr Pnt -> IO ()) -> Acquire (Ptr Pnt)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Box -> IO (Ptr Pnt)
rawCornerMin Ptr Box
box) Ptr Pnt -> IO ()
deletePnt

foreign import capi unsafe "hs_Bnd_Box.h hs_Bnd_Box_cornerMax" rawCornerMax :: Ptr Box -> IO (Ptr Pnt)

cornerMax :: Ptr Box -> Acquire (Ptr Pnt)
cornerMax :: Ptr Box -> Acquire (Ptr Pnt)
cornerMax Ptr Box
box = IO (Ptr Pnt) -> (Ptr Pnt -> IO ()) -> Acquire (Ptr Pnt)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Box -> IO (Ptr Pnt)
rawCornerMax Ptr Box
box) Ptr Pnt -> IO ()
deletePnt