{-# 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 ()