summaryrefslogtreecommitdiff
path: root/packages/base/src/Internal/Matrix.hs
diff options
context:
space:
mode:
authorAlberto Ruiz <aruiz@um.es>2015-06-13 19:18:16 +0200
committerAlberto Ruiz <aruiz@um.es>2015-06-13 19:18:16 +0200
commit717c680a4b65a2226b0dd6fc13f7c63e7bc0431d (patch)
tree1775c3c363a0b61f5f6a6ec1f22fe9b7d5864dc4 /packages/base/src/Internal/Matrix.hs
parent4b3e29097aa272d429f8005fe17b459cf0c049c8 (diff)
setRect, general luPacked' based on luST
Diffstat (limited to 'packages/base/src/Internal/Matrix.hs')
-rw-r--r--packages/base/src/Internal/Matrix.hs20
1 files changed, 20 insertions, 0 deletions
diff --git a/packages/base/src/Internal/Matrix.hs b/packages/base/src/Internal/Matrix.hs
index fa1aad6..e0f5ed2 100644
--- a/packages/base/src/Internal/Matrix.hs
+++ b/packages/base/src/Internal/Matrix.hs
@@ -275,6 +275,7 @@ class (Storable a) => Element a where
275 transdata :: Int -> Vector a -> Int -> Vector a 275 transdata :: Int -> Vector a -> Int -> Vector a
276 constantD :: a -> Int -> Vector a 276 constantD :: a -> Int -> Vector a
277 extractR :: Matrix a -> CInt -> Vector CInt -> CInt -> Vector CInt -> IO (Matrix a) 277 extractR :: Matrix a -> CInt -> Vector CInt -> CInt -> Vector CInt -> IO (Matrix a)
278 setRect :: Int -> Int -> Matrix a -> Matrix a -> IO ()
278 sortI :: Ord a => Vector a -> Vector CInt 279 sortI :: Ord a => Vector a -> Vector CInt
279 sortV :: Ord a => Vector a -> Vector a 280 sortV :: Ord a => Vector a -> Vector a
280 compareV :: Ord a => Vector a -> Vector a -> Vector CInt 281 compareV :: Ord a => Vector a -> Vector a -> Vector CInt
@@ -287,6 +288,7 @@ instance Element Float where
287 transdata = transdataAux ctransF 288 transdata = transdataAux ctransF
288 constantD = constantAux cconstantF 289 constantD = constantAux cconstantF
289 extractR = extractAux c_extractF 290 extractR = extractAux c_extractF
291 setRect = setRectAux c_setRectF
290 sortI = sortIdxF 292 sortI = sortIdxF
291 sortV = sortValF 293 sortV = sortValF
292 compareV = compareF 294 compareV = compareF
@@ -298,6 +300,7 @@ instance Element Double where
298 transdata = transdataAux ctransR 300 transdata = transdataAux ctransR
299 constantD = constantAux cconstantR 301 constantD = constantAux cconstantR
300 extractR = extractAux c_extractD 302 extractR = extractAux c_extractD
303 setRect = setRectAux c_setRectD
301 sortI = sortIdxD 304 sortI = sortIdxD
302 sortV = sortValD 305 sortV = sortValD
303 compareV = compareD 306 compareV = compareD
@@ -310,6 +313,7 @@ instance Element (Complex Float) where
310 transdata = transdataAux ctransQ 313 transdata = transdataAux ctransQ
311 constantD = constantAux cconstantQ 314 constantD = constantAux cconstantQ
312 extractR = extractAux c_extractQ 315 extractR = extractAux c_extractQ
316 setRect = setRectAux c_setRectQ
313 sortI = undefined 317 sortI = undefined
314 sortV = undefined 318 sortV = undefined
315 compareV = undefined 319 compareV = undefined
@@ -322,6 +326,7 @@ instance Element (Complex Double) where
322 transdata = transdataAux ctransC 326 transdata = transdataAux ctransC
323 constantD = constantAux cconstantC 327 constantD = constantAux cconstantC
324 extractR = extractAux c_extractC 328 extractR = extractAux c_extractC
329 setRect = setRectAux c_setRectC
325 sortI = undefined 330 sortI = undefined
326 sortV = undefined 331 sortV = undefined
327 compareV = undefined 332 compareV = undefined
@@ -333,6 +338,7 @@ instance Element (CInt) where
333 transdata = transdataAux ctransI 338 transdata = transdataAux ctransI
334 constantD = constantAux cconstantI 339 constantD = constantAux cconstantI
335 extractR = extractAux c_extractI 340 extractR = extractAux c_extractI
341 setRect = setRectAux c_setRectI
336 sortI = sortIdxI 342 sortI = sortIdxI
337 sortV = sortValI 343 sortV = sortValI
338 compareV = compareI 344 compareV = compareI
@@ -344,6 +350,7 @@ instance Element Z where
344 transdata = transdataAux ctransL 350 transdata = transdataAux ctransL
345 constantD = constantAux cconstantL 351 constantD = constantAux cconstantL
346 extractR = extractAux c_extractL 352 extractR = extractAux c_extractL
353 setRect = setRectAux c_setRectL
347 sortI = sortIdxL 354 sortI = sortIdxL
348 sortV = sortValL 355 sortV = sortValL
349 compareV = compareL 356 compareV = compareL
@@ -454,6 +461,19 @@ foreign import ccall unsafe "extractQ" c_extractQ :: Extr (Complex Float)
454foreign import ccall unsafe "extractI" c_extractI :: Extr CInt 461foreign import ccall unsafe "extractI" c_extractI :: Extr CInt
455foreign import ccall unsafe "extractL" c_extractL :: Extr Z 462foreign import ccall unsafe "extractL" c_extractL :: Extr Z
456 463
464---------------------------------------------------------------
465
466setRectAux f i j m r = app2 (f (fi i) (fi j)) omat m omat r "setRect"
467
468type SetRect x = I -> I -> x ::> x::> Ok
469
470foreign import ccall unsafe "setRectD" c_setRectD :: SetRect Double
471foreign import ccall unsafe "setRectF" c_setRectF :: SetRect Float
472foreign import ccall unsafe "setRectC" c_setRectC :: SetRect (Complex Double)
473foreign import ccall unsafe "setRectQ" c_setRectQ :: SetRect (Complex Float)
474foreign import ccall unsafe "setRectI" c_setRectI :: SetRect I
475foreign import ccall unsafe "setRectL" c_setRectL :: SetRect Z
476
457-------------------------------------------------------------------------------- 477--------------------------------------------------------------------------------
458 478
459sortG f v = unsafePerformIO $ do 479sortG f v = unsafePerformIO $ do