summaryrefslogtreecommitdiff
path: root/lib/Data/Packed/Internal/Matrix.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Data/Packed/Internal/Matrix.hs')
-rw-r--r--lib/Data/Packed/Internal/Matrix.hs24
1 files changed, 12 insertions, 12 deletions
diff --git a/lib/Data/Packed/Internal/Matrix.hs b/lib/Data/Packed/Internal/Matrix.hs
index a6b6215..b8e7ab0 100644
--- a/lib/Data/Packed/Internal/Matrix.hs
+++ b/lib/Data/Packed/Internal/Matrix.hs
@@ -18,7 +18,7 @@
18module Data.Packed.Internal.Matrix( 18module Data.Packed.Internal.Matrix(
19 Matrix(..), rows, cols, 19 Matrix(..), rows, cols,
20 MatrixOrder(..), orderOf, 20 MatrixOrder(..), orderOf,
21 createMatrix, withMatrix, mat, 21 createMatrix, mat,
22 cmat, fmat, 22 cmat, fmat,
23 toLists, flatten, reshape, 23 toLists, flatten, reshape,
24 Element(..), 24 Element(..),
@@ -115,11 +115,11 @@ fmat m@MF{} = m
115fmat MC {irows = r, icols = c, cdat = d } = MF {irows = r, icols = c, fdat = transdata c d r} 115fmat MC {irows = r, icols = c, cdat = d } = MF {irows = r, icols = c, fdat = transdata c d r}
116 116
117-- C-Haskell matrix adapter 117-- C-Haskell matrix adapter
118mat :: Adapt (CInt -> CInt -> Ptr t -> r) (Matrix t) r 118-- mat :: Adapt (CInt -> CInt -> Ptr t -> r) (Matrix t) r
119mat = withMatrix
120 119
121withMatrix a f = 120mat :: (Storable t) => Matrix t -> (((CInt -> CInt -> Ptr t -> t1) -> t1) -> IO b) -> IO b
122 withForeignPtr (fptr (xdat a)) $ \p -> do 121mat a f =
122 unsafeWith (xdat a) $ \p -> do
123 let m g = do 123 let m g = do
124 g (fi (rows a)) (fi (cols a)) p 124 g (fi (rows a)) (fi (cols a)) p
125 f m 125 f m
@@ -273,8 +273,8 @@ transdata' c1 v c2 =
273 then v 273 then v
274 else unsafePerformIO $ do 274 else unsafePerformIO $ do
275 w <- createVector (r2*c2) 275 w <- createVector (r2*c2)
276 withForeignPtr (fptr v) $ \p -> 276 unsafeWith v $ \p ->
277 withForeignPtr (fptr w) $ \q -> do 277 unsafeWith w $ \q -> do
278 let go (-1) _ = return () 278 let go (-1) _ = return ()
279 go !i (-1) = go (i-1) (c1-1) 279 go !i (-1) = go (i-1) (c1-1)
280 go !i !j = do x <- peekElemOff p (i*c1+j) 280 go !i !j = do x <- peekElemOff p (i*c1+j)
@@ -300,8 +300,8 @@ transdataAux fun c1 d c2 =
300 then d 300 then d
301 else unsafePerformIO $ do 301 else unsafePerformIO $ do
302 v <- createVector (dim d) 302 v <- createVector (dim d)
303 withForeignPtr (fptr d) $ \pd -> 303 unsafeWith d $ \pd ->
304 withForeignPtr (fptr v) $ \pv -> 304 unsafeWith v $ \pv ->
305 fun (fi r1) (fi c1) pd (fi r2) (fi c2) pv // check "transdataAux" 305 fun (fi r1) (fi c1) pd (fi r2) (fi c2) pv // check "transdataAux"
306 return v 306 return v
307 where r1 = dim d `div` c1 307 where r1 = dim d `div` c1
@@ -314,7 +314,7 @@ foreign import ccall "transC" ctransC :: TCMCM
314 314
315constant' v n = unsafePerformIO $ do 315constant' v n = unsafePerformIO $ do
316 w <- createVector n 316 w <- createVector n
317 withForeignPtr (fptr w) $ \p -> do 317 unsafeWith w $ \p -> do
318 let go (-1) = return () 318 let go (-1) = return ()
319 go !k = pokeElemOff p k v >> go (k-1) 319 go !k = pokeElemOff p k v >> go (k-1)
320 go (n-1) 320 go (n-1)
@@ -352,8 +352,8 @@ subMatrix (r0,c0) (rt,ct) m
352 352
353subMatrix'' (r0,c0) (rt,ct) c v = unsafePerformIO $ do 353subMatrix'' (r0,c0) (rt,ct) c v = unsafePerformIO $ do
354 w <- createVector (rt*ct) 354 w <- createVector (rt*ct)
355 withForeignPtr (fptr v) $ \p -> 355 unsafeWith v $ \p ->
356 withForeignPtr (fptr w) $ \q -> do 356 unsafeWith w $ \q -> do
357 let go (-1) _ = return () 357 let go (-1) _ = return ()
358 go !i (-1) = go (i-1) (ct-1) 358 go !i (-1) = go (i-1) (ct-1)
359 go !i !j = do x <- peekElemOff p ((i+r0)*c+j+c0) 359 go !i !j = do x <- peekElemOff p ((i+r0)*c+j+c0)