{-# LINE 1 "src/Data/Number/Flint/NMod/Poly/Factor/FFI.hsc" #-}
module Data.Number.Flint.NMod.Poly.Factor.FFI (
NModPolyFactor (..)
, CNModPolyFactor (..)
, newNModPolyFactor
, withNModPolyFactor
, withNewNModPolyFactor
, nmod_poly_factor_init
, nmod_poly_factor_clear
, nmod_poly_factor_realloc
, nmod_poly_factor_fit_length
, nmod_poly_factor_set
, nmod_poly_factor_print
, nmod_poly_factor_print_pretty
, nmod_poly_factor_fprint
, nmod_poly_factor_fprint_pretty
, nmod_poly_factor_get_str
, nmod_poly_factor_get_str_pretty
, nmod_poly_factor_insert
, nmod_poly_factor_concat
, nmod_poly_factor_pow
, nmod_poly_remove
, nmod_poly_is_irreducible
, nmod_poly_is_irreducible_ddf
, nmod_poly_is_irreducible_rabin
, _nmod_poly_is_squarefree
, nmod_poly_is_squarefree
, nmod_poly_factor_squarefree
, nmod_poly_factor_equal_deg_prob
, nmod_poly_factor_equal_deg
, nmod_poly_factor_distinct_deg
, nmod_poly_factor_distinct_deg_threaded
, nmod_poly_factor_cantor_zassenhaus
, nmod_poly_factor_berlekamp
, nmod_poly_factor_kaltofen_shoup
, nmod_poly_factor_with_berlekamp
, nmod_poly_factor_with_cantor_zassenhaus
, nmod_poly_factor_with_kaltofen_shoup
, nmod_poly_factor
, _nmod_poly_interval_poly_worker
) where
import Foreign.C.String
import Foreign.C.Types
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.Fmpz
import Data.Number.Flint.NMod
import Data.Number.Flint.NMod.Types
import Data.Number.Flint.ThreadPool
newNModPolyFactor :: IO NModPolyFactor
newNModPolyFactor = do
ForeignPtr CNModPolyFactor
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CNModPolyFactor
x forall a b. (a -> b) -> a -> b
$ \Ptr CNModPolyFactor
x -> Ptr CNModPolyFactor -> IO ()
nmod_poly_factor_init Ptr CNModPolyFactor
x
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FunPtr (Ptr CNModPolyFactor -> IO ())
p_nmod_poly_factor_clear ForeignPtr CNModPolyFactor
x
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CNModPolyFactor -> NModPolyFactor
NModPolyFactor ForeignPtr CNModPolyFactor
x
{-# INLINE withNModPolyFactor #-}
withNModPolyFactor :: NModPolyFactor
-> (Ptr CNModPolyFactor -> IO a) -> IO (NModPolyFactor, a)
withNModPolyFactor (NModPolyFactor ForeignPtr CNModPolyFactor
x) Ptr CNModPolyFactor -> IO a
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CNModPolyFactor
x forall a b. (a -> b) -> a -> b
$ \Ptr CNModPolyFactor
px -> Ptr CNModPolyFactor -> IO a
f Ptr CNModPolyFactor
px 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 CNModPolyFactor -> NModPolyFactor
NModPolyFactor ForeignPtr CNModPolyFactor
x,)
{-# INLINE withNewNModPolyFactor #-}
withNewNModPolyFactor :: (Ptr CNModPolyFactor -> IO a) -> IO (NModPolyFactor, a)
withNewNModPolyFactor Ptr CNModPolyFactor -> IO a
f = do
NModPolyFactor
x <- IO NModPolyFactor
newNModPolyFactor
forall {a}.
NModPolyFactor
-> (Ptr CNModPolyFactor -> IO a) -> IO (NModPolyFactor, a)
withNModPolyFactor NModPolyFactor
x forall a b. (a -> b) -> a -> b
$ \Ptr CNModPolyFactor
x -> Ptr CNModPolyFactor -> IO a
f Ptr CNModPolyFactor
x
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_init"
nmod_poly_factor_init :: Ptr CNModPolyFactor -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_clear"
nmod_poly_factor_clear :: Ptr CNModPolyFactor -> IO ()
foreign import ccall "nmod_poly_factor.h &nmod_poly_factor_clear"
p_nmod_poly_factor_clear :: FunPtr (Ptr CNModPolyFactor -> IO ())
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_realloc"
nmod_poly_factor_realloc :: Ptr CNModPolyFactor -> CLong -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_fit_length"
nmod_poly_factor_fit_length :: Ptr CNModPolyFactor -> CLong -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_set"
nmod_poly_factor_set :: Ptr CNModPolyFactor -> Ptr CNModPolyFactor -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_get_str"
nmod_poly_factor_get_str :: Ptr CNModPolyFactor -> IO CString
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_get_str_pretty"
nmod_poly_factor_get_str_pretty :: Ptr CNModPolyFactor -> CString -> IO CString
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_fprint"
nmod_poly_factor_fprint :: Ptr CFile -> Ptr CNModPolyFactor -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_fprint_pretty"
nmod_poly_factor_fprint_pretty :: Ptr CFile -> Ptr CNModPolyFactor -> CString -> IO ()
nmod_poly_factor_print :: Ptr CNModPolyFactor -> IO ()
nmod_poly_factor_print :: Ptr CNModPolyFactor -> IO ()
nmod_poly_factor_print Ptr CNModPolyFactor
fac = do
forall a. (Ptr a -> IO CString) -> Ptr a -> IO CInt
printCStr Ptr CNModPolyFactor -> IO CString
nmod_poly_factor_get_str Ptr CNModPolyFactor
fac
forall (m :: * -> *) a. Monad m => a -> m a
return ()
nmod_poly_factor_print_pretty :: Ptr CNModPolyFactor -> CString -> IO ()
nmod_poly_factor_print_pretty :: Ptr CNModPolyFactor -> CString -> IO ()
nmod_poly_factor_print_pretty Ptr CNModPolyFactor
fac CString
x = do
forall a. (Ptr a -> IO CString) -> Ptr a -> IO CInt
printCStr (\Ptr CNModPolyFactor
fac -> Ptr CNModPolyFactor -> CString -> IO CString
nmod_poly_factor_get_str_pretty Ptr CNModPolyFactor
fac CString
x) Ptr CNModPolyFactor
fac
forall (m :: * -> *) a. Monad m => a -> m a
return ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_insert"
nmod_poly_factor_insert :: Ptr CNModPolyFactor -> Ptr CNModPoly -> CLong -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_concat"
nmod_poly_factor_concat :: Ptr CNModPolyFactor -> Ptr CNModPolyFactor -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_pow"
nmod_poly_factor_pow :: Ptr CNModPolyFactor -> CLong -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_remove"
nmod_poly_remove :: Ptr CNModPoly -> Ptr CNModPoly -> IO CULong
foreign import ccall "nmod_poly_factor.h nmod_poly_is_irreducible"
nmod_poly_is_irreducible :: Ptr CNModPoly -> IO CInt
foreign import ccall "nmod_poly_factor.h nmod_poly_is_irreducible_ddf"
nmod_poly_is_irreducible_ddf :: Ptr CNModPoly -> IO CInt
foreign import ccall "nmod_poly_factor.h nmod_poly_is_irreducible_rabin"
nmod_poly_is_irreducible_rabin :: Ptr CNModPoly -> IO CInt
foreign import ccall "nmod_poly_factor.h _nmod_poly_is_squarefree"
_nmod_poly_is_squarefree :: Ptr CMp -> CLong -> Ptr CNMod -> IO CInt
foreign import ccall "nmod_poly_factor.h nmod_poly_is_squarefree"
nmod_poly_is_squarefree :: Ptr CNModPoly -> IO CInt
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_squarefree"
nmod_poly_factor_squarefree :: Ptr CNModPolyFactor -> Ptr CNModPoly -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_equal_deg_prob"
nmod_poly_factor_equal_deg_prob :: Ptr CNModPoly -> Ptr CFRandState -> Ptr CNModPoly -> CLong -> IO CInt
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_equal_deg"
nmod_poly_factor_equal_deg :: Ptr CNModPolyFactor -> Ptr CNModPoly -> CLong -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_distinct_deg"
nmod_poly_factor_distinct_deg :: Ptr CNModPolyFactor -> Ptr CNModPoly -> Ptr (Ptr CLong) -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_distinct_deg_threaded"
nmod_poly_factor_distinct_deg_threaded :: Ptr CNModPolyFactor -> Ptr CNModPoly -> Ptr (Ptr CLong) -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_cantor_zassenhaus"
nmod_poly_factor_cantor_zassenhaus :: Ptr CNModPolyFactor -> Ptr CNModPoly -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_berlekamp"
nmod_poly_factor_berlekamp :: Ptr CNModPolyFactor -> Ptr CNModPoly -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_kaltofen_shoup"
nmod_poly_factor_kaltofen_shoup :: Ptr CNModPolyFactor -> Ptr CNModPoly -> IO ()
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_with_berlekamp"
nmod_poly_factor_with_berlekamp :: Ptr CNModPolyFactor -> Ptr CNModPoly -> IO CMpLimb
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_with_cantor_zassenhaus"
nmod_poly_factor_with_cantor_zassenhaus :: Ptr CNModPolyFactor -> Ptr CNModPoly -> IO CMpLimb
foreign import ccall "nmod_poly_factor.h nmod_poly_factor_with_kaltofen_shoup"
nmod_poly_factor_with_kaltofen_shoup :: Ptr CNModPolyFactor -> Ptr CNModPoly -> IO CMpLimb
foreign import ccall "nmod_poly_factor.h nmod_poly_factor"
nmod_poly_factor :: Ptr CNModPolyFactor -> Ptr CNModPoly -> IO CMpLimb
foreign import ccall "nmod_poly_factor.h _nmod_poly_interval_poly_worker"
_nmod_poly_interval_poly_worker :: Ptr () -> IO ()