{-# LANGUAGE CApiFFI #-}
module OpenCascade.GeomAdaptor.Curve
( Curve
, fromHandle
, firstParameter
, lastParameter
, curve
) where

import OpenCascade.GeomAdaptor.Types (Curve)
import qualified OpenCascade.Geom.Types as Geom
import qualified OpenCascade.Geom.Internal.Destructors as Geom.Destructors
import OpenCascade.GeomAdaptor.Internal.Destructors (deleteCurve)
import OpenCascade.Handle (Handle)
import Foreign.C (CDouble (..))
import Data.Coerce (coerce)
import Foreign.Ptr 
import Data.Acquire (Acquire, mkAcquire)

foreign import capi unsafe "hs_GeomAdaptor_Curve.h hs_new_GeomAdaptor_Curve_fromHandle" rawFromHandle :: Ptr (Handle Geom.Curve) -> IO (Ptr Curve)

fromHandle :: Ptr (Handle Geom.Curve) -> Acquire (Ptr Curve)
fromHandle :: Ptr (Handle Curve) -> Acquire (Ptr Curve)
fromHandle Ptr (Handle Curve)
h = IO (Ptr Curve) -> (Ptr Curve -> IO ()) -> Acquire (Ptr Curve)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Curve) -> IO (Ptr Curve)
rawFromHandle Ptr (Handle Curve)
h) Ptr Curve -> IO ()
deleteCurve


foreign import capi unsafe "hs_GeomAdaptor_Curve.h hs_GeomAdaptor_Curve_curve" rawCurve :: Ptr Curve -> IO (Ptr (Handle Geom.Curve))

curve :: Ptr Curve -> Acquire (Ptr (Handle Geom.Curve))
curve :: Ptr Curve -> Acquire (Ptr (Handle Curve))
curve Ptr Curve
adaptor = IO (Ptr (Handle Curve))
-> (Ptr (Handle Curve) -> IO ()) -> Acquire (Ptr (Handle Curve))
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Curve -> IO (Ptr (Handle Curve))
rawCurve Ptr Curve
adaptor) Ptr (Handle Curve) -> IO ()
Geom.Destructors.deleteHandleCurve

foreign import capi unsafe "hs_GeomAdaptor_Curve.h hs_GeomAdaptor_Curve_firstParameter" rawFirstParameter :: Ptr Curve-> IO (CDouble)

firstParameter :: Ptr Curve -> IO Double
firstParameter :: Ptr Curve -> IO Double
firstParameter = (Ptr Curve -> IO CDouble) -> Ptr Curve -> IO Double
forall a b. Coercible a b => a -> b
coerce Ptr Curve -> IO CDouble
rawFirstParameter

foreign import capi unsafe "hs_GeomAdaptor_Curve.h hs_GeomAdaptor_Curve_lastParameter" rawLastParameter :: Ptr Curve -> IO (CDouble)

lastParameter :: Ptr Curve -> IO Double
lastParameter :: Ptr Curve -> IO Double
lastParameter = (Ptr Curve -> IO CDouble) -> Ptr Curve -> IO Double
forall a b. Coercible a b => a -> b
coerce Ptr Curve -> IO CDouble
rawLastParameter