{-# LINE 1 "src/Data/Number/Flint/Fq/NMod/MPoly/Factor/FFI.hsc" #-}
module Data.Number.Flint.Fq.NMod.MPoly.Factor.FFI (
FqNModMPolyFactor (..)
, CFqNModMPolyFactor (..)
, newFqNModMPolyFactor
, withFqNModMPolyFactor
, fq_nmod_mpoly_factor_init
, fq_nmod_mpoly_factor_clear
, fq_nmod_mpoly_factor_swap
, fq_nmod_mpoly_factor_length
, fq_nmod_mpoly_factor_get_constant_fq_nmod
, fq_nmod_mpoly_factor_get_base
, fq_nmod_mpoly_factor_swap_base
, fq_nmod_mpoly_factor_get_exp_si
, fq_nmod_mpoly_factor_sort
, fq_nmod_mpoly_factor_squarefree
, fq_nmod_mpoly_factor
) where
import Foreign.C.String
import Foreign.C.Types
import qualified Foreign.Concurrent
import Foreign.ForeignPtr
import Foreign.Ptr ( Ptr, FunPtr, plusPtr )
import Foreign.Storable
import Foreign.Marshal ( free )
import Data.Number.Flint.Flint
import Data.Number.Flint.MPoly
import Data.Number.Flint.Fmpz
import Data.Number.Flint.Fmpz.Mod.Poly
import Data.Number.Flint.NMod.Poly
import Data.Number.Flint.NMod.MPoly
import Data.Number.Flint.Fq
import Data.Number.Flint.Fq.Poly
import Data.Number.Flint.Fq.NMod
import Data.Number.Flint.Fq.NMod.MPoly
import Data.Number.Flint.Fq.NMod.Types
data FqNModMPolyFactor =
FqNModMPolyFactor {-# UNPACK #-} !(ForeignPtr CFqNModMPolyFactor)
data CFqNModMPolyFactor =
CFqNModMPolyFactor (Ptr CFqNMod) (Ptr CFqNModMPoly) (Ptr CFmpz) CLong CLong
instance Storable CFqNModMPolyFactor where
{-# INLINE sizeOf #-}
sizeOf :: CFqNModMPolyFactor -> Int
sizeOf CFqNModMPolyFactor
_ = (Int
80)
{-# LINE 69 "src/Data/Number/Flint/Fq/NMod/MPoly/Factor/FFI.hsc" #-}
{-# INLINE alignment #-}
alignment :: CFqNModMPolyFactor -> Int
alignment CFqNModMPolyFactor
_ = Int
8
{-# LINE 71 "src/Data/Number/Flint/Fq/NMod/MPoly/Factor/FFI.hsc" #-}
peek ptr = CFqNModMPolyFactor
<$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 73 "src/Data/Number/Flint/Fq/NMod/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 48) ptr
{-# LINE 74 "src/Data/Number/Flint/Fq/NMod/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 56) ptr
{-# LINE 75 "src/Data/Number/Flint/Fq/NMod/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 64) ptr
{-# LINE 76 "src/Data/Number/Flint/Fq/NMod/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 72) ptr
{-# LINE 77 "src/Data/Number/Flint/Fq/NMod/MPoly/Factor/FFI.hsc" #-}
poke = error "CFqNModMPolyFactor.poke: Not defined"
newFqNModMPolyFactor :: FqNModMPolyCtx -> IO FqNModMPolyFactor
newFqNModMPolyFactor ctx :: FqNModMPolyCtx
ctx@(FqNModMPolyCtx ForeignPtr CFqNModMPolyCtx
fctx) = do
ForeignPtr CFqNModMPolyFactor
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFqNModMPolyFactor
x forall a b. (a -> b) -> a -> b
$ \Ptr CFqNModMPolyFactor
x -> do
forall {a}.
FqNModMPolyCtx
-> (Ptr CFqNModMPolyCtx -> IO a) -> IO (FqNModMPolyCtx, a)
withFqNModMPolyCtx FqNModMPolyCtx
ctx forall a b. (a -> b) -> a -> b
$ \Ptr CFqNModMPolyCtx
ctx -> do
Ptr CFqNModMPolyFactor -> Ptr CFqNModMPolyCtx -> IO ()
fq_nmod_mpoly_factor_init Ptr CFqNModMPolyFactor
x Ptr CFqNModMPolyCtx
ctx
forall env a.
FinalizerEnvPtr env a -> Ptr env -> ForeignPtr a -> IO ()
addForeignPtrFinalizerEnv FunPtr (Ptr CFqNModMPolyFactor -> Ptr CFqNModMPolyCtx -> IO ())
p_fq_nmod_mpoly_factor_clear Ptr CFqNModMPolyFactor
x ForeignPtr CFqNModMPolyCtx
fctx
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CFqNModMPolyFactor -> FqNModMPolyFactor
FqNModMPolyFactor ForeignPtr CFqNModMPolyFactor
x
withFqNModMPolyFactor :: FqNModMPolyFactor
-> (Ptr CFqNModMPolyFactor -> IO a) -> IO (FqNModMPolyFactor, a)
withFqNModMPolyFactor (FqNModMPolyFactor ForeignPtr CFqNModMPolyFactor
p) Ptr CFqNModMPolyFactor -> IO a
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFqNModMPolyFactor
p forall a b. (a -> b) -> a -> b
$ \Ptr CFqNModMPolyFactor
fp -> Ptr CFqNModMPolyFactor -> IO a
f Ptr CFqNModMPolyFactor
fp forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ForeignPtr CFqNModMPolyFactor -> FqNModMPolyFactor
FqNModMPolyFactor ForeignPtr CFqNModMPolyFactor
p,)
foreign import ccall "fq_nmod_mpoly_factor.h fq_nmod_mpoly_factor_init"
fq_nmod_mpoly_factor_init :: Ptr CFqNModMPolyFactor -> Ptr CFqNModMPolyCtx -> IO ()
foreign import ccall "fq_nmod_mpoly_factor.h fq_nmod_mpoly_factor_clear"
fq_nmod_mpoly_factor_clear :: Ptr CFqNModMPolyFactor -> Ptr CFqNModMPolyCtx -> IO ()
foreign import ccall "fq_nmod_mpoly_factor.h &fq_nmod_mpoly_factor_clear"
p_fq_nmod_mpoly_factor_clear :: FunPtr (Ptr CFqNModMPolyFactor -> Ptr CFqNModMPolyCtx -> IO ())
foreign import ccall "fq_nmod_mpoly_factor.h fq_nmod_mpoly_factor_swap"
fq_nmod_mpoly_factor_swap :: Ptr CFqNModMPolyFactor -> Ptr CFqNModMPolyFactor -> Ptr CFqNModMPolyCtx -> IO ()
foreign import ccall "fq_nmod_mpoly_factor.h fq_nmod_mpoly_factor_length"
fq_nmod_mpoly_factor_length :: Ptr CFqNModMPolyFactor -> Ptr CFqNModMPolyCtx -> IO CLong
foreign import ccall "fq_nmod_mpoly_factor.h fq_nmod_mpoly_factor_get_constant_fq_nmod"
fq_nmod_mpoly_factor_get_constant_fq_nmod :: Ptr CFqNMod -> Ptr CFqNModMPolyFactor -> Ptr CFqNModMPolyCtx -> IO ()
foreign import ccall "fq_nmod_mpoly_factor.h fq_nmod_mpoly_factor_get_base"
fq_nmod_mpoly_factor_get_base :: Ptr CFqNModMPoly -> Ptr CFqNModMPolyFactor -> CLong -> Ptr CFqNModMPolyCtx -> IO ()
foreign import ccall "fq_nmod_mpoly_factor.h fq_nmod_mpoly_factor_swap_base"
fq_nmod_mpoly_factor_swap_base :: Ptr CFqNModMPoly -> Ptr CFqNModMPolyFactor -> CLong -> Ptr CFqNModMPolyCtx -> IO ()
foreign import ccall "fq_nmod_mpoly_factor.h fq_nmod_mpoly_factor_get_exp_si"
fq_nmod_mpoly_factor_get_exp_si :: Ptr CFqNModMPolyFactor -> CLong -> Ptr CFqNModMPolyCtx -> IO CLong
foreign import ccall "fq_nmod_mpoly_factor.h fq_nmod_mpoly_factor_sort"
fq_nmod_mpoly_factor_sort :: Ptr CFqNModMPolyFactor -> Ptr CFqNModMPolyCtx -> IO ()
foreign import ccall "fq_nmod_mpoly_factor.h fq_nmod_mpoly_factor_squarefree"
fq_nmod_mpoly_factor_squarefree :: Ptr CFqNModMPolyFactor -> Ptr CFqNModMPoly -> Ptr CFqNModMPolyCtx -> IO CInt
foreign import ccall "fq_nmod_mpoly_factor.h fq_nmod_mpoly_factor"
fq_nmod_mpoly_factor :: Ptr CFqNModMPolyFactor -> Ptr CFqNModMPoly -> Ptr CFqNModMPolyCtx -> IO CInt