From f1ee7a4ff3870a72f73d99ac923f9230f3deecf5 Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Wed, 1 Jul 2015 08:29:16 +0200 Subject: Revert "remove applyRaw" This reverts commit 89ace10b752b18cb4b9498d38344e4b0a716f575. --- packages/base/src/Internal/Devel.hs | 13 +++++++++++-- packages/base/src/Internal/Matrix.hs | 17 +++++++++++++++-- packages/base/src/Internal/Vectorized.hs | 2 +- 3 files changed, 27 insertions(+), 5 deletions(-) (limited to 'packages/base/src/Internal') diff --git a/packages/base/src/Internal/Devel.hs b/packages/base/src/Internal/Devel.hs index 89b5103..710d626 100644 --- a/packages/base/src/Internal/Devel.hs +++ b/packages/base/src/Internal/Devel.hs @@ -64,25 +64,34 @@ mbCatch act = E.catch (Just `fmap` act) f -------------------------------------------------------------------------------- +type CM b r = CInt -> CInt -> Ptr b -> r type CV b r = CInt -> Ptr b -> r type OM b r = CInt -> CInt -> CInt -> CInt -> Ptr b -> r type CIdxs r = CV CInt r type Ok = IO CInt -infixr 5 :>, ::> +infixr 5 :>, ::>, ..> type (:>) t r = CV t r type (::>) t r = OM t r +type (..>) t r = CM t r class TransArray c where type Trans c b + type TransRaw c b + type Elem c apply :: (Trans c b) -> c -> b - infixl 1 `apply` + applyRaw :: (TransRaw c b) -> c -> b + infixl 1 `apply`, `applyRaw` instance Storable t => TransArray (Vector t) where type Trans (Vector t) b = CInt -> Ptr t -> b + type TransRaw (Vector t) b = CInt -> Ptr t -> b + type Elem (Vector t) = t apply = avec {-# INLINE apply #-} + applyRaw = avec + {-# INLINE applyRaw #-} diff --git a/packages/base/src/Internal/Matrix.hs b/packages/base/src/Internal/Matrix.hs index 12ef05a..5163421 100644 --- a/packages/base/src/Internal/Matrix.hs +++ b/packages/base/src/Internal/Matrix.hs @@ -108,6 +108,14 @@ fmat m | otherwise = extractAll ColumnMajor m +-- C-Haskell matrix adapters +{-# INLINE amatr #-} +amatr :: Storable a => (CInt -> CInt -> Ptr a -> b) -> Matrix a -> b +amatr f x = inlinePerformIO (unsafeWith (xdat x) (return . f r c)) + where + r = fi (rows x) + c = fi (cols x) + {-# INLINE amat #-} amat :: Storable a => (CInt -> CInt -> CInt -> CInt -> Ptr a -> b) -> Matrix a -> b amat f x = inlinePerformIO (unsafeWith (xdat x) (return . f r c sr sc)) @@ -117,11 +125,16 @@ amat f x = inlinePerformIO (unsafeWith (xdat x) (return . f r c sr sc)) sr = fi (xRow x) sc = fi (xCol x) + instance Storable t => TransArray (Matrix t) where + type Elem (Matrix t) = t + type TransRaw (Matrix t) b = CInt -> CInt -> Ptr t -> b type Trans (Matrix t) b = CInt -> CInt -> CInt -> CInt -> Ptr t -> b apply = amat {-# INLINE apply #-} + applyRaw = amatr + {-# INLINE applyRaw #-} infixl 1 # a # b = apply a b @@ -564,7 +577,7 @@ foreign import ccall unsafe "gemm_mod_int64_t" c_gemmML :: Z -> Tgemm Z -------------------------------------------------------------------------------- foreign import ccall unsafe "saveMatrix" c_saveMatrix - :: CString -> CString -> Double ::> Ok + :: CString -> CString -> Double ..> Ok {- | save a matrix as a 2D ASCII table -} @@ -576,7 +589,7 @@ saveMatrix saveMatrix name format m = do cname <- newCString name cformat <- newCString format - c_saveMatrix cname cformat `apply` m #|"saveMatrix" + c_saveMatrix cname cformat `applyRaw` m #|"saveMatrix" free cname free cformat return () diff --git a/packages/base/src/Internal/Vectorized.hs b/packages/base/src/Internal/Vectorized.hs index a68261b..03bcf90 100644 --- a/packages/base/src/Internal/Vectorized.hs +++ b/packages/base/src/Internal/Vectorized.hs @@ -28,7 +28,7 @@ import System.IO.Unsafe(unsafePerformIO) import Control.Monad(when) infixl 1 # -a # b = apply a b +a # b = applyRaw a b {-# INLINE (#) #-} fromei x = fromIntegral (fromEnum x) :: CInt -- cgit v1.2.3