]> gerrit.simantics Code Review - simantics/matlab.git/commitdiff
Fixed errors in feature.xml and SCL module. 45/345/1
authorReino Ruusu <reino.ruusu@vtt.fi>
Fri, 3 Mar 2017 16:13:16 +0000 (18:13 +0200)
committerReino Ruusu <reino.ruusu@vtt.fi>
Fri, 3 Mar 2017 16:13:16 +0000 (18:13 +0200)
The wrong fi.vtt-prefixed names were corrected feature.xml.
Added .feature to the id of the feature.
Deleted erroneous references to jnipython.dll.
Deleted requirement of JUnit from feature.
Finished SCL module definition that was under development.

Change-Id: Ib75106c7d153511654c1277d4c0edd72fe223565

org.simantics.matlablink.feature/feature.xml
org.simantics.matlablink.win32.x86_64/build.properties
org.simantics.matlablink/scl/Simantics/Matlab.scl
org.simantics.matlablink/src/org/simantics/matlablink/Matlab.java
org.simantics.matlablink/test/org/simantics/matlablink/test/TestMatlabEngine.java

index 292ec4ac0a2ff045056e964509d44157b4031f67..4bd7d31d70896d47ddc9b3543dcd87f1abe5f09b 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <feature\r
-      id="fi.vtt.matlablink"\r
+      id="org.simantics.matlablink.feature"\r
       label="Matlablink"\r
       version="1.0.0.qualifier">\r
 \r
    </license>\r
 \r
    <requires>\r
-      <import plugin="org.junit"/>\r
       <import plugin="org.eclipse.osgi"/>\r
       <import plugin="org.simantics.scl.runtime"/>\r
       <import plugin="gnu.trove3" version="3.0.3" match="greaterOrEqual"/>\r
-      <import plugin="fi.vtt.matlablink" version="1.0.0" match="greaterOrEqual"/>\r
    </requires>\r
 \r
    <plugin\r
-         id="fi.vtt.matlablink"\r
+         id="org.simantics.matlablink"\r
          download-size="0"\r
          install-size="0"\r
          version="0.0.0"\r
          unpack="false"/>\r
 \r
    <plugin\r
-         id="fi.vtt.matlablink.win32.x86_64"\r
+         id="org.simantics.matlablink.win32.x86_64"\r
          download-size="0"\r
          install-size="0"\r
          version="0.0.0"\r
-         fragment="true"\r
-         unpack="false"/>\r
+         fragment="true"/>\r
 \r
 </feature>\r
index 2d0d26e3ac99b67324120ef8d4d365f90a1e9996..6cb28ac74f2b261f4f126eaee4a61c40b3fb991e 100644 (file)
@@ -2,7 +2,5 @@ source.. = src/
 output.. = bin/\r
 bin.includes = META-INF/,\\r
                .,\\r
-               jnimatlab.dll,\\r
-               jnipython.dll\r
-src.includes = jnimatlab.dll,\\r
-               jnipython.dll\r
+               jnimatlab.dll\r
+src.includes = jnimatlab.dll\r
index 811e0aac364b447fdc9787c5b69bd7aaabcd4c2b..33d6cfbfdf9ca520ef7834d5d81497699cf15a36 100644 (file)
@@ -1,21 +1,64 @@
 import "Map" as Map\r
 import "Vector"\r
 import "File"\r
+import "JavaBuiltin" as Java\r
 \r
 effect Matlab\r
     "Simantics/Matlab/Matlab"\r
     "org.simantics.matlablink.Engine"\r
 \r
-importJava "org.simantics.matlablink.MatlabArray"\r
+importJava "org.simantics.matlablink.MatlabArray" where\r
     data MatlabArray\r
-importJava "org.simantics.matlablink.DoubleArray"\r
-    data DoubleArray\r
-importJava "org.simantics.matlablink.CharacterArray"\r
-    data CharacterArray\r
-importJava "org.simantics.matlablink.CellArray"\r
-    data CellArray\r
-importJava "org.simantics.matlablink.StructArray"\r
-    data StructArray\r
+    getDoubleValue :: MatlabArray -> Vector Double\r
+    \r
+    @JavaName getDoubleValue\r
+    getDoubleItem :: MatlabArray -> Integer -> Double\r
+    \r
+    getStringValue :: MatlabArray -> String\r
+    getCellValue :: MatlabArray -> Vector MatlabArray\r
+    getCellItem :: MatlabArray -> Integer -> MatlabArray\r
+    getField :: MatlabArray -> Integer -> String -> MatlabArray\r
+    getStructItem :: MatlabArray -> Integer -> Map.T String MatlabArray\r
+    \r
+    isDouble :: MatlabArray -> Boolean\r
+    isCharacter :: MatlabArray -> Boolean\r
+    isCell :: MatlabArray -> Boolean\r
+    isStruct :: MatlabArray -> Boolean\r
+    \r
+    size :: MatlabArray -> Integer\r
+    dims :: MatlabArray -> Vector Integer\r
+    \r
+    @private\r
+    @JavaName toString\r
+    matlabArrayToString :: MatlabArray -> String\r
+    \r
+importJava "org.simantics.matlablink.DoubleArray" where\r
+    data MatlabDoubleArray\r
+    @JavaName "<init>"\r
+    doubleArray :: Vector Double -> <Proc> MatlabArray\r
+    \r
+importJava "org.simantics.matlablink.CharacterArray" where\r
+    data MatlabCharacterArray\r
+    @JavaName "<init>"\r
+    characterArray :: String -> <Proc> MatlabArray\r
+    \r
+importJava "org.simantics.matlablink.CellArray" where\r
+    data MatlabCellArray\r
+    @JavaName "<init>"\r
+    cellArray :: Integer -> <Proc> MatlabCellArray\r
+    @JavaName "<init>"\r
+    ndimCellArray :: Vector Integer -> <Proc> MatlabCellArray \r
+    \r
+    setCellItem :: MatlabCellArray -> Integer -> MatlabArray -> <Proc> ()\r
+    \r
+importJava "org.simantics.matlablink.StructArray" where\r
+    data MatlabStructArray\r
+    @JavaName "<init>"\r
+    structArray :: Integer -> [String] -> <Proc> MatlabStructArray\r
+    @JavaName "<init>"\r
+    ndimStructArray :: Vector Integer -> [String] -> <Proc> MatlabStructArray\r
+    \r
+    setField :: MatlabStructArray -> Integer -> String -> MatlabArray -> <Proc> ()\r
 \r
 importJava "org.simantics.matlablink.Engine" where\r
     data Engine\r
@@ -24,19 +67,58 @@ importJava "org.simantics.matlablink.Engine" where
     closeEngine :: Engine -> <Proc> ()\r
     \r
     @JavaName evaluateMatlabExpression \r
-    executeMatlabExpression :: String -> <Matlab, Proc> ()\r
+    executeMatlabStatement :: String -> <Matlab, Proc> ()\r
     \r
     getMatlabArray :: String -> <Matlab, Proc> MatlabArray\r
-    getMatlabDoubleArray :: String -> <Matlab, Proc> DoubleArray\r
-    getMatlabCharacterArray :: String -> <Matlab, Proc> ChracterArray\r
-    getMatlabCellArray :: String -> <Matlab, Proc> CellArray\r
-    getMatlabStructArray :: String -> <Matlab, Proc> StructArray\r
+    getMatlabDoubleArray :: String -> <Matlab, Proc> MatlabArray\r
+    getMatlabCharacterArray :: String -> <Matlab, Proc> MatlabArray\r
+    getMatlabCellArray :: String -> <Matlab, Proc> MatlabArray\r
+    getMatlabStructArray :: String -> <Matlab, Proc> MatlabArray\r
+\r
+    @private    \r
+    @JavaName setMatlabDoubleArray\r
+    setMatlabDoubleArray' :: String -> MatlabDoubleArray -> <Matlab, Proc> ()\r
+    @private    \r
+    @JavaName setMatlabCharacterArray\r
+    setMatlabCharacterArray' :: String -> MatlabCharacterArray -> <Matlab, Proc> ()\r
+    @private    \r
+    @JavaName setMatlabCellArray\r
+    setMatlabCellArray' :: String -> MatlabCellArray -> <Matlab, Proc> ()\r
+    @private    \r
+    @JavaName setMatlabStructArray\r
+    setMatlabStructArray' :: String -> MatlabStructArray -> <Matlab, Proc> ()\r
+\r
+@private    \r
+setMatlabDoubleArray :: String -> MatlabArray -> <Matlab, Proc> ()\r
+setMatlabDoubleArray name value = setMatlabDoubleArray' name (Java.unsafeCoerce value)\r
+\r
+@private    \r
+setMatlabCharacterArray :: String -> MatlabArray -> <Matlab, Proc> ()\r
+setMatlabCharacterArray name value = setMatlabCharacterArray' name (Java.unsafeCoerce value)\r
+\r
+@private    \r
+setMatlabCellArray :: String -> MatlabArray -> <Matlab, Proc> ()\r
+setMatlabCellArray name value = setMatlabCellArray' name (Java.unsafeCoerce value)\r
+\r
+@private    \r
+setMatlabStructArray :: String -> MatlabArray -> <Matlab, Proc> ()\r
+setMatlabStructArray name value = setMatlabStructArray' name (Java.unsafeCoerce value)\r
+\r
+class MatlabArrayType a where\r
+    asArray :: a -> MatlabArray\r
+    asArray = Java.unsafeCoerce\r
     \r
-    setMatlabArray :: String -> MatlabArray -> <Matlab, Proc> ()\r
-    setMatlabDoubleArray :: String -> DoubleArray -> <Matlab, Proc> ()\r
-    setMatlabCharacterArray :: String -> CharacterArray -> <Matlab, Proc> ()\r
-    setMatlabCellArray :: String -> CellArray -> <Matlab, Proc> ()\r
-    setMatlabStructArray :: String -> StructArray -> <Matlab, Proc> ()\r
+instance MatlabArrayType MatlabArray\r
+instance MatlabArrayType MatlabDoubleArray\r
+instance MatlabArrayType MatlabCharacterArray\r
+instance MatlabArrayType MatlabCellArray\r
+instance MatlabArrayType MatlabStructArray\r
+\r
+instance (MatlabArrayType a) => Show a where\r
+    show = matlabArrayToString . asArray\r
+\r
+setMatlabArray :: MatlabArrayType a => String -> a -> <Matlab, Proc> ()\r
+setMatlabArray name value = matchMatlabArray (asArray value) (setMatlabDoubleArray name) (setMatlabCharacterArray name) (setMatlabCellArray name) (setMatlabStructArray name)\r
 \r
 importJava "org.simantics.matlablink.Matlab" where\r
     @JavaName runWithEngine\r
@@ -44,8 +126,9 @@ importJava "org.simantics.matlablink.Matlab" where
     \r
     @JavaName runMatlab\r
     runMatlabF :: File -> (() -> <Matlab, Proc> a) -> <Proc> a\r
-    \r
-    matchMatlabArray :: a -> (Vector Double -> b) -> (String -> b) -> (Vector Dynamic -> b) -> (Map.T String (Vector Dynamic) -> b) -> b\r
+\r
+    "Apply type-specific processing to a Matlab array: `matchMatlabArray array doubleFun charFun cellFun structFun`"\r
+    matchMatlabArray :: MatlabArray -> (MatlabArray -> <e> b) -> (MatlabArray -> <e> b) -> (MatlabArray -> <e> b) -> (MatlabArray -> <e> b) -> <e> b\r
     \r
     openEngine :: File -> <Proc> Engine\r
 \r
@@ -57,7 +140,7 @@ runMatlab wd v = runMatlabF wd (\_ -> v)
 \r
 evaluateMatlabExpression :: MatlabCompatible a => String -> <Matlab, Proc> a\r
 evaluateMatlabExpression expression = do\r
-    executeMatlabExpression expression\r
+    executeMatlabStatement expression\r
     getMatlabVariable "ans"\r
 \r
 class (Typeable a) => MatlabCompatible a where\r
@@ -65,33 +148,33 @@ class (Typeable a) => MatlabCompatible a where
     setMatlabVariable :: String -> a -> <Matlab, Proc> ()\r
 \r
 instance MatlabCompatible (Vector Double) where\r
-    getMatlabVariable = getMatlabDoubleArray\r
-    setMatlabVariable name value = setMatlabDoubleArray name False value\r
+    getMatlabVariable = getDoubleValue . getMatlabDoubleArray\r
+    setMatlabVariable name value = setMatlabDoubleArray name (doubleArray value)\r
 \r
 instance MatlabCompatible [Double] where\r
-    getMatlabVariable = vectorToList . getMatlabDoubleArray\r
-    setMatlabVariable name value = setMatlabDoubleArray name False (vector value)\r
+    getMatlabVariable = vectorToList . getDoubleValue . getMatlabDoubleArray\r
+    setMatlabVariable name value = setMatlabDoubleArray name (doubleArray (vector value))\r
 \r
 instance MatlabCompatible Double where\r
-    getMatlabVariable name = (getMatlabDoubleArray name)!0\r
-    setMatlabVariable name value = setMatlabDoubleArray name False (vector [value])\r
+    getMatlabVariable name = getDoubleItem (getMatlabDoubleArray name) 0\r
+    setMatlabVariable name value = setMatlabDoubleArray name (doubleArray (vector [value]))\r
     \r
 instance MatlabCompatible String where\r
-    getMatlabVariable = getMatlabCharacterArray\r
-    setMatlabVariable = setMatlabCharacterArray\r
+    getMatlabVariable = getStringValue . getMatlabCharacterArray\r
+    setMatlabVariable name value = setMatlabCharacterArray name (characterArray value)\r
     \r
-instance MatlabCompatible (Vector Dynamic) where\r
-    getMatlabVariable = getMatlabCellArray\r
-    setMatlabVariable name value = setMatlabCellArray name False value\r
+instance MatlabCompatible (Vector MatlabArray) where\r
+    getMatlabVariable = getCellValue . getMatlabCellArray\r
+    setMatlabVariable name value = do\r
+        n = length value\r
+        array = cellArray n\r
+        forN n \i -> setCellItem array i (value!i)\r
+        setMatlabCellArray' name array\r
 \r
-instance MatlabCompatible Dynamic where\r
+instance MatlabCompatible [MatlabArray] where\r
+    getMatlabVariable = vectorToList . getCellValue . getMatlabCellArray\r
+    setMatlabVariable name value = setMatlabVariable name (vector value)\r
+\r
+instance MatlabCompatible MatlabArray where\r
     getMatlabVariable = getMatlabArray\r
     setMatlabVariable = setMatlabArray    \r
-\r
-instance MatlabCompatible (Dynamic, Dynamic) where\r
-    getMatlabVariable name = let\r
-        v = getMatlabCellArray name\r
-      in\r
-        (v!0, v!1)\r
-        \r
-    setMatlabVariable name (a, b) = setMatlabCellArray name False (vector [toDynamic a, toDynamic b])\r
index 9d4adcf1b81ec5996d58424a2bb0cd8b7acf83dd..b08f6b0115facd8599cd61ba904c3a00cad64441 100644 (file)
@@ -52,16 +52,16 @@ public class Matlab {
     }\r
     \r
     @SuppressWarnings( { "unchecked", "rawtypes" } )\r
-    public static Object matchMatlabArray(Object array, Function doubleFun, Function stringFun, Function cellFun, Function structFun) {\r
-        if (array instanceof double[])\r
+    public static Object matchMatlabArray(MatlabArray array, Function doubleFun, Function stringFun, Function cellFun, Function structFun) {\r
+        if (array instanceof DoubleArray)\r
             return doubleFun.apply(array);\r
-        else if (array instanceof String)\r
+        else if (array instanceof CharacterArray)\r
             return stringFun.apply(array);\r
-        else if (array instanceof Object[])\r
+        else if (array instanceof CellArray)\r
             return cellFun.apply(array);\r
-        else if (array instanceof Map)\r
+        else if (array instanceof StructArray)\r
             return structFun.apply(array);\r
         else\r
-            return null;\r
+            throw new IllegalArgumentException("Unknown Matlab array type: " + array.getClass().getName());\r
     }\r
 }\r
index cae75fc1814276a8e53a33e965f3c46e19caae02..8fad938baa82acafff0ec276576688d56bc820d7 100644 (file)
@@ -21,17 +21,17 @@ import org.simantics.matlablink.StructArray;
 \r
 public class TestMatlabEngine {\r
 \r
-    Engine engine;\r
-    Path tempDir;\r
+       static Engine engine;\r
+       static Path tempDir;\r
     \r
     @BeforeClass\r
-    public void setUp() throws Exception {\r
+    public static void setUp() throws Exception {\r
         tempDir = Files.createTempDirectory( "testMatlabEngine" );\r
         engine = Matlab.openEngine(tempDir.toFile());\r
     }\r
 \r
     @AfterClass\r
-    public void tearDown() throws Exception {\r
+    public static void tearDown() throws Exception {\r
         engine.close();\r
         tempDir.toFile().delete();\r
     }\r