diff options
Diffstat (limited to 'packages/base/src/Internal/Matrix.hs')
-rw-r--r-- | packages/base/src/Internal/Matrix.hs | 20 |
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) | |||
454 | foreign import ccall unsafe "extractI" c_extractI :: Extr CInt | 461 | foreign import ccall unsafe "extractI" c_extractI :: Extr CInt |
455 | foreign import ccall unsafe "extractL" c_extractL :: Extr Z | 462 | foreign import ccall unsafe "extractL" c_extractL :: Extr Z |
456 | 463 | ||
464 | --------------------------------------------------------------- | ||
465 | |||
466 | setRectAux f i j m r = app2 (f (fi i) (fi j)) omat m omat r "setRect" | ||
467 | |||
468 | type SetRect x = I -> I -> x ::> x::> Ok | ||
469 | |||
470 | foreign import ccall unsafe "setRectD" c_setRectD :: SetRect Double | ||
471 | foreign import ccall unsafe "setRectF" c_setRectF :: SetRect Float | ||
472 | foreign import ccall unsafe "setRectC" c_setRectC :: SetRect (Complex Double) | ||
473 | foreign import ccall unsafe "setRectQ" c_setRectQ :: SetRect (Complex Float) | ||
474 | foreign import ccall unsafe "setRectI" c_setRectI :: SetRect I | ||
475 | foreign import ccall unsafe "setRectL" c_setRectL :: SetRect Z | ||
476 | |||
457 | -------------------------------------------------------------------------------- | 477 | -------------------------------------------------------------------------------- |
458 | 478 | ||
459 | sortG f v = unsafePerformIO $ do | 479 | sortG f v = unsafePerformIO $ do |