{-# LINE 1 "src/Data/Number/Flint/Fmpz/MPoly/Q/FFI.hsc" #-}
module Data.Number.Flint.Fmpz.MPoly.Q.FFI (
FmpzMPolyQ (..)
, CFmpzMPolyQ (..)
, newFmpzMPolyQ
, withFmpzMPolyQ
, withFmpzMPolyQNumerator
, withFmpzMPolyQDenominator
, fmpz_mpoly_q_init
, fmpz_mpoly_q_clear
, fmpz_mpoly_q_swap
, fmpz_mpoly_q_set
, fmpz_mpoly_q_canonicalise
, fmpz_mpoly_q_is_canonical
, fmpz_mpoly_q_is_zero
, fmpz_mpoly_q_is_one
, fmpz_mpoly_q_used_vars
, fmpz_mpoly_q_zero
, fmpz_mpoly_q_one
, fmpz_mpoly_q_gen
, fmpz_mpoly_q_get_str_pretty
, fmpz_mpoly_q_fprint_pretty
, fmpz_mpoly_q_print_pretty
, fmpz_mpoly_q_randtest
, fmpz_mpoly_q_equal
, fmpz_mpoly_q_neg
, fmpz_mpoly_q_add
, fmpz_mpoly_q_sub
, fmpz_mpoly_q_mul
, fmpz_mpoly_q_div
, fmpz_mpoly_q_inv
, _fmpz_mpoly_q_content
) where
import System.IO.Unsafe
import Control.Monad
import Foreign.C.String
import Foreign.C.Types
import Foreign.ForeignPtr
import Foreign.Ptr ( Ptr, FunPtr, plusPtr, nullPtr, castPtr )
import Foreign.Storable
import Foreign.Marshal ( free )
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.Fmpz.MPoly
data FmpzMPolyQ = FmpzMPolyQ {-# UNPACK #-} !(ForeignPtr CFmpzMPolyQ)
data CFmpzMPolyQ = CFmpzMPolyQ CFmpzMPoly CFmpzMPoly
instance Storable CFmpzMPolyQ where
{-# INLINE sizeOf #-}
sizeOf :: CFmpzMPolyQ -> Int
sizeOf CFmpzMPolyQ
_ = (Int
80)
{-# LINE 84 "src/Data/Number/Flint/Fmpz/MPoly/Q/FFI.hsc" #-}
{-# INLINE alignment #-}
alignment :: CFmpzMPolyQ -> Int
alignment CFmpzMPolyQ
_ = Int
8
{-# LINE 86 "src/Data/Number/Flint/Fmpz/MPoly/Q/FFI.hsc" #-}
peek ptr = CFmpzMPolyQ
<$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 88 "src/Data/Number/Flint/Fmpz/MPoly/Q/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr
{-# LINE 89 "src/Data/Number/Flint/Fmpz/MPoly/Q/FFI.hsc" #-}
poke ptr (CFmpzMPolyQ num den) = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr num
{-# LINE 91 "src/Data/Number/Flint/Fmpz/MPoly/Q/FFI.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 40) ptr den
{-# LINE 92 "src/Data/Number/Flint/Fmpz/MPoly/Q/FFI.hsc" #-}
newFmpzMPolyQ :: FmpzMPolyCtx -> IO FmpzMPolyQ
newFmpzMPolyQ ctx :: FmpzMPolyCtx
ctx@(FmpzMPolyCtx ForeignPtr CFmpzMPolyCtx
pctx) = do
ForeignPtr CFmpzMPolyQ
p <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpzMPolyQ
p forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzMPolyQ
p ->
forall {a}.
FmpzMPolyCtx -> (Ptr CFmpzMPolyCtx -> IO a) -> IO (FmpzMPolyCtx, a)
withFmpzMPolyCtx FmpzMPolyCtx
ctx forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzMPolyCtx
ctx -> do
Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
fmpz_mpoly_q_init Ptr CFmpzMPolyQ
p Ptr CFmpzMPolyCtx
ctx
forall env a.
FinalizerEnvPtr env a -> Ptr env -> ForeignPtr a -> IO ()
addForeignPtrFinalizerEnv FunPtr (Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ())
p_fmpz_mpoly_q_clear Ptr CFmpzMPolyQ
p ForeignPtr CFmpzMPolyCtx
pctx
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CFmpzMPolyQ -> FmpzMPolyQ
FmpzMPolyQ ForeignPtr CFmpzMPolyQ
p
{-# INLINE withFmpzMPolyQ #-}
withFmpzMPolyQ :: FmpzMPolyQ -> (Ptr CFmpzMPolyQ -> IO a) -> IO (FmpzMPolyQ, a)
withFmpzMPolyQ (FmpzMPolyQ ForeignPtr CFmpzMPolyQ
p) Ptr CFmpzMPolyQ -> IO a
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpzMPolyQ
p forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzMPolyQ
fp -> (ForeignPtr CFmpzMPolyQ -> FmpzMPolyQ
FmpzMPolyQ ForeignPtr CFmpzMPolyQ
p,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFmpzMPolyQ -> IO a
f Ptr CFmpzMPolyQ
fp
withFmpzMPolyQNumerator ::
FmpzMPolyQ -> (Ptr CFmpzMPoly -> IO t) -> IO (FmpzMPolyQ, t)
withFmpzMPolyQNumerator :: forall t.
FmpzMPolyQ -> (Ptr CFmpzMPoly -> IO t) -> IO (FmpzMPolyQ, t)
withFmpzMPolyQNumerator (FmpzMPolyQ ForeignPtr CFmpzMPolyQ
p) Ptr CFmpzMPoly -> IO t
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpzMPolyQ
p forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzMPolyQ
fp -> (ForeignPtr CFmpzMPolyQ -> FmpzMPolyQ
FmpzMPolyQ ForeignPtr CFmpzMPolyQ
p,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFmpzMPoly -> IO t
f (forall a b. Ptr a -> Ptr b
castPtr Ptr CFmpzMPolyQ
fp)
withFmpzMPolyQDenominator ::
FmpzMPolyQ -> (Ptr CFmpzMPoly -> IO t) -> IO (FmpzMPolyQ, t)
withFmpzMPolyQDenominator :: forall t.
FmpzMPolyQ -> (Ptr CFmpzMPoly -> IO t) -> IO (FmpzMPolyQ, t)
withFmpzMPolyQDenominator (FmpzMPolyQ ForeignPtr CFmpzMPolyQ
p) Ptr CFmpzMPoly -> IO t
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpzMPolyQ
p forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzMPolyQ
fp -> (ForeignPtr CFmpzMPolyQ -> FmpzMPolyQ
FmpzMPolyQ ForeignPtr CFmpzMPolyQ
p,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFmpzMPoly -> IO t
f (forall a b. Ptr a -> Ptr b
castPtr Ptr CFmpzMPolyQ
fp forall a. Storable a => Ptr a -> Int -> Ptr a
`advancePtr` Int
1)
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_init"
fmpz_mpoly_q_init :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_clear"
fmpz_mpoly_q_clear :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h &fmpz_mpoly_q_clear"
p_fmpz_mpoly_q_clear :: FunPtr (Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ())
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_swap"
fmpz_mpoly_q_swap :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_set"
fmpz_mpoly_q_set :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_canonicalise"
fmpz_mpoly_q_canonicalise :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_is_canonical"
fmpz_mpoly_q_is_canonical :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO CInt
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_is_zero"
fmpz_mpoly_q_is_zero :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO CInt
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_is_one"
fmpz_mpoly_q_is_one :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO CInt
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_used_vars"
fmpz_mpoly_q_used_vars :: Ptr CInt -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_zero"
fmpz_mpoly_q_zero :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_one"
fmpz_mpoly_q_one :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_gen"
fmpz_mpoly_q_gen :: Ptr CFmpzMPolyQ -> CLong -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_get_str_pretty"
fmpz_mpoly_q_get_str_pretty :: Ptr CFmpzMPolyQ -> Ptr (Ptr CChar) -> Ptr CFmpzMPolyCtx -> IO CString
fmpz_mpoly_q_print_pretty :: Ptr CFmpzMPolyQ -> Ptr (Ptr CChar) -> Ptr CFmpzMPolyCtx -> IO CInt
fmpz_mpoly_q_print_pretty :: Ptr CFmpzMPolyQ -> Ptr (Ptr CChar) -> Ptr CFmpzMPolyCtx -> IO CInt
fmpz_mpoly_q_print_pretty Ptr CFmpzMPolyQ
x Ptr (Ptr CChar)
vars Ptr CFmpzMPolyCtx
ctx = do
forall a. (Ptr a -> IO (Ptr CChar)) -> Ptr a -> IO CInt
printCStr (\Ptr CFmpzMPolyQ
x -> Ptr CFmpzMPolyQ
-> Ptr (Ptr CChar) -> Ptr CFmpzMPolyCtx -> IO (Ptr CChar)
fmpz_mpoly_q_get_str_pretty Ptr CFmpzMPolyQ
x Ptr (Ptr CChar)
vars Ptr CFmpzMPolyCtx
ctx) Ptr CFmpzMPolyQ
x
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_fprint_pretty"
fmpz_mpoly_q_fprint_pretty :: Ptr CFile -> Ptr CFmpzMPolyQ -> Ptr (Ptr CChar) -> Ptr CFmpzMPolyCtx -> IO CInt
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_randtest"
fmpz_mpoly_q_randtest :: Ptr CFmpzMPolyQ -> Ptr CFRandState -> CLong -> CMpLimb -> CLong -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_equal"
fmpz_mpoly_q_equal :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO CInt
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_neg"
fmpz_mpoly_q_neg :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_add"
fmpz_mpoly_q_add :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_sub"
fmpz_mpoly_q_sub :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_mul"
fmpz_mpoly_q_mul :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_div"
fmpz_mpoly_q_div :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h fmpz_mpoly_q_inv"
fmpz_mpoly_q_inv :: Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyQ -> Ptr CFmpzMPolyCtx -> IO ()
foreign import ccall "fmpz_mpoly_q.h _fmpz_mpoly_q_content"
_fmpz_mpoly_q_content :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzMPoly -> Ptr CFmpzMPoly -> Ptr CFmpzMPolyCtx -> IO ()