diff options
Diffstat (limited to 'lib/Data/Packed/Internal/Matrix.hs')
-rw-r--r-- | lib/Data/Packed/Internal/Matrix.hs | 24 |
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 @@ | |||
18 | module Data.Packed.Internal.Matrix( | 18 | module 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 | |||
115 | fmat MC {irows = r, icols = c, cdat = d } = MF {irows = r, icols = c, fdat = transdata c d r} | 115 | fmat 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 |
118 | mat :: Adapt (CInt -> CInt -> Ptr t -> r) (Matrix t) r | 118 | -- mat :: Adapt (CInt -> CInt -> Ptr t -> r) (Matrix t) r |
119 | mat = withMatrix | ||
120 | 119 | ||
121 | withMatrix a f = | 120 | mat :: (Storable t) => Matrix t -> (((CInt -> CInt -> Ptr t -> t1) -> t1) -> IO b) -> IO b |
122 | withForeignPtr (fptr (xdat a)) $ \p -> do | 121 | mat 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 | ||
315 | constant' v n = unsafePerformIO $ do | 315 | constant' 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 | ||
353 | subMatrix'' (r0,c0) (rt,ct) c v = unsafePerformIO $ do | 353 | subMatrix'' (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) |