From b717b2962e962812f9562915cf317b88599e5eb4 Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Thu, 28 May 2015 11:53:40 +0200 Subject: extract using omat --- packages/base/src/C/lapack-aux.c | 19 ++++++---------- packages/base/src/Data/Packed/Internal/Matrix.hs | 28 ++++++------------------ 2 files changed, 14 insertions(+), 33 deletions(-) diff --git a/packages/base/src/C/lapack-aux.c b/packages/base/src/C/lapack-aux.c index ac03120..1402050 100644 --- a/packages/base/src/C/lapack-aux.c +++ b/packages/base/src/C/lapack-aux.c @@ -1621,12 +1621,7 @@ int chooseQ(KIVEC(cond),KQVEC(lt),KQVEC(eq),KQVEC(gt),QVEC(r)) { //////////////////////// extract ///////////////////////////////// #define EXTRACT_IMP \ - int i,j,si,sj,ni,nj,ai,aj; \ - if (tm==0) { \ - ai=mc; aj=1; \ - } else { \ - ai=1, aj=mc; \ - } \ + int i,j,si,sj,ni,nj; \ ni = modei ? in : ip[1]-ip[0]+1; \ nj = modej ? jn : jp[1]-jp[0]+1; \ \ @@ -1636,28 +1631,28 @@ int chooseQ(KIVEC(cond),KQVEC(lt),KQVEC(eq),KQVEC(gt),QVEC(r)) { for (j=0; j NFData (Matrix t) --------------------------------------------------------------- -isT Matrix{order = ColumnMajor} = 1 -isT Matrix{order = RowMajor} = 0 - -tt x@Matrix{order = ColumnMajor} = trans x -tt x@Matrix{order = RowMajor} = x - - extractAux f m moder vr modec vc = unsafePerformIO $ do let nr = if moder == 0 then fromIntegral $ vr@>1 - vr@>0 + 1 else dim vr nc = if modec == 0 then fromIntegral $ vc@>1 - vc@>0 + 1 else dim vc r <- createMatrix RowMajor nr nc - app4 (f moder modec (isT m)) vec vr vec vc mat (tt m) mat r "extractAux" + app4 (f moder modec) vec vr vec vc omat m omat r "extractAux" return r -foreign import ccall unsafe "extractD" c_extractD - :: CInt -> CInt -> CInt -> CIdxs (CIdxs (CM Double (CM Double (IO CInt)))) - -foreign import ccall unsafe "extractF" c_extractF - :: CInt -> CInt -> CInt -> CIdxs (CIdxs (CM Float (CM Float (IO CInt)))) - -foreign import ccall unsafe "extractC" c_extractC - :: CInt -> CInt -> CInt -> CIdxs (CIdxs (CM (Complex Double) (CM (Complex Double) (IO CInt)))) - -foreign import ccall unsafe "extractQ" c_extractQ - :: CInt -> CInt -> CInt -> CIdxs (CIdxs (CM (Complex Float) (CM (Complex Float) (IO CInt)))) +type Extr x = CInt -> CInt -> CIdxs (CIdxs (OM x (OM x (IO CInt)))) -foreign import ccall unsafe "extractI" c_extractI - :: CInt -> CInt -> CInt -> CIdxs (CIdxs (CM CInt (CM CInt (IO CInt)))) +foreign import ccall unsafe "extractD" c_extractD :: Extr Double +foreign import ccall unsafe "extractF" c_extractF :: Extr Float +foreign import ccall unsafe "extractC" c_extractC :: Extr (Complex Double) +foreign import ccall unsafe "extractQ" c_extractQ :: Extr (Complex Float) +foreign import ccall unsafe "extractI" c_extractI :: Extr CInt -------------------------------------------------------------------------------- -- cgit v1.2.3