{-# LANGUAGE CApiFFI #-}
module OpenCascade.GCPnts.AbscissaPoint
( AbscissaPoint
, fromCurveAbscissaAndParam
, parameter
, isDone
) where

import OpenCascade.GCPnts.Types (AbscissaPoint)
import OpenCascade.GCPnts.Internal.Destructors (deleteAbscissaPoint)
import qualified OpenCascade.BRepAdaptor.Types as BRepAdaptor
import OpenCascade.Internal.Bool (cBoolToBool)
import Foreign.Ptr
import Foreign.C
import Data.Acquire (Acquire, mkAcquire)
import Data.Coerce (coerce)

foreign import capi unsafe "hs_GCPnts_AbscissaPoint.h hs_new_GCPnts_AbscissaPoint" rawNew :: Ptr BRepAdaptor.Curve -> CDouble -> CDouble -> IO (Ptr AbscissaPoint)

fromCurveAbscissaAndParam :: Ptr BRepAdaptor.Curve -> Double -> Double -> Acquire (Ptr AbscissaPoint)
fromCurveAbscissaAndParam :: Ptr Curve -> Double -> Double -> Acquire (Ptr AbscissaPoint)
fromCurveAbscissaAndParam Ptr Curve
curve Double
abscissa Double
u0 = IO (Ptr AbscissaPoint)
-> (Ptr AbscissaPoint -> IO ()) -> Acquire (Ptr AbscissaPoint)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Curve -> CDouble -> CDouble -> IO (Ptr AbscissaPoint)
rawNew Ptr Curve
curve (Double -> CDouble
CDouble Double
abscissa) (Double -> CDouble
CDouble Double
u0)) Ptr AbscissaPoint -> IO ()
deleteAbscissaPoint

foreign import capi unsafe "hs_GCPnts_AbscissaPoint.h hs_GCPnts_AbscissaPoint_parameter" rawParameter :: Ptr AbscissaPoint -> IO CDouble

parameter :: Ptr AbscissaPoint -> IO Double
parameter :: Ptr AbscissaPoint -> IO Double
parameter = (Ptr AbscissaPoint -> IO CDouble) -> Ptr AbscissaPoint -> IO Double
forall a b. Coercible a b => a -> b
coerce Ptr AbscissaPoint -> IO CDouble
rawParameter

foreign import capi unsafe "hs_GCPnts_AbscissaPoint.h hs_GCPnts_AbscissaPoint_isDone" rawIsDone :: Ptr AbscissaPoint -> IO CBool

isDone :: Ptr AbscissaPoint -> IO Bool
isDone :: Ptr AbscissaPoint -> IO Bool
isDone = (CBool -> Bool) -> IO CBool -> IO Bool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> Bool
cBoolToBool (IO CBool -> IO Bool)
-> (Ptr AbscissaPoint -> IO CBool) -> Ptr AbscissaPoint -> IO Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr AbscissaPoint -> IO CBool
rawIsDone