{-# LINE 1 "src/Data/Number/Flint/Calcium/Ca/Vec/FFI.hsc" #-}
module Data.Number.Flint.Calcium.Ca.Vec.FFI (
CaVec (..)
, CCaVec (..)
, newCaVec
, withCaVec
, withNewCaVec
, _ca_vec_init
, ca_vec_init
, _ca_vec_clear
, ca_vec_clear
, _ca_vec_swap
, ca_vec_swap
, ca_vec_entry_ptr
, ca_vec_length
, _ca_vec_fit_length
, ca_vec_set_length
, _ca_vec_set
, ca_vec_set
, _ca_vec_zero
, ca_vec_zero
, ca_vec_print
, ca_vec_printn
, ca_vec_append
, _ca_vec_neg
, ca_vec_neg
, _ca_vec_add
, _ca_vec_sub
, _ca_vec_scalar_mul_ca
, _ca_vec_scalar_div_ca
, _ca_vec_scalar_addmul_ca
, _ca_vec_scalar_submul_ca
, _ca_vec_check_is_zero
, _ca_vec_is_fmpq_vec
, _ca_vec_fmpq_vec_is_fmpz_vec
, _ca_vec_fmpq_vec_get_fmpz_vec_den
, _ca_vec_set_fmpz_vec_div_fmpz
) where
import Foreign.Ptr
import Foreign.ForeignPtr
import Foreign.C.Types
import Foreign.Storable
import Foreign.Marshal.Array
import Data.Number.Flint.Flint
import Data.Number.Flint.Fmpz
import Data.Number.Flint.Calcium
import Data.Number.Flint.Calcium.Ca
import Data.Number.Flint.Calcium.Ca.Types
instance Storable CCaVec where
{-# INLINE sizeOf #-}
sizeOf :: CCaVec -> Int
sizeOf CCaVec
_ = (Int
24)
{-# LINE 72 "src/Data/Number/Flint/Calcium/Ca/Vec/FFI.hsc" #-}
{-# INLINE alignment #-}
alignment :: CCaVec -> Int
alignment CCaVec
_ = Int
8
{-# LINE 74 "src/Data/Number/Flint/Calcium/Ca/Vec/FFI.hsc" #-}
peek = error "CCaVec.peek: Not defined"
poke :: Ptr CCaVec -> CCaVec -> IO ()
poke = [Char] -> Ptr CCaVec -> CCaVec -> IO ()
forall a. HasCallStack => [Char] -> a
error [Char]
"CCaVec.poke: Not defined"
newCaVec :: CLong -> CaCtx -> IO CaVec
newCaVec CLong
len ctx :: CaCtx
ctx@(CaCtx ForeignPtr CCaCtx
ctxf) = do
ForeignPtr CCaVec
x <- IO (ForeignPtr CCaVec)
forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
ForeignPtr CCaVec -> (Ptr CCaVec -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CCaVec
x ((Ptr CCaVec -> IO ()) -> IO ()) -> (Ptr CCaVec -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CCaVec
x -> do
CaCtx -> (Ptr CCaCtx -> IO ()) -> IO (CaCtx, ())
forall {a}. CaCtx -> (Ptr CCaCtx -> IO a) -> IO (CaCtx, a)
withCaCtx CaCtx
ctx ((Ptr CCaCtx -> IO ()) -> IO (CaCtx, ()))
-> (Ptr CCaCtx -> IO ()) -> IO (CaCtx, ())
forall a b. (a -> b) -> a -> b
$ \Ptr CCaCtx
ctx -> do
Ptr CCaVec -> CLong -> Ptr CCaCtx -> IO ()
ca_vec_init Ptr CCaVec
x CLong
len Ptr CCaCtx
ctx
FinalizerEnvPtr CCaVec CCaCtx
-> Ptr CCaVec -> ForeignPtr CCaCtx -> IO ()
forall env a.
FinalizerEnvPtr env a -> Ptr env -> ForeignPtr a -> IO ()
addForeignPtrFinalizerEnv FinalizerEnvPtr CCaVec CCaCtx
p_ca_vec_clear Ptr CCaVec
x ForeignPtr CCaCtx
ctxf
CaVec -> IO CaVec
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (CaVec -> IO CaVec) -> CaVec -> IO CaVec
forall a b. (a -> b) -> a -> b
$ ForeignPtr CCaVec -> CaVec
CaVec ForeignPtr CCaVec
x
withCaVec :: CaVec -> (Ptr CCaVec -> IO a) -> IO (CaVec, a)
withCaVec (CaVec ForeignPtr CCaVec
x) Ptr CCaVec -> IO a
f = do
ForeignPtr CCaVec -> (Ptr CCaVec -> IO (CaVec, a)) -> IO (CaVec, a)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CCaVec
x ((Ptr CCaVec -> IO (CaVec, a)) -> IO (CaVec, a))
-> (Ptr CCaVec -> IO (CaVec, a)) -> IO (CaVec, a)
forall a b. (a -> b) -> a -> b
$ \Ptr CCaVec
px -> Ptr CCaVec -> IO a
f Ptr CCaVec
px IO a -> (a -> IO (CaVec, a)) -> IO (CaVec, a)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (CaVec, a) -> IO (CaVec, a)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ((CaVec, a) -> IO (CaVec, a))
-> (a -> (CaVec, a)) -> a -> IO (CaVec, a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ForeignPtr CCaVec -> CaVec
CaVec ForeignPtr CCaVec
x,)
withNewCaVec :: CLong -> CaCtx -> (Ptr CCaVec -> IO a) -> IO (CaCtx, (CaVec, a))
withNewCaVec CLong
len CaCtx
ctx Ptr CCaVec -> IO a
f = do
CaVec
x <- CLong -> CaCtx -> IO CaVec
newCaVec CLong
len CaCtx
ctx
CaCtx -> (Ptr CCaCtx -> IO (CaVec, a)) -> IO (CaCtx, (CaVec, a))
forall {a}. CaCtx -> (Ptr CCaCtx -> IO a) -> IO (CaCtx, a)
withCaCtx CaCtx
ctx ((Ptr CCaCtx -> IO (CaVec, a)) -> IO (CaCtx, (CaVec, a)))
-> (Ptr CCaCtx -> IO (CaVec, a)) -> IO (CaCtx, (CaVec, a))
forall a b. (a -> b) -> a -> b
$ \Ptr CCaCtx
ctx -> do
CaVec -> (Ptr CCaVec -> IO a) -> IO (CaVec, a)
forall {a}. CaVec -> (Ptr CCaVec -> IO a) -> IO (CaVec, a)
withCaVec CaVec
x ((Ptr CCaVec -> IO a) -> IO (CaVec, a))
-> (Ptr CCaVec -> IO a) -> IO (CaVec, a)
forall a b. (a -> b) -> a -> b
$ \Ptr CCaVec
x -> do
Ptr CCaVec -> IO a
f Ptr CCaVec
x
foreign import ccall "ca_vec.h _ca_vec_init"
_ca_vec_init :: CLong -> Ptr CCaCtx -> IO (Ptr CCa)
foreign import ccall "ca_vec.h ca_vec_init"
ca_vec_init :: Ptr CCaVec -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h _ca_vec_clear"
_ca_vec_clear :: Ptr CCa -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h ca_vec_clear"
ca_vec_clear :: Ptr CCaVec -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h &ca_vec_clear"
p_ca_vec_clear :: FunPtr (Ptr CCaVec -> Ptr CCaCtx -> IO ())
foreign import ccall "ca_vec.h _ca_vec_swap"
_ca_vec_swap :: Ptr CCa -> Ptr CCa -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h ca_vec_swap"
ca_vec_swap :: Ptr CCaVec -> Ptr CCaVec -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h ca_vec_length"
ca_vec_length :: Ptr CCaVec -> Ptr CCaCtx -> IO CLong
foreign import ccall "ca_vec.h _ca_vec_fit_length"
_ca_vec_fit_length :: Ptr CCaVec -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h ca_vec_set_length"
ca_vec_set_length :: Ptr CCaVec -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h ca_vec_entry_ptr"
ca_vec_entry_ptr :: Ptr CCaVec -> CLong -> Ptr CCa
foreign import ccall "ca_vec.h _ca_vec_set"
_ca_vec_set :: Ptr CCa -> Ptr CCa -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h ca_vec_set"
ca_vec_set :: Ptr CCaVec -> Ptr CCaVec -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h _ca_vec_zero"
_ca_vec_zero :: Ptr CCa -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h ca_vec_zero"
ca_vec_zero :: Ptr CCaVec -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h ca_vec_print"
ca_vec_print :: Ptr CCaVec -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h ca_vec_printn"
ca_vec_printn :: Ptr CCaVec -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h ca_vec_append"
ca_vec_append :: Ptr CCaVec -> Ptr CCa -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h _ca_vec_neg"
_ca_vec_neg :: Ptr CCa -> Ptr CCa -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h ca_vec_neg"
ca_vec_neg :: Ptr CCaVec -> Ptr CCaVec -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h _ca_vec_add"
_ca_vec_add :: Ptr CCa -> Ptr CCa -> Ptr CCa -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h _ca_vec_sub"
_ca_vec_sub :: Ptr CCa -> Ptr CCa -> Ptr CCa -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h _ca_vec_scalar_mul_ca"
_ca_vec_scalar_mul_ca :: Ptr CCa -> Ptr CCa -> CLong -> Ptr CCa -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h _ca_vec_scalar_div_ca"
_ca_vec_scalar_div_ca :: Ptr CCa -> Ptr CCa -> CLong -> Ptr CCa -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h _ca_vec_scalar_addmul_ca"
_ca_vec_scalar_addmul_ca :: Ptr CCa -> Ptr CCa -> CLong -> Ptr CCa -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h _ca_vec_scalar_submul_ca"
_ca_vec_scalar_submul_ca :: Ptr CCa -> Ptr CCa -> CLong -> Ptr CCa -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h _ca_vec_check_is_zero"
_ca_vec_check_is_zero :: Ptr CCa -> CLong -> Ptr CCaCtx -> IO (Ptr CTruth)
foreign import ccall "ca_vec.h _ca_vec_is_fmpq_vec"
_ca_vec_is_fmpq_vec :: Ptr CCa -> CLong -> Ptr CCaCtx -> IO CInt
foreign import ccall "ca_vec.h _ca_vec_fmpq_vec_is_fmpz_vec"
_ca_vec_fmpq_vec_is_fmpz_vec :: Ptr CCa -> CLong -> Ptr CCaCtx -> IO CInt
foreign import ccall "ca_vec.h _ca_vec_fmpq_vec_get_fmpz_vec_den"
_ca_vec_fmpq_vec_get_fmpz_vec_den :: Ptr CFmpz -> Ptr CFmpz -> Ptr CCa -> CLong -> Ptr CCaCtx -> IO ()
foreign import ccall "ca_vec.h _ca_vec_set_fmpz_vec_div_fmpz"
_ca_vec_set_fmpz_vec_div_fmpz :: Ptr CCa -> Ptr CFmpz -> Ptr CFmpz -> CLong -> Ptr CCaCtx -> IO ()