{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} -- | -- Module : Data.Array.Accelerate.Numeric.LinearAlgebra.LLVM.Native.Base -- Copyright : [2017] Trevor L. McDonell -- License : BSD3 -- -- Maintainer : Trevor L. McDonell -- Stability : experimental -- Portability : non-portable (GHC extensions) -- 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