From 6809103cf34a9345f8cb60a0ec3a8f55dd18d5ef Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Wed, 13 May 2009 09:39:25 +0000 Subject: added Development module --- examples/devel/wrappers.hs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 examples/devel/wrappers.hs (limited to 'examples/devel/wrappers.hs') diff --git a/examples/devel/wrappers.hs b/examples/devel/wrappers.hs new file mode 100644 index 0000000..f9e258a --- /dev/null +++ b/examples/devel/wrappers.hs @@ -0,0 +1,45 @@ +{-# LANGUAGE ForeignFunctionInterface #-} + +-- $ ghc -O2 --make wrappers.hs functions.c + +import Numeric.LinearAlgebra +import Data.Packed.Development +import Foreign(Ptr,unsafePerformIO) +import Foreign.C.Types(CInt) + +----------------------------------------------------- + +main = do + print $ myScale 3.0 (fromList [1..10]) + print $ myDiag $ (3><5) [1..] + +----------------------------------------------------- + +foreign import ccall "c_scale_vector" + cScaleVector :: Double -- scale + -> CInt -> Ptr Double -- argument + -> CInt -> Ptr Double -- result + -> IO CInt -- exit code + +myScale s x = unsafePerformIO $ do + y <- createVector (dim x) + app2 (cScaleVector s) vec x vec y "cScaleVector" + return y + +----------------------------------------------------- + +foreign import ccall "c_diag" + cDiag :: CInt -- matrix order + -> CInt -> CInt -> Ptr Double -- argument + -> CInt -> Ptr Double -- result1 + -> CInt -> CInt -> Ptr Double -- result2 + -> IO CInt -- exit code + +myDiag m = unsafePerformIO $ do + y <- createVector (min r c) + z <- createMatrix (orderOf m) r c + app3 (cDiag o) mat m vec y mat z "cDiag" + return (y,z) + where r = rows m + c = cols m + o = if orderOf m == RowMajor then 1 else 0 -- cgit v1.2.3