{-# LINE 1 "src/Data/Number/Flint/Fmpz/Poly/Q/FFI.hsc" #-}
module Data.Number.Flint.Fmpz.Poly.Q.FFI (
FmpzPolyQ (..)
, CFmpzPolyQ (..)
, newFmpzPolyQ
, withFmpzPolyQ
, withNewFmpzPolyQ
, withFmpzPolyQNum
, withFmpzPolyQDen
, fmpz_poly_q_init
, fmpz_poly_q_clear
, fmpz_poly_q_canonicalise
, fmpz_poly_q_is_canonical
, fmpz_poly_q_randtest
, fmpz_poly_q_randtest_not_zero
, fmpz_poly_q_set
, fmpz_poly_q_set_si
, fmpz_poly_q_swap
, fmpz_poly_q_zero
, fmpz_poly_q_one
, fmpz_poly_q_neg
, fmpz_poly_q_inv
, fmpz_poly_q_is_zero
, fmpz_poly_q_is_one
, fmpz_poly_q_equal
, fmpz_poly_q_add
, fmpz_poly_q_sub
, fmpz_poly_q_addmul
, fmpz_poly_q_submul
, fmpz_poly_q_scalar_mul_si
, fmpz_poly_q_scalar_mul_fmpz
, fmpz_poly_q_scalar_mul_fmpq
, fmpz_poly_q_scalar_div_si
, fmpz_poly_q_scalar_div_fmpz
, fmpz_poly_q_scalar_div_fmpq
, fmpz_poly_q_mul
, fmpz_poly_q_div
, fmpz_poly_q_pow
, fmpz_poly_q_derivative
, fmpz_poly_q_evaluate_fmpq
, fmpz_poly_q_set_str
, fmpz_poly_q_get_str
, fmpz_poly_q_get_str_pretty
, fmpz_poly_q_print
, fmpz_poly_q_print_pretty
) where
import Foreign.Ptr
import Foreign.ForeignPtr
import Foreign.C.Types
import Foreign.C.String
import Foreign.Storable
import Foreign.Marshal.Array ( advancePtr )
import Data.Number.Flint.Flint
import Data.Number.Flint.Fmpz
import Data.Number.Flint.Fmpz.Poly
import Data.Number.Flint.Fmpq
import Data.Number.Flint.Fmpq.Poly
data FmpzPolyQ = FmpzPolyQ {-# UNPACK #-} !(ForeignPtr CFmpzPolyQ)
data CFmpzPolyQ = CFmpzPolyQ (Ptr CFmpzPoly) (Ptr CFmpzPoly)
instance Storable CFmpzPolyQ where
sizeOf :: CFmpzPolyQ -> Int
sizeOf CFmpzPolyQ
_ = (Int
16)
{-# LINE 91 "src/Data/Number/Flint/Fmpz/Poly/Q/FFI.hsc" #-}
alignment _ = (16)
{-# LINE 92 "src/Data/Number/Flint/Fmpz/Poly/Q/FFI.hsc" #-}
peek ptr = CFmpzPolyQ
<$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 94 "src/Data/Number/Flint/Fmpz/Poly/Q/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 95 "src/Data/Number/Flint/Fmpz/Poly/Q/FFI.hsc" #-}
poke ptr (CFmpzPolyQ num den) = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr num
{-# LINE 97 "src/Data/Number/Flint/Fmpz/Poly/Q/FFI.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr den
{-# LINE 98 "src/Data/Number/Flint/Fmpz/Poly/Q/FFI.hsc" #-}
newFmpzPolyQ :: IO FmpzPolyQ
newFmpzPolyQ = do
ForeignPtr CFmpzPolyQ
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpzPolyQ
x Ptr CFmpzPolyQ -> IO ()
fmpz_poly_q_init
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FunPtr (Ptr CFmpzPolyQ -> IO ())
p_fmpz_poly_q_clear ForeignPtr CFmpzPolyQ
x
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CFmpzPolyQ -> FmpzPolyQ
FmpzPolyQ ForeignPtr CFmpzPolyQ
x
withFmpzPolyQ :: FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a)
withFmpzPolyQ (FmpzPolyQ ForeignPtr CFmpzPolyQ
x) Ptr CFmpzPolyQ -> IO a
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpzPolyQ
x forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzPolyQ
xp -> (ForeignPtr CFmpzPolyQ -> FmpzPolyQ
FmpzPolyQ ForeignPtr CFmpzPolyQ
x,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFmpzPolyQ -> IO a
f Ptr CFmpzPolyQ
xp
withNewFmpzPolyQ :: (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a)
withNewFmpzPolyQ Ptr CFmpzPolyQ -> IO a
f = do
FmpzPolyQ
x <- IO FmpzPolyQ
newFmpzPolyQ
forall {a}.
FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a)
withFmpzPolyQ FmpzPolyQ
x Ptr CFmpzPolyQ -> IO a
f
withFmpzPolyQNum :: FmpzPolyQ -> (Ptr CFmpzPoly -> IO t) -> IO (FmpzPolyQ, t)
withFmpzPolyQNum :: forall t. FmpzPolyQ -> (Ptr CFmpzPoly -> IO t) -> IO (FmpzPolyQ, t)
withFmpzPolyQNum FmpzPolyQ
x Ptr CFmpzPoly -> IO t
f = do
(FmpzPolyQ
_, (FmpzPolyQ, t)
res) <- forall {a}.
FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a)
withFmpzPolyQ FmpzPolyQ
x forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzPolyQ
xp -> do
CFmpzPolyQ Ptr CFmpzPoly
n Ptr CFmpzPoly
d <- forall a. Storable a => Ptr a -> IO a
peek Ptr CFmpzPolyQ
xp
(FmpzPolyQ
x,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFmpzPoly -> IO t
f Ptr CFmpzPoly
n
forall (m :: * -> *) a. Monad m => a -> m a
return (FmpzPolyQ, t)
res
withFmpzPolyQDen :: FmpzPolyQ -> (Ptr CFmpzPoly -> IO t) -> IO (FmpzPolyQ, t)
withFmpzPolyQDen :: forall t. FmpzPolyQ -> (Ptr CFmpzPoly -> IO t) -> IO (FmpzPolyQ, t)
withFmpzPolyQDen FmpzPolyQ
x Ptr CFmpzPoly -> IO t
f = do
(FmpzPolyQ
_, (FmpzPolyQ, t)
res) <- forall {a}.
FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a)
withFmpzPolyQ FmpzPolyQ
x forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzPolyQ
xp -> do
CFmpzPolyQ Ptr CFmpzPoly
n Ptr CFmpzPoly
d <- forall a. Storable a => Ptr a -> IO a
peek Ptr CFmpzPolyQ
xp
(FmpzPolyQ
x,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFmpzPoly -> IO t
f Ptr CFmpzPoly
d
forall (m :: * -> *) a. Monad m => a -> m a
return (FmpzPolyQ, t)
res
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_init"
fmpz_poly_q_init :: Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_clear"
fmpz_poly_q_clear :: Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h &fmpz_poly_q_clear"
p_fmpz_poly_q_clear :: FunPtr (Ptr CFmpzPolyQ -> IO ())
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_canonicalise"
fmpz_poly_q_canonicalise :: Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_is_canonical"
fmpz_poly_q_is_canonical :: Ptr CFmpzPolyQ -> IO CInt
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_randtest"
fmpz_poly_q_randtest :: Ptr CFmpzPolyQ -> Ptr CFRandState -> CLong -> CFBitCnt -> CLong -> CFBitCnt -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_randtest_not_zero"
fmpz_poly_q_randtest_not_zero :: Ptr CFmpzPolyQ -> Ptr CFRandState -> CLong -> CFBitCnt -> CLong -> CFBitCnt -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_set"
fmpz_poly_q_set :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_set_si"
fmpz_poly_q_set_si :: Ptr CFmpzPolyQ -> CLong -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_swap"
fmpz_poly_q_swap :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_zero"
fmpz_poly_q_zero :: Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_one"
fmpz_poly_q_one :: Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_neg"
fmpz_poly_q_neg :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_inv"
fmpz_poly_q_inv :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_is_zero"
fmpz_poly_q_is_zero :: Ptr CFmpzPolyQ -> IO CInt
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_is_one"
fmpz_poly_q_is_one :: Ptr CFmpzPolyQ -> IO CInt
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_equal"
fmpz_poly_q_equal :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO CInt
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_add"
fmpz_poly_q_add :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_sub"
fmpz_poly_q_sub :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_addmul"
fmpz_poly_q_addmul :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_submul"
fmpz_poly_q_submul :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_scalar_mul_si"
fmpz_poly_q_scalar_mul_si :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> CLong -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_scalar_mul_fmpz"
fmpz_poly_q_scalar_mul_fmpz :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpz -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_scalar_mul_fmpq"
fmpz_poly_q_scalar_mul_fmpq :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpq -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_scalar_div_si"
fmpz_poly_q_scalar_div_si :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> CLong -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_scalar_div_fmpz"
fmpz_poly_q_scalar_div_fmpz :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpz -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_scalar_div_fmpq"
fmpz_poly_q_scalar_div_fmpq :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpq -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_mul"
fmpz_poly_q_mul :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_div"
fmpz_poly_q_div :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_pow"
fmpz_poly_q_pow :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> CULong -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_derivative"
fmpz_poly_q_derivative :: Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_evaluate_fmpq"
fmpz_poly_q_evaluate_fmpq :: Ptr CFmpq -> Ptr CFmpzPolyQ -> Ptr CFmpq -> IO CInt
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_set_str"
fmpz_poly_q_set_str :: Ptr CFmpzPolyQ -> CString -> IO CInt
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_get_str"
fmpz_poly_q_get_str :: Ptr CFmpzPolyQ -> IO CString
foreign import ccall "fmpz_poly_q.h fmpz_poly_q_get_str_pretty"
fmpz_poly_q_get_str_pretty :: Ptr CFmpzPolyQ -> CString -> IO CString
fmpz_poly_q_print :: Ptr CFmpzPolyQ -> IO CInt
fmpz_poly_q_print :: Ptr CFmpzPolyQ -> IO CInt
fmpz_poly_q_print Ptr CFmpzPolyQ
op = forall a. (Ptr a -> IO CString) -> Ptr a -> IO CInt
printCStr Ptr CFmpzPolyQ -> IO CString
fmpz_poly_q_get_str Ptr CFmpzPolyQ
op
fmpz_poly_q_print_pretty :: Ptr CFmpzPolyQ -> CString -> IO CInt
fmpz_poly_q_print_pretty :: Ptr CFmpzPolyQ -> CString -> IO CInt
fmpz_poly_q_print_pretty Ptr CFmpzPolyQ
op CString
x =
forall a. (Ptr a -> IO CString) -> Ptr a -> IO CInt
printCStr (Ptr CFmpzPolyQ -> CString -> IO CString
`fmpz_poly_q_get_str_pretty` CString
x) Ptr CFmpzPolyQ
op