{-# 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 <- IO (ForeignPtr CFmpzPolyQ)
forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
ForeignPtr CFmpzPolyQ -> (Ptr CFmpzPolyQ -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpzPolyQ
x Ptr CFmpzPolyQ -> IO ()
fmpz_poly_q_init
FinalizerPtr CFmpzPolyQ -> ForeignPtr CFmpzPolyQ -> IO ()
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FinalizerPtr CFmpzPolyQ
p_fmpz_poly_q_clear ForeignPtr CFmpzPolyQ
x
FmpzPolyQ -> IO FmpzPolyQ
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (FmpzPolyQ -> IO FmpzPolyQ) -> FmpzPolyQ -> IO FmpzPolyQ
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
ForeignPtr CFmpzPolyQ
-> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, a)) -> IO (FmpzPolyQ, a)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpzPolyQ
x ((Ptr CFmpzPolyQ -> IO (FmpzPolyQ, a)) -> IO (FmpzPolyQ, a))
-> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, a)) -> IO (FmpzPolyQ, a)
forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzPolyQ
xp -> (ForeignPtr CFmpzPolyQ -> FmpzPolyQ
FmpzPolyQ ForeignPtr CFmpzPolyQ
x,) (a -> (FmpzPolyQ, a)) -> IO a -> IO (FmpzPolyQ, a)
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
FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a)
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) <- FmpzPolyQ
-> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, t))
-> IO (FmpzPolyQ, (FmpzPolyQ, t))
forall {a}.
FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a)
withFmpzPolyQ FmpzPolyQ
x ((Ptr CFmpzPolyQ -> IO (FmpzPolyQ, t))
-> IO (FmpzPolyQ, (FmpzPolyQ, t)))
-> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, t))
-> IO (FmpzPolyQ, (FmpzPolyQ, t))
forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzPolyQ
xp -> do
CFmpzPolyQ Ptr CFmpzPoly
n Ptr CFmpzPoly
d <- Ptr CFmpzPolyQ -> IO CFmpzPolyQ
forall a. Storable a => Ptr a -> IO a
peek Ptr CFmpzPolyQ
xp
(FmpzPolyQ
x,) (t -> (FmpzPolyQ, t)) -> IO t -> IO (FmpzPolyQ, t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFmpzPoly -> IO t
f Ptr CFmpzPoly
n
(FmpzPolyQ, t) -> IO (FmpzPolyQ, t)
forall a. a -> IO a
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) <- FmpzPolyQ
-> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, t))
-> IO (FmpzPolyQ, (FmpzPolyQ, t))
forall {a}.
FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a)
withFmpzPolyQ FmpzPolyQ
x ((Ptr CFmpzPolyQ -> IO (FmpzPolyQ, t))
-> IO (FmpzPolyQ, (FmpzPolyQ, t)))
-> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, t))
-> IO (FmpzPolyQ, (FmpzPolyQ, t))
forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzPolyQ
xp -> do
CFmpzPolyQ Ptr CFmpzPoly
n Ptr CFmpzPoly
d <- Ptr CFmpzPolyQ -> IO CFmpzPolyQ
forall a. Storable a => Ptr a -> IO a
peek Ptr CFmpzPolyQ
xp
(FmpzPolyQ
x,) (t -> (FmpzPolyQ, t)) -> IO t -> IO (FmpzPolyQ, t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFmpzPoly -> IO t
f Ptr CFmpzPoly
d
(FmpzPolyQ, t) -> IO (FmpzPolyQ, t)
forall a. a -> IO a
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 = (Ptr CFmpzPolyQ -> IO CString) -> Ptr CFmpzPolyQ -> IO CInt
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 =
(Ptr CFmpzPolyQ -> IO CString) -> Ptr CFmpzPolyQ -> IO CInt
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