{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
module Data.Array.Accelerate.Numeric.LinearAlgebra.LLVM.Native.Base
where
import Data.Array.Accelerate.Array.Sugar ( Array(..), EltRepr )
import Data.Array.Accelerate.Array.Data
import Data.Array.Accelerate.Array.Unique
import Data.Array.Accelerate.Numeric.LinearAlgebra.Type
import qualified Blas.Primitive.Types as C
encodeTranspose :: Transpose -> C.Transpose
encodeTranspose N = C.NoTrans
encodeTranspose T = C.Trans
encodeTranspose H = C.ConjTrans
withArray
:: forall sh e b. Numeric e
=> Array sh e
-> (ArrayPtrs (EltRepr e) -> IO b)
-> IO b
withArray (Array _ adata) = withArrayData (numericR::NumericR e) adata
withArrayData
:: NumericR e
-> ArrayData (EltRepr e)
-> (ArrayPtrs (EltRepr e) -> IO b)
-> IO b
withArrayData NumericRfloat32 (AD_Float ua) f = withUniqueArrayPtr ua f
withArrayData NumericRfloat64 (AD_Double ua) f = withUniqueArrayPtr ua f
withArrayData NumericRcomplex32 (AD_V2 (AD_Float ua)) f = withUniqueArrayPtr ua f
withArrayData NumericRcomplex64 (AD_V2 (AD_Double ua)) f = withUniqueArrayPtr ua f