packages feed

casadi-bindings-internal-0.1.2: src/Casadi/Internal/Callback.hs

{-# OPTIONS_GHC -Wall #-}
{-# Language ScopedTypeVariables #-}
{-# Language FlexibleContexts #-}

module Casadi.Internal.Callback
       ( c_newCallbackHaskell
       , mkCallback
       , c_newCustomEvaluateHaskell
       , mkCustomEvaluate
       , c_newDerivativeGeneratorHaskell
       , mkDerivativeGenerator
       ) where


import Foreign.C.Types
import Foreign.Ptr ( Ptr, FunPtr )
--import Foreign.ForeignPtr ( ForeignPtr, newForeignPtr_ )

--import Casadi.Symbolic.Data
--import Casadi.Internal.Marshal ( withMarshal )
--import Casadi.Internal.WrapReturn ( WrapReturn(..) )

-- these guys all have type parameters because core depends on internal, not the other way around

type CasadiCallback' function = Ptr function -> IO CInt
foreign import ccall "wrapper" mkCallback
  :: CasadiCallback' function -> IO (FunPtr (CasadiCallback' function))
foreign import ccall safe "new_callback_haskell" c_newCallbackHaskell
  :: FunPtr (CasadiCallback' function) -> IO (Ptr callback)


type CasadiCustomEvaluate' customFunction = Ptr customFunction -> IO ()
foreign import ccall "wrapper" mkCustomEvaluate
  :: CasadiCustomEvaluate' customFunction -> IO (FunPtr (CasadiCustomEvaluate' customFunction))
foreign import ccall safe "new_custom_evaluate_haskell" c_newCustomEvaluateHaskell
  :: FunPtr (CasadiCustomEvaluate' customFunction) -> IO (Ptr customEvaluate)


type CasadiDerivativeGenerator' function = Ptr function -> CInt -> CInt -> IO (Ptr function)
foreign import ccall "wrapper" mkDerivativeGenerator
  :: CasadiDerivativeGenerator' function -> IO (FunPtr (CasadiDerivativeGenerator' function))
foreign import ccall safe "new_derivative_generator_haskell" c_newDerivativeGeneratorHaskell
  :: FunPtr (CasadiDerivativeGenerator' function) -> IO (Ptr derivativeGenerator)