{-# LINE 1 "src/Data/Number/Flint/Fmpq/MPoly/Factor/FFI.hsc" #-}
module Data.Number.Flint.Fmpq.MPoly.Factor.FFI (
FmpqMPolyFactor (..)
, CFmpqMPolyFactor (..)
, newFmpqMPolyFactor
, withFmpqMPolyFactor
, fmpq_mpoly_factor_init
, fmpq_mpoly_factor_clear
, fmpq_mpoly_factor_length
, fmpq_mpoly_factor_get_constant_fmpq
, fmpq_mpoly_factor_get_base
, fmpq_mpoly_factor_swap_base
, fmpq_mpoly_factor_get_exp_si
, fmpq_mpoly_factor_sort
, fmpq_mpoly_factor_make_monic
, fmpq_mpoly_factor_make_integral
, fmpq_mpoly_factor_squarefree
, fmpq_mpoly_factor
) 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.MPoly
import Data.Number.Flint.Fmpz
import Data.Number.Flint.Fmpz.Poly
import Data.Number.Flint.Fmpz.MPoly
import Data.Number.Flint.Fmpz.MPoly.Q
import Data.Number.Flint.Fmpq
import Data.Number.Flint.Fmpq.Poly
import Data.Number.Flint.Fmpq.MPoly
data FmpqMPolyFactor =
FmpqMPolyFactor {-# UNPACK #-} !(ForeignPtr CFmpqMPolyFactor)
data CFmpqMPolyFactor =
CFmpqMPolyFactor (Ptr CFmpq) (Ptr CFmpqMPoly)
(Ptr CFmpz) CLong CLong
instance Storable CFmpqMPolyFactor where
{-# INLINE sizeOf #-}
sizeOf :: CFmpqMPolyFactor -> Int
sizeOf CFmpqMPolyFactor
_ = (Int
48)
{-# LINE 68 "src/Data/Number/Flint/Fmpq/MPoly/Factor/FFI.hsc" #-}
{-# INLINE alignment #-}
alignment :: CFmpqMPolyFactor -> Int
alignment CFmpqMPolyFactor
_ = Int
8
{-# LINE 70 "src/Data/Number/Flint/Fmpq/MPoly/Factor/FFI.hsc" #-}
peek ptr = CFmpqMPolyFactor
<$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 72 "src/Data/Number/Flint/Fmpq/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 73 "src/Data/Number/Flint/Fmpq/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 74 "src/Data/Number/Flint/Fmpq/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
{-# LINE 75 "src/Data/Number/Flint/Fmpq/MPoly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr
{-# LINE 76 "src/Data/Number/Flint/Fmpq/MPoly/Factor/FFI.hsc" #-}
poke = error "CFmpqMPolyFactor.poke: Not defined"
newFmpqMPolyFactor :: FmpqMPolyCtx -> IO FmpqMPolyFactor
newFmpqMPolyFactor ctx :: FmpqMPolyCtx
ctx@(FmpqMPolyCtx ForeignPtr CFmpqMPolyCtx
pctx) = do
ForeignPtr CFmpqMPolyFactor
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpqMPolyFactor
x forall a b. (a -> b) -> a -> b
$ \Ptr CFmpqMPolyFactor
x -> do
forall {a}.
FmpqMPolyCtx -> (Ptr CFmpqMPolyCtx -> IO a) -> IO (FmpqMPolyCtx, a)
withFmpqMPolyCtx FmpqMPolyCtx
ctx forall a b. (a -> b) -> a -> b
$ \Ptr CFmpqMPolyCtx
ctx -> do
Ptr CFmpqMPolyFactor -> Ptr CFmpqMPolyCtx -> IO ()
fmpq_mpoly_factor_init Ptr CFmpqMPolyFactor
x Ptr CFmpqMPolyCtx
ctx
forall env a.
FinalizerEnvPtr env a -> Ptr env -> ForeignPtr a -> IO ()
addForeignPtrFinalizerEnv FunPtr (Ptr CFmpqMPolyFactor -> Ptr CFmpqMPolyCtx -> IO ())
p_fmpq_mpoly_factor_clear Ptr CFmpqMPolyFactor
x ForeignPtr CFmpqMPolyCtx
pctx
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CFmpqMPolyFactor -> FmpqMPolyFactor
FmpqMPolyFactor ForeignPtr CFmpqMPolyFactor
x
withFmpqMPolyFactor :: FmpqMPolyFactor
-> (Ptr CFmpqMPolyFactor -> IO a) -> IO (FmpqMPolyFactor, a)
withFmpqMPolyFactor (FmpqMPolyFactor ForeignPtr CFmpqMPolyFactor
p) Ptr CFmpqMPolyFactor -> IO a
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFmpqMPolyFactor
p forall a b. (a -> b) -> a -> b
$ \Ptr CFmpqMPolyFactor
fp -> Ptr CFmpqMPolyFactor -> IO a
f Ptr CFmpqMPolyFactor
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 CFmpqMPolyFactor -> FmpqMPolyFactor
FmpqMPolyFactor ForeignPtr CFmpqMPolyFactor
p,)
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor_init"
fmpq_mpoly_factor_init :: Ptr CFmpqMPolyFactor -> Ptr CFmpqMPolyCtx -> IO ()
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor_clear"
fmpq_mpoly_factor_clear :: Ptr CFmpqMPolyFactor -> Ptr CFmpqMPolyCtx -> IO ()
foreign import ccall "fmpq_mpoly_factor.h &fmpq_mpoly_factor_clear"
p_fmpq_mpoly_factor_clear :: FunPtr (Ptr CFmpqMPolyFactor -> Ptr CFmpqMPolyCtx -> IO ())
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor_length"
fmpq_mpoly_factor_length :: Ptr CFmpqMPolyFactor -> Ptr CFmpqMPolyCtx -> IO CLong
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor_get_constant_fmpq"
fmpq_mpoly_factor_get_constant_fmpq :: Ptr CFmpq -> Ptr CFmpqMPolyFactor -> Ptr CFmpqMPolyCtx -> IO ()
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor_get_base"
fmpq_mpoly_factor_get_base :: Ptr CFmpqMPoly -> Ptr CFmpqMPolyFactor -> CLong -> Ptr CFmpqMPolyCtx -> IO ()
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor_swap_base"
fmpq_mpoly_factor_swap_base :: Ptr CFmpqMPoly -> Ptr CFmpqMPolyFactor -> CLong -> Ptr CFmpqMPolyCtx -> IO ()
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor_get_exp_si"
fmpq_mpoly_factor_get_exp_si :: Ptr CFmpqMPolyFactor -> CLong -> Ptr CFmpqMPolyCtx -> IO CLong
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor_sort"
fmpq_mpoly_factor_sort :: Ptr CFmpqMPolyFactor -> Ptr CFmpqMPolyCtx -> IO ()
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor_make_monic"
fmpq_mpoly_factor_make_monic :: Ptr CFmpqMPolyFactor -> Ptr CFmpqMPolyCtx -> IO CInt
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor_make_integral"
fmpq_mpoly_factor_make_integral :: Ptr CFmpqMPolyFactor -> Ptr CFmpqMPolyCtx -> IO CInt
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor_squarefree"
fmpq_mpoly_factor_squarefree :: Ptr CFmpqMPolyFactor -> Ptr CFmpqMPoly -> Ptr CFmpqMPolyCtx -> IO CInt
foreign import ccall "fmpq_mpoly_factor.h fmpq_mpoly_factor"
fmpq_mpoly_factor :: Ptr CFmpqMPolyFactor -> Ptr CFmpqMPoly -> Ptr CFmpqMPolyCtx -> IO CInt