{-# LINE 1 "src/Data/Number/Flint/Hypgeom/FFI.hsc" #-}
module Data.Number.Flint.Hypgeom.FFI (
Hypgeom (..)
, CHypgeom (..)
, newHypgeom
, withHypgeom
, withNewHypgeom
, hypgeom_init
, hypgeom_clear
, hypgeom_estimate_terms
, hypgeom_bound
, hypgeom_precompute
, arb_hypgeom_sum
, arb_hypgeom_infsum
) where
import Foreign.Ptr
import Foreign.ForeignPtr
import Foreign.Storable
import Foreign.C.Types
import Data.Number.Flint.Flint
import Data.Number.Flint.Arb.Types
data Hypgeom = Hypgeom {-# UNPACK #-} !(ForeignPtr CHypgeom)
type CHypgeom = CFlint Hypgeom
instance Storable CHypgeom where
sizeOf :: CHypgeom -> Int
sizeOf CHypgeom
_ = (Int
152)
{-# LINE 46 "src/Data/Number/Flint/Hypgeom/FFI.hsc" #-}
alignment _ = 8
{-# LINE 47 "src/Data/Number/Flint/Hypgeom/FFI.hsc" #-}
peek = undefined
poke :: Ptr CHypgeom -> CHypgeom -> IO ()
poke = Ptr CHypgeom -> CHypgeom -> IO ()
forall a. HasCallStack => a
undefined
newHypgeom :: IO Hypgeom
newHypgeom = do
ForeignPtr CHypgeom
x <- IO (ForeignPtr CHypgeom)
forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
ForeignPtr CHypgeom -> (Ptr CHypgeom -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CHypgeom
x Ptr CHypgeom -> IO ()
hypgeom_init
FinalizerPtr CHypgeom -> ForeignPtr CHypgeom -> IO ()
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FinalizerPtr CHypgeom
p_hypgeom_clear ForeignPtr CHypgeom
x
Hypgeom -> IO Hypgeom
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Hypgeom -> IO Hypgeom) -> Hypgeom -> IO Hypgeom
forall a b. (a -> b) -> a -> b
$ ForeignPtr CHypgeom -> Hypgeom
Hypgeom ForeignPtr CHypgeom
x
withHypgeom :: Hypgeom -> (Ptr CHypgeom -> IO a) -> IO (Hypgeom, a)
withHypgeom (Hypgeom ForeignPtr CHypgeom
p) Ptr CHypgeom -> IO a
f = do
ForeignPtr CHypgeom
-> (Ptr CHypgeom -> IO (Hypgeom, a)) -> IO (Hypgeom, a)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CHypgeom
p ((Ptr CHypgeom -> IO (Hypgeom, a)) -> IO (Hypgeom, a))
-> (Ptr CHypgeom -> IO (Hypgeom, a)) -> IO (Hypgeom, a)
forall a b. (a -> b) -> a -> b
$ \Ptr CHypgeom
fp -> (ForeignPtr CHypgeom -> Hypgeom
Hypgeom ForeignPtr CHypgeom
p,) (a -> (Hypgeom, a)) -> IO a -> IO (Hypgeom, a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CHypgeom -> IO a
f Ptr CHypgeom
fp
withNewHypgeom :: (Ptr CHypgeom -> IO a) -> IO (Hypgeom, a)
withNewHypgeom Ptr CHypgeom -> IO a
f = do
Hypgeom
x <- IO Hypgeom
newHypgeom
Hypgeom -> (Ptr CHypgeom -> IO a) -> IO (Hypgeom, a)
forall {a}. Hypgeom -> (Ptr CHypgeom -> IO a) -> IO (Hypgeom, a)
withHypgeom Hypgeom
x Ptr CHypgeom -> IO a
f
foreign import ccall "hypgeom.h hypgeom_init"
hypgeom_init :: Ptr CHypgeom -> IO ()
foreign import ccall "hypgeom.h hypgeom_clear"
hypgeom_clear :: Ptr CHypgeom -> IO ()
foreign import ccall "hypgeom.h &hypgeom_clear"
p_hypgeom_clear :: FunPtr (Ptr CHypgeom -> IO ())
foreign import ccall "hypgeom.h hypgeom_estimate_terms"
hypgeom_estimate_terms :: Ptr CMag -> CInt -> CLong -> IO CLong
foreign import ccall "hypgeom.h hypgeom_bound"
hypgeom_bound :: Ptr CMag -> CInt -> CLong -> CLong -> CLong -> Ptr CMag -> Ptr CMag -> CLong -> IO CLong
foreign import ccall "hypgeom.h hypgeom_precompute"
hypgeom_precompute :: Ptr CHypgeom -> IO ()
foreign import ccall "hypgeom.h arb_hypgeom_sum"
arb_hypgeom_sum :: Ptr CArb -> Ptr CArb -> Ptr CHypgeom -> CLong -> CLong -> IO ()
foreign import ccall "hypgeom.h arb_hypgeom_infsum"
arb_hypgeom_infsum :: Ptr CArb -> Ptr CArb -> Ptr CHypgeom -> CLong -> CLong -> IO ()