{-# LINE 1 "src/Data/Number/Flint/Fmpz/Mod/MPoly/Factor/FFI.hsc" #-}
module Data.Number.Flint.Fmpz.Mod.MPoly.Factor.FFI (
FmpzModMPolyFactor (..)
, CFmpzModMPolyFactor (..)
, newFmpzModMPolyFactor
, withFmpzModMPolyFactor
, fmpz_mod_mpoly_factor_init
, fmpz_mod_mpoly_factor_clear
, fmpz_mod_mpoly_factor_swap
, fmpz_mod_mpoly_factor_length
, fmpz_mod_mpoly_factor_get_constant_fmpz
, fmpz_mod_mpoly_factor_get_base
, fmpz_mod_mpoly_factor_swap_base
, fmpz_mod_mpoly_factor_get_exp_si
, fmpz_mod_mpoly_factor_sort
, fmpz_mod_mpoly_factor_squarefree
, fmpz_mod_mpoly_factor
) where
import Control.Monad
import Foreign.C.String
import Foreign.C.Types
import Foreign.ForeignPtr
import Foreign.Ptr ( Ptr, FunPtr, nullPtr, plusPtr )
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.Fmpq
import Data.Number.Flint.MPoly
import Data.Number.Flint.Fmpz.Mod
import Data.Number.Flint.Fmpz.Mod.MPoly
data FmpzModMPolyFactor = FmpzModMPolyFactor {-# UNPACK #-} !(ForeignPtr CFmpzModMPolyFactor)
data CFmpzModMPolyFactor = CFmpzModMPolyFactor
instance Storable CFmpzModMPolyFactor where
{-# INLINE sizeOf #-}
sizeOf :: CFmpzModMPolyFactor -> Int
sizeOf CFmpzModMPolyFactor
_ = (Int
40)
{-# LINE 61 "src/Data/Number/Flint/Fmpz/Mod/MPoly/Factor/FFI.hsc" #-}
{-# INLINE alignment #-}
alignment :: CFmpzModMPolyFactor -> Int
alignment CFmpzModMPolyFactor
_ = Int
8
{-# LINE 63 "src/Data/Number/Flint/Fmpz/Mod/MPoly/Factor/FFI.hsc" #-}
peek = error "CFmpzModMPolyFactor.peek: Not defined"
poke :: Ptr CFmpzModMPolyFactor -> CFmpzModMPolyFactor -> IO ()
poke = [Char] -> Ptr CFmpzModMPolyFactor -> CFmpzModMPolyFactor -> IO ()
forall a. HasCallStack => [Char] -> a
error [Char]
"CFmpzModMPolyFactor.poke: Not defined"
newFmpzModMPolyFactor :: FmpzModMPolyCtx -> IO FmpzModMPolyFactor
newFmpzModMPolyFactor ctx :: FmpzModMPolyCtx
ctx@(FmpzModMPolyCtx ForeignPtr CFmpzModMPolyCtx
pctx) = do
ForeignPtr CFmpzModMPolyFactor
p <- IO (ForeignPtr CFmpzModMPolyFactor)
forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
ForeignPtr CFmpzModMPolyFactor
-> (Ptr CFmpzModMPolyFactor -> IO (FmpzModMPolyCtx, ()))
-> IO (FmpzModMPolyCtx, ())
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpzModMPolyFactor
p ((Ptr CFmpzModMPolyFactor -> IO (FmpzModMPolyCtx, ()))
-> IO (FmpzModMPolyCtx, ()))
-> (Ptr CFmpzModMPolyFactor -> IO (FmpzModMPolyCtx, ()))
-> IO (FmpzModMPolyCtx, ())
forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzModMPolyFactor
p ->
FmpzModMPolyCtx
-> (Ptr CFmpzModMPolyCtx -> IO ()) -> IO (FmpzModMPolyCtx, ())
forall {a}.
FmpzModMPolyCtx
-> (Ptr CFmpzModMPolyCtx -> IO a) -> IO (FmpzModMPolyCtx, a)
withFmpzModMPolyCtx FmpzModMPolyCtx
ctx ((Ptr CFmpzModMPolyCtx -> IO ()) -> IO (FmpzModMPolyCtx, ()))
-> (Ptr CFmpzModMPolyCtx -> IO ()) -> IO (FmpzModMPolyCtx, ())
forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzModMPolyCtx
ctx -> do
Ptr CFmpzModMPolyFactor -> Ptr CFmpzModMPolyCtx -> IO ()
fmpz_mod_mpoly_factor_init Ptr CFmpzModMPolyFactor
p Ptr CFmpzModMPolyCtx
ctx
FinalizerEnvPtr CFmpzModMPolyFactor CFmpzModMPolyCtx
-> Ptr CFmpzModMPolyFactor -> ForeignPtr CFmpzModMPolyCtx -> IO ()
forall env a.
FinalizerEnvPtr env a -> Ptr env -> ForeignPtr a -> IO ()
addForeignPtrFinalizerEnv FinalizerEnvPtr CFmpzModMPolyFactor CFmpzModMPolyCtx
p_fmpz_mod_mpoly_factor_clear Ptr CFmpzModMPolyFactor
p ForeignPtr CFmpzModMPolyCtx
pctx
FmpzModMPolyFactor -> IO FmpzModMPolyFactor
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (FmpzModMPolyFactor -> IO FmpzModMPolyFactor)
-> FmpzModMPolyFactor -> IO FmpzModMPolyFactor
forall a b. (a -> b) -> a -> b
$ ForeignPtr CFmpzModMPolyFactor -> FmpzModMPolyFactor
FmpzModMPolyFactor ForeignPtr CFmpzModMPolyFactor
p
{-# INLINE withFmpzModMPolyFactor #-}
withFmpzModMPolyFactor :: FmpzModMPolyFactor
-> (Ptr CFmpzModMPolyFactor -> IO a) -> IO (FmpzModMPolyFactor, a)
withFmpzModMPolyFactor (FmpzModMPolyFactor ForeignPtr CFmpzModMPolyFactor
p) Ptr CFmpzModMPolyFactor -> IO a
f = do
ForeignPtr CFmpzModMPolyFactor
-> (Ptr CFmpzModMPolyFactor -> IO (FmpzModMPolyFactor, a))
-> IO (FmpzModMPolyFactor, a)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpzModMPolyFactor
p ((Ptr CFmpzModMPolyFactor -> IO (FmpzModMPolyFactor, a))
-> IO (FmpzModMPolyFactor, a))
-> (Ptr CFmpzModMPolyFactor -> IO (FmpzModMPolyFactor, a))
-> IO (FmpzModMPolyFactor, a)
forall a b. (a -> b) -> a -> b
$ \Ptr CFmpzModMPolyFactor
fp -> (ForeignPtr CFmpzModMPolyFactor -> FmpzModMPolyFactor
FmpzModMPolyFactor ForeignPtr CFmpzModMPolyFactor
p,) (a -> (FmpzModMPolyFactor, a))
-> IO a -> IO (FmpzModMPolyFactor, a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFmpzModMPolyFactor -> IO a
f Ptr CFmpzModMPolyFactor
fp
foreign import ccall "fmpz_mod_mpoly_factor.h fmpz_mod_mpoly_factor_init"
fmpz_mod_mpoly_factor_init :: Ptr CFmpzModMPolyFactor -> Ptr CFmpzModMPolyCtx -> IO ()
foreign import ccall "fmpz_mod_mpoly_factor.h fmpz_mod_mpoly_factor_clear"
fmpz_mod_mpoly_factor_clear :: Ptr CFmpzModMPolyFactor -> Ptr CFmpzModMPolyCtx -> IO ()
foreign import ccall "fmpz_mod_mpoly_factor.h &fmpz_mod_mpoly_factor_clear"
p_fmpz_mod_mpoly_factor_clear :: FunPtr (Ptr CFmpzModMPolyFactor -> Ptr CFmpzModMPolyCtx -> IO ())
foreign import ccall "fmpz_mod_mpoly_factor.h fmpz_mod_mpoly_factor_swap"
fmpz_mod_mpoly_factor_swap :: Ptr CFmpzModMPolyFactor -> Ptr CFmpzModMPolyFactor -> Ptr CFmpzModMPolyCtx -> IO ()
foreign import ccall "fmpz_mod_mpoly_factor.h fmpz_mod_mpoly_factor_length"
fmpz_mod_mpoly_factor_length :: Ptr CFmpzModMPolyFactor -> Ptr CFmpzModMPolyCtx -> IO CLong
foreign import ccall "fmpz_mod_mpoly_factor.h fmpz_mod_mpoly_factor_get_constant_fmpz"
fmpz_mod_mpoly_factor_get_constant_fmpz :: Ptr CFmpz -> Ptr CFmpzModMPolyFactor -> Ptr CFmpzModMPolyCtx -> IO ()
foreign import ccall "fmpz_mod_mpoly_factor.h fmpz_mod_mpoly_factor_get_base"
fmpz_mod_mpoly_factor_get_base :: Ptr CFmpzModMPoly -> Ptr CFmpzModMPolyFactor -> CLong -> Ptr CFmpzModMPolyCtx -> IO ()
foreign import ccall "fmpz_mod_mpoly_factor.h fmpz_mod_mpoly_factor_swap_base"
fmpz_mod_mpoly_factor_swap_base :: Ptr CFmpzModMPoly -> Ptr CFmpzModMPolyFactor -> CLong -> Ptr CFmpzModMPolyCtx -> IO ()
foreign import ccall "fmpz_mod_mpoly_factor.h fmpz_mod_mpoly_factor_get_exp_si"
fmpz_mod_mpoly_factor_get_exp_si :: Ptr CFmpzModMPolyFactor -> CLong -> Ptr CFmpzModMPolyCtx -> IO CLong
foreign import ccall "fmpz_mod_mpoly_factor.h fmpz_mod_mpoly_factor_sort"
fmpz_mod_mpoly_factor_sort :: Ptr CFmpzModMPolyFactor -> Ptr CFmpzModMPolyCtx -> IO ()
foreign import ccall "fmpz_mod_mpoly_factor.h fmpz_mod_mpoly_factor_squarefree"
fmpz_mod_mpoly_factor_squarefree :: Ptr CFmpzModMPolyFactor -> Ptr CFmpzModMPoly -> Ptr CFmpzModMPolyCtx -> IO CInt
foreign import ccall "fmpz_mod_mpoly_factor.h fmpz_mod_mpoly_factor"
fmpz_mod_mpoly_factor :: Ptr CFmpzModMPolyFactor -> Ptr CFmpzModMPoly -> Ptr CFmpzModMPolyCtx -> IO CInt