{-# LANGUAGE CApiFFI #-}
module OpenCascade.Geom.Curve 
( value
, dn
) where
import Foreign.Ptr
import Foreign.C
import Data.Coerce
import Data.Acquire
import OpenCascade.Geom.Types (Curve)
import OpenCascade.GP (Pnt, Vec)
import OpenCascade.GP.Internal.Destructors (deletePnt, deleteVec)
import OpenCascade.Handle (Handle)
foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_value" rawValue :: Ptr (Handle Curve) -> CDouble -> IO(Ptr Pnt)

value :: Ptr (Handle Curve) -> Double -> Acquire (Ptr Pnt)
value :: Ptr (Handle Curve) -> Double -> Acquire (Ptr Pnt)
value Ptr (Handle Curve)
curve Double
u = IO (Ptr Pnt) -> (Ptr Pnt -> IO ()) -> Acquire (Ptr Pnt)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Curve) -> CDouble -> IO (Ptr Pnt)
rawValue Ptr (Handle Curve)
curve (Double -> CDouble
forall a b. Coercible a b => a -> b
coerce Double
u)) Ptr Pnt -> IO ()
deletePnt

foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_dn" rawDN :: Ptr (Handle Curve) -> CDouble -> CInt -> IO (Ptr Vec)

dn :: Ptr (Handle Curve) -> Double -> Int -> Acquire (Ptr Vec)
dn :: Ptr (Handle Curve) -> Double -> Int -> Acquire (Ptr Vec)
dn Ptr (Handle Curve)
curve Double
u Int
n = IO (Ptr Vec) -> (Ptr Vec -> IO ()) -> Acquire (Ptr Vec)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Curve) -> CDouble -> CInt -> IO (Ptr Vec)
rawDN Ptr (Handle Curve)
curve (Double -> CDouble
forall a b. Coercible a b => a -> b
coerce Double
u) (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)) Ptr Vec -> IO ()
deleteVec