{-# LINE 1 "src/Data/Number/Flint/NMod/MPoly/Factor/FFI.hsc" #-}
module Data.Number.Flint.NMod.MPoly.Factor.FFI (
NModMPolyFactor (..)
, CNModMPolyFactor (..)
, newNModMPolyFactor
, withNModMPolyFactor
, nmod_mpoly_factor_init
, nmod_mpoly_factor_clear
, nmod_mpoly_factor_swap
, nmod_mpoly_factor_length
, nmod_mpoly_factor_get_constant_ui
, nmod_mpoly_factor_get_base
, nmod_mpoly_factor_swap_base
, nmod_mpoly_factor_get_exp_si
, nmod_mpoly_factor_sort
, nmod_mpoly_factor_squarefree
, nmod_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.MPoly
import Data.Number.Flint.NMod
import Data.Number.Flint.NMod.Types
import Data.Number.Flint.NMod.MPoly
data NModMPolyFactor =
NModMPolyFactor {-# UNPACK #-} !(ForeignPtr CNModMPolyFactor)
data CNModMPolyFactor =
CNModMPolyFactor CMpLimb (Ptr CNModMPoly)
(Ptr CFmpz) CLong CLong
instance Storable CNModMPolyFactor where
{-# INLINE sizeOf #-}
sizeOf :: CNModMPolyFactor -> Int
sizeOf CNModMPolyFactor
_ = (Int
40)
{-# LINE 65 "src/Data/Number/Flint/NMod/MPoly/Factor/FFI.hsc" #-}
{-# INLINE alignment #-}
alignment :: CNModMPolyFactor -> Int
alignment CNModMPolyFactor
_ = Int
8
{-# LINE 67 "src/Data/Number/Flint/NMod/MPoly/Factor/FFI.hsc" #-}
peek ptr = CNModMPolyFactor
<$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 69 "src/Data/Number/Flint/NMod/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 70 "src/Data/Number/Flint/NMod/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 71 "src/Data/Number/Flint/NMod/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 72 "src/Data/Number/Flint/NMod/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
{-# LINE 73 "src/Data/Number/Flint/NMod/MPoly/Factor/FFI.hsc" #-}
poke = error "CNModMPolyFactor.poke: Not defined"
newNModMPolyFactor :: NModMPolyCtx -> IO NModMPolyFactor
newNModMPolyFactor ctx :: NModMPolyCtx
ctx@(NModMPolyCtx ForeignPtr CNModMPolyCtx
pctx) = do
ForeignPtr CNModMPolyFactor
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CNModMPolyFactor
x forall a b. (a -> b) -> a -> b
$ \Ptr CNModMPolyFactor
x -> do
forall {a}.
NModMPolyCtx -> (Ptr CNModMPolyCtx -> IO a) -> IO (NModMPolyCtx, a)
withNModMPolyCtx NModMPolyCtx
ctx forall a b. (a -> b) -> a -> b
$ \Ptr CNModMPolyCtx
ctx -> do
Ptr CNModMPolyFactor -> Ptr CNModMPolyCtx -> IO ()
nmod_mpoly_factor_init Ptr CNModMPolyFactor
x Ptr CNModMPolyCtx
ctx
forall env a.
FinalizerEnvPtr env a -> Ptr env -> ForeignPtr a -> IO ()
addForeignPtrFinalizerEnv FunPtr (Ptr CNModMPolyFactor -> Ptr CNModMPolyCtx -> IO ())
p_nmod_mpoly_factor_clear Ptr CNModMPolyFactor
x ForeignPtr CNModMPolyCtx
pctx
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CNModMPolyFactor -> NModMPolyFactor
NModMPolyFactor ForeignPtr CNModMPolyFactor
x
withNModMPolyFactor :: NModMPolyFactor
-> (Ptr CNModMPolyFactor -> IO a) -> IO (NModMPolyFactor, a)
withNModMPolyFactor (NModMPolyFactor ForeignPtr CNModMPolyFactor
p) Ptr CNModMPolyFactor -> IO a
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CNModMPolyFactor
p forall a b. (a -> b) -> a -> b
$ \Ptr CNModMPolyFactor
fp -> Ptr CNModMPolyFactor -> IO a
f Ptr CNModMPolyFactor
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 CNModMPolyFactor -> NModMPolyFactor
NModMPolyFactor ForeignPtr CNModMPolyFactor
p,)
foreign import ccall "nmod_mpoly_factor.h nmod_mpoly_factor_init"
nmod_mpoly_factor_init :: Ptr CNModMPolyFactor -> Ptr CNModMPolyCtx -> IO ()
foreign import ccall "nmod_mpoly_factor.h nmod_mpoly_factor_clear"
nmod_mpoly_factor_clear :: Ptr CNModMPolyFactor -> Ptr CNModMPolyCtx -> IO ()
foreign import ccall "nmod_mpoly_factor.h &nmod_mpoly_factor_clear"
p_nmod_mpoly_factor_clear :: FunPtr (Ptr CNModMPolyFactor -> Ptr CNModMPolyCtx -> IO ())
foreign import ccall "nmod_mpoly_factor.h nmod_mpoly_factor_swap"
nmod_mpoly_factor_swap :: Ptr CNModMPolyFactor -> Ptr CNModMPolyFactor -> Ptr CNModMPolyCtx -> IO ()
foreign import ccall "nmod_mpoly_factor.h nmod_mpoly_factor_length"
nmod_mpoly_factor_length :: Ptr CNModMPolyFactor -> Ptr CNModMPolyCtx -> IO CLong
foreign import ccall "nmod_mpoly_factor.h nmod_mpoly_factor_get_constant_ui"
nmod_mpoly_factor_get_constant_ui :: Ptr CNModMPolyFactor -> Ptr CNModMPolyCtx -> IO ()
foreign import ccall "nmod_mpoly_factor.h nmod_mpoly_factor_get_base"
nmod_mpoly_factor_get_base :: Ptr CNModMPoly -> Ptr CNModMPolyFactor -> CLong -> Ptr CNModMPolyCtx -> IO ()
foreign import ccall "nmod_mpoly_factor.h nmod_mpoly_factor_swap_base"
nmod_mpoly_factor_swap_base :: Ptr CNModMPoly -> Ptr CNModMPolyFactor -> CLong -> Ptr CNModMPolyCtx -> IO ()
foreign import ccall "nmod_mpoly_factor.h nmod_mpoly_factor_get_exp_si"
nmod_mpoly_factor_get_exp_si :: Ptr CNModMPolyFactor -> CLong -> Ptr CNModMPolyCtx -> IO CLong
foreign import ccall "nmod_mpoly_factor.h nmod_mpoly_factor_sort"
nmod_mpoly_factor_sort :: Ptr CNModMPolyFactor -> Ptr CNModMPolyCtx -> IO ()
foreign import ccall "nmod_mpoly_factor.h nmod_mpoly_factor_squarefree"
nmod_mpoly_factor_squarefree :: Ptr CNModMPolyFactor -> Ptr CNModMPoly -> Ptr CNModMPolyCtx -> IO CInt
foreign import ccall "nmod_mpoly_factor.h nmod_mpoly_factor"
nmod_mpoly_factor :: Ptr CNModMPolyFactor -> Ptr CNModMPoly -> Ptr CNModMPolyCtx -> IO CInt