{-# OPTIONS_GHC -optc-DDLOG_INLINES_C #-}
{-# LINE 1 "src/Data/Number/Flint/Groups/DLog/FFI.hsc" #-}
module Data.Number.Flint.Groups.DLog.FFI (
dlog_once
, DLogPrecomp (..)
, CDLogPrecomp (..)
, newDLogPrecompN
, newDLogPrecompModpe
, newDLogPrecompP
, newDLogPrecompPE
, newDLogPrecompSmall
, withDLogPrecomp
, dlog_precomp_n_init
, dlog_precomp
, dlog_precomp_clear
, dlog_precomp_modpe_init
, dlog_precomp_p_init
, dlog_precomp_pe_init
, dlog_precomp_small_init
, dlog_vec_fill
, dlog_vec_set_not_found
, dlog_vec
, dlog_vec_add
, dlog_vec_loop
, dlog_vec_loop_add
, dlog_vec_eratos
, dlog_vec_eratos_add
, dlog_vec_sieve_add
, dlog_vec_sieve
) where
import Foreign.Ptr
import Foreign.ForeignPtr
import Foreign.C.Types
import Foreign.Storable
import Data.Number.Flint.Flint
import Data.Number.Flint.NMod
foreign import ccall "dlog.h dlog_once"
dlog_once :: CULong -> CULong -> Ptr CNMod -> CULong -> IO CULong
data DLogPrecomp = DLogPrecomp {-# UNPACK #-} !(ForeignPtr CDLogPrecomp)
type CDLogPrecomp = CFlint DLogPrecomp
instance Storable CDLogPrecomp where
sizeOf :: CDLogPrecomp -> Int
sizeOf CDLogPrecomp
_ = (Int
96)
{-# LINE 70 "src/Data/Number/Flint/Groups/DLog/FFI.hsc" #-}
alignment _ = 8
{-# LINE 71 "src/Data/Number/Flint/Groups/DLog/FFI.hsc" #-}
peek = undefined
poke :: Ptr CDLogPrecomp -> CDLogPrecomp -> IO ()
poke = forall a. HasCallStack => a
undefined
newDLogPrecompN :: CULong -> CULong -> CULong -> CULong -> IO DLogPrecomp
newDLogPrecompN CULong
a CULong
mod CULong
n CULong
num = do
ForeignPtr CDLogPrecomp
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CDLogPrecomp
x forall a b. (a -> b) -> a -> b
$ \Ptr CDLogPrecomp
x -> do
Ptr CDLogPrecomp -> CULong -> CULong -> CULong -> CULong -> IO ()
dlog_precomp_n_init Ptr CDLogPrecomp
x CULong
a CULong
mod CULong
n CULong
num
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FunPtr (Ptr CDLogPrecomp -> IO ())
p_dlog_precomp_clear ForeignPtr CDLogPrecomp
x
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CDLogPrecomp -> DLogPrecomp
DLogPrecomp ForeignPtr CDLogPrecomp
x
newDLogPrecompModpe :: CULong -> CULong -> CULong -> CULong -> CULong -> IO DLogPrecomp
newDLogPrecompModpe CULong
a CULong
p CULong
e CULong
pe CULong
num = do
ForeignPtr CDLogPrecomp
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CDLogPrecomp
x forall a b. (a -> b) -> a -> b
$ \Ptr CDLogPrecomp
x -> do
Ptr CDLogPrecomp
-> CULong -> CULong -> CULong -> CULong -> CULong -> IO ()
dlog_precomp_modpe_init Ptr CDLogPrecomp
x CULong
a CULong
p CULong
e CULong
pe CULong
num
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FunPtr (Ptr CDLogPrecomp -> IO ())
p_dlog_precomp_clear ForeignPtr CDLogPrecomp
x
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CDLogPrecomp -> DLogPrecomp
DLogPrecomp ForeignPtr CDLogPrecomp
x
newDLogPrecompP :: CULong -> CULong -> CULong -> CULong -> IO DLogPrecomp
newDLogPrecompP CULong
a CULong
mod CULong
n CULong
num = do
ForeignPtr CDLogPrecomp
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CDLogPrecomp
x forall a b. (a -> b) -> a -> b
$ \Ptr CDLogPrecomp
x -> do
Ptr CDLogPrecomp -> CULong -> CULong -> CULong -> CULong -> IO ()
dlog_precomp_p_init Ptr CDLogPrecomp
x CULong
a CULong
mod CULong
n CULong
num
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FunPtr (Ptr CDLogPrecomp -> IO ())
p_dlog_precomp_clear ForeignPtr CDLogPrecomp
x
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CDLogPrecomp -> DLogPrecomp
DLogPrecomp ForeignPtr CDLogPrecomp
x
newDLogPrecompPE :: CULong
-> CULong -> CULong -> CULong -> CULong -> CULong -> IO DLogPrecomp
newDLogPrecompPE CULong
a CULong
mod CULong
p CULong
e CULong
pe CULong
num = do
ForeignPtr CDLogPrecomp
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CDLogPrecomp
x forall a b. (a -> b) -> a -> b
$ \Ptr CDLogPrecomp
x -> do
Ptr CDLogPrecomp
-> CULong
-> CULong
-> CULong
-> CULong
-> CULong
-> CULong
-> IO ()
dlog_precomp_pe_init Ptr CDLogPrecomp
x CULong
a CULong
mod CULong
p CULong
e CULong
pe CULong
num
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FunPtr (Ptr CDLogPrecomp -> IO ())
p_dlog_precomp_clear ForeignPtr CDLogPrecomp
x
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CDLogPrecomp -> DLogPrecomp
DLogPrecomp ForeignPtr CDLogPrecomp
x
newDLogPrecompSmall :: CULong -> CULong -> CULong -> CULong -> IO DLogPrecomp
newDLogPrecompSmall CULong
a CULong
mod CULong
n CULong
num = do
ForeignPtr CDLogPrecomp
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CDLogPrecomp
x forall a b. (a -> b) -> a -> b
$ \Ptr CDLogPrecomp
x -> do
Ptr CDLogPrecomp -> CULong -> CULong -> CULong -> CULong -> IO ()
dlog_precomp_small_init Ptr CDLogPrecomp
x CULong
a CULong
mod CULong
n CULong
num
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FunPtr (Ptr CDLogPrecomp -> IO ())
p_dlog_precomp_clear ForeignPtr CDLogPrecomp
x
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CDLogPrecomp -> DLogPrecomp
DLogPrecomp ForeignPtr CDLogPrecomp
x
{-# INLINE withDLogPrecomp #-}
withDLogPrecomp :: DLogPrecomp -> (Ptr CDLogPrecomp -> IO a) -> IO (DLogPrecomp, a)
withDLogPrecomp (DLogPrecomp ForeignPtr CDLogPrecomp
x) Ptr CDLogPrecomp -> IO a
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CDLogPrecomp
x forall a b. (a -> b) -> a -> b
$ \Ptr CDLogPrecomp
px -> Ptr CDLogPrecomp -> IO a
f Ptr CDLogPrecomp
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 CDLogPrecomp -> DLogPrecomp
DLogPrecomp ForeignPtr CDLogPrecomp
x,)
foreign import ccall "dlog.h dlog_precomp_n_init"
dlog_precomp_n_init :: Ptr CDLogPrecomp
-> CULong -> CULong
-> CULong
-> CULong
-> IO ()
foreign import ccall "dlog.h dlog_precomp"
dlog_precomp :: Ptr CDLogPrecomp -> CULong -> IO CULong
foreign import ccall "dlog.h dlog_precomp_clear"
dlog_precomp_clear :: Ptr CDLogPrecomp -> IO ()
foreign import ccall "dlog.h &dlog_precomp_clear"
p_dlog_precomp_clear :: FunPtr (Ptr CDLogPrecomp -> IO ())
foreign import ccall "dlog.h dlog_precomp_modpe_init"
dlog_precomp_modpe_init :: Ptr CDLogPrecomp
-> CULong
-> CULong
-> CULong
-> CULong
-> CULong
-> IO ()
foreign import ccall "dlog.h dlog_precomp_p_init"
dlog_precomp_p_init :: Ptr CDLogPrecomp
-> CULong
-> CULong
-> CULong
-> CULong
-> IO ()
foreign import ccall "dlog.h dlog_precomp_pe_init"
dlog_precomp_pe_init :: Ptr CDLogPrecomp
-> CULong
-> CULong
-> CULong
-> CULong
-> CULong
-> CULong
-> IO ()
foreign import ccall "dlog.h dlog_precomp_small_init"
dlog_precomp_small_init :: Ptr CDLogPrecomp
-> CULong
-> CULong
-> CULong
-> CULong
-> IO ()
foreign import ccall "dlog.h dlog_vec_fill"
dlog_vec_fill :: Ptr CULong -> CULong -> CULong -> IO ()
foreign import ccall "dlog.h dlog_vec_set_not_found"
dlog_vec_set_not_found :: Ptr CULong -> CULong -> Ptr CNMod -> IO ()
foreign import ccall "dlog.h dlog_vec"
dlog_vec :: Ptr CULong -> CULong -> CULong -> CULong -> Ptr CNMod -> CULong -> Ptr CNMod -> IO ()
foreign import ccall "dlog.h dlog_vec_add"
dlog_vec_add :: Ptr CULong -> CULong -> CULong -> CULong -> Ptr CNMod -> CULong -> Ptr CNMod -> IO ()
foreign import ccall "dlog.h dlog_vec_loop"
dlog_vec_loop :: Ptr CULong -> CULong -> CULong -> CULong -> Ptr CNMod -> CULong -> Ptr CNMod -> IO ()
foreign import ccall "dlog.h dlog_vec_loop_add"
dlog_vec_loop_add :: Ptr CULong -> CULong -> CULong -> CULong -> Ptr CNMod -> CULong -> Ptr CNMod -> IO ()
foreign import ccall "dlog.h dlog_vec_eratos"
dlog_vec_eratos :: Ptr CULong -> CULong -> CULong -> CULong -> Ptr CNMod -> CULong -> Ptr CNMod -> IO ()
foreign import ccall "dlog.h dlog_vec_eratos_add"
dlog_vec_eratos_add :: Ptr CULong -> CULong -> CULong -> CULong -> Ptr CNMod -> CULong -> Ptr CNMod -> IO ()
foreign import ccall "dlog.h dlog_vec_sieve_add"
dlog_vec_sieve_add :: Ptr CULong -> CULong -> CULong -> CULong -> Ptr CNMod -> CULong -> Ptr CNMod -> IO ()
foreign import ccall "dlog.h dlog_vec_sieve"
dlog_vec_sieve :: Ptr CULong -> CULong -> CULong -> CULong -> Ptr CNMod -> CULong -> Ptr CNMod -> IO ()