Add a way to send Scilab data to Java environment 35/5335/10
Calixte DENIZET [Fri, 28 Oct 2011 15:18:58 +0000 (17:18 +0200)]
Change-Id: I559ef407c186f86356eaa1df7b42264798f7e1eb

43 files changed:
scilab/Scilab.sln
scilab/Scilab_f2c.sln
scilab/build.incl.xml
scilab/modules/javasci/src/java/org/scilab/modules/javasci/Scilab.java
scilab/modules/javasci/src/java/org/scilab/modules/javasci/ScilabVariablesJavasci.java [new file with mode: 0644]
scilab/modules/jvm/Makefile.am
scilab/modules/jvm/Makefile.in
scilab/modules/jvm/src/c/JVM.c
scilab/modules/types/Makefile.am
scilab/modules/types/Makefile.in
scilab/modules/types/includes/GetScilabVariable.h [new file with mode: 0644]
scilab/modules/types/includes/ScilabToJava.hxx [new file with mode: 0644]
scilab/modules/types/src/cpp/ScilabToJava.cpp [new file with mode: 0644]
scilab/modules/types/src/java/org/scilab/modules/types/GetScilabVariable.java [new file with mode: 0644]
scilab/modules/types/src/java/org/scilab/modules/types/GetScilabVariableJNI.java [new file with mode: 0644]
scilab/modules/types/src/java/org/scilab/modules/types/ScilabBoolean.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabBooleanSparse.java [new file with mode: 0644]
scilab/modules/types/src/java/org/scilab/modules/types/ScilabDouble.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabInteger.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabList.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabMList.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabPolynomial.java [new file with mode: 0644]
scilab/modules/types/src/java/org/scilab/modules/types/ScilabSparse.java [new file with mode: 0644]
scilab/modules/types/src/java/org/scilab/modules/types/ScilabString.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabTList.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabType.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariables.java [new file with mode: 0644]
scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesEvent.java [new file with mode: 0644]
scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesHandler.java [new file with mode: 0644]
scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesListener.java [new file with mode: 0644]
scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesRefresh.java [new file with mode: 0644]
scilab/modules/types/src/jni/ScilabPolynomialToJava.cpp [new file with mode: 0644]
scilab/modules/types/src/jni/ScilabPolynomialToJava.hxx [new file with mode: 0644]
scilab/modules/types/src/jni/ScilabVariables.cpp [new file with mode: 0644]
scilab/modules/types/src/jni/ScilabVariables.giws.xml [new file with mode: 0644]
scilab/modules/types/src/jni/ScilabVariables.hxx [new file with mode: 0644]
scilab/modules/types/src/jni/ScilabVariablesRefresh.cpp [new file with mode: 0644]
scilab/modules/types/src/jni/ScilabVariablesRefresh.hxx [new file with mode: 0644]
scilab/modules/types/src/jni/getScilabVariable.i [new file with mode: 0644]
scilab/modules/types/src/jni/getScilabVariable_wrap.c [new file with mode: 0644]
scilab/modules/types/types.iss
scilab/modules/types/types.vcxproj [new file with mode: 0644]
scilab/modules/types/types.vcxproj.filters [new file with mode: 0644]

index 9c7d761..83f96e1 100644 (file)
@@ -631,6 +631,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "types-JAVA-tests", "modules
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "modules\xml\xml.vcxproj", "{EF5402DA-29FD-4F1B-B98B-D284D4E27C15}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "types", "modules\types\types.vcxproj", "{626B9142-13A1-4765-A072-FB08952E7BB8}"
+EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
                Debug|Win32 = Debug|Win32
@@ -1863,6 +1865,14 @@ Global
                {EF5402DA-29FD-4F1B-B98B-D284D4E27C15}.Release|Win32.Build.0 = Release|Win32
                {EF5402DA-29FD-4F1B-B98B-D284D4E27C15}.Release|x64.ActiveCfg = Release|x64
                {EF5402DA-29FD-4F1B-B98B-D284D4E27C15}.Release|x64.Build.0 = Release|x64
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Debug|Win32.ActiveCfg = Debug|Win32
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Debug|Win32.Build.0 = Debug|Win32
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Debug|x64.ActiveCfg = Debug|x64
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Debug|x64.Build.0 = Debug|x64
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Release|Win32.ActiveCfg = Release|Win32
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Release|Win32.Build.0 = Release|Win32
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Release|x64.ActiveCfg = Release|x64
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Release|x64.Build.0 = Release|x64
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
index dc1c38e..cbd915a 100644 (file)
@@ -629,6 +629,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "types-JAVA-tests", "modules
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "modules\xml\xml.vcxproj", "{EF5402DA-29FD-4F1B-B98B-D284D4E27C15}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "types", "modules\types\types.vcxproj", "{626B9142-13A1-4765-A072-FB08952E7BB8}"
+EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
                Debug|Win32 = Debug|Win32
@@ -1853,6 +1855,14 @@ Global
                {EF5402DA-29FD-4F1B-B98B-D284D4E27C15}.Release|Win32.Build.0 = Release|Win32
                {EF5402DA-29FD-4F1B-B98B-D284D4E27C15}.Release|x64.ActiveCfg = Release|x64
                {EF5402DA-29FD-4F1B-B98B-D284D4E27C15}.Release|x64.Build.0 = Release|x64
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Debug|Win32.ActiveCfg = Debug|Win32
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Debug|Win32.Build.0 = Debug|Win32
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Debug|x64.ActiveCfg = Debug|x64
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Debug|x64.Build.0 = Debug|x64
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Release|Win32.ActiveCfg = Release|Win32
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Release|Win32.Build.0 = Release|Win32
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Release|x64.ActiveCfg = Release|x64
+               {626B9142-13A1-4765-A072-FB08952E7BB8}.Release|x64.Build.0 = Release|x64
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
index 2fe9663..5cfe9e3 100644 (file)
       <!-- Where ${basedir} is the module base directory -->
       <env key="SCI" value="${basedir}/../.."/>
       <jvmarg value="-DtestngTests=1"/>
-      <jvmarg value="-Djava.library.path=${base.dir}/modules/.libs/:${base.dir}/modules/javasci/.libs/:${base.dir}/modules/localization/.libs/:${base.dir}/modules/commons/.libs/:${base.dir}/modules/action_binding/.libs/:${base.dir}/thirdparty/:${base.dir}/bin/:/usr/lib/jni/:/usr/lib64/jni:"/>
+      <jvmarg value="-Djava.library.path=${base.dir}/modules/.libs/:${base.dir}/modules/javasci/.libs/:${base.dir}/modules/types/.libs/:${base.dir}/modules/localization/.libs/:${base.dir}/modules/commons/.libs/:${base.dir}/modules/action_binding/.libs/:${base.dir}/thirdparty/:${base.dir}/bin/:/usr/lib/jni/:/usr/lib64/jni:"/>
     </testng>
   </target>
   <target name="validate">
index b7b95c4..e6569dc 100644 (file)
@@ -76,7 +76,7 @@ public class Scilab {
 
     /**
      * Creator of the Scilab Javasci object in advanced mode<br />
-     * Scilab data path is autodetected 
+     * Scilab data path is autodetected
      * <br />
      * Example:<br />
      * <code>
@@ -160,13 +160,13 @@ public class Scilab {
     public boolean open() throws JavasciException {
         int res = Call_Scilab.Call_ScilabOpen(this.SCI, this.advancedMode, null, -1);
         switch (res) {
-            case -1: 
-                throw new AlreadyRunningException("Javasci already running.");
-            case -2:
-                /* Should not occurd (processed before) */
-                throw new InitializationException("Could not find SCI.");
-            case -3:
-                throw new InitializationException("No existing directory.");
+        case -1:
+            throw new AlreadyRunningException("Javasci already running.");
+        case -2:
+            /* Should not occurd (processed before) */
+            throw new InitializationException("Could not find SCI.");
+        case -3:
+            throw new InitializationException("No existing directory.");
         }
         return true;
     }
@@ -384,7 +384,7 @@ public class Scilab {
      * ScilabDouble aOriginal = new ScilabDouble(a);<br />
      * sci.put("a",aOriginal);<br />
      * assert sci.isExistingVariable("a") == true;<br />
-     * <br />     
+     * <br />
      * </code>
      * @param varname the variable to check
      * @return if the variable exists or not
@@ -401,7 +401,7 @@ public class Scilab {
      * Example:<br />
      * <code>
      * sci.close();<br />
-     * <br />     
+     * <br />
      * </code>
      * @return if the operation is successful
      */
@@ -417,7 +417,7 @@ public class Scilab {
      * <code>
      * sci.open("a=1+"); // Wrong operation<br />
      * sci.getLastErrorCode() // Returns 2<br />
-     * <br />     
+     * <br />
      * </code>
      * @return the error code
      */
@@ -433,7 +433,7 @@ public class Scilab {
      * <code>
      * sci.open("a=1+");<br />
      * System.err.println(sci.getLastErrorMessage());<br />
-     * <br />     
+     * <br />
      * </code>
      * @return the error message itself
      */
@@ -450,7 +450,7 @@ public class Scilab {
      * <code>
      * sci.exec("plot3d();");<br />
      * sci.isGraphicOpened();<br />
-     * <br />     
+     * <br />
      * </code>
      * @return if the graphic is open or not
      */
@@ -467,7 +467,7 @@ public class Scilab {
      * if (sci.getVariableType("a") == ScilabTypeEnum.sci_matrix) {<br />
      *      System.out.println("a is a double matrix");<br />
      * }<br />
-     * <br />     
+     * <br />
      * </code>
      * @param varName the name of the variable
      * @return the type of the variable
@@ -506,51 +506,42 @@ public class Scilab {
      * <br />
      * </code>
      * @param varname the name of the variable
-     * @return return the variable 
+     * @return return the variable
      * @throws UnsupportedTypeException Type not managed yet.
      */
     public ScilabType get(String varname) throws JavasciException {
         ScilabTypeEnum sciType = this.getVariableType(varname);
         switch (sciType) {
-            case sci_matrix:
-                if (!Call_Scilab.isComplex(varname)) {
-                    return new ScilabDouble(Call_Scilab.getDouble(varname));
-                } else {
-                    return new ScilabDouble(Call_Scilab.getDoubleComplexReal(varname), Call_Scilab.getDoubleComplexImg(varname));
-                }
-  
-            case sci_boolean:
-                return new ScilabBoolean(Call_Scilab.getBoolean(varname));
-            case sci_strings:
-                return new ScilabString(Call_Scilab.getString(varname));
-            case sci_ints:
-                ScilabIntegerTypeEnum typeInt = Call_Scilab.getIntegerPrecision(varname);
-                switch (typeInt) {
-                    case sci_int8:
-                        return new ScilabInteger(Call_Scilab.getByte(varname), false);
-                    case sci_uint8:
-                        return new ScilabInteger(Call_Scilab.getUnsignedByte(varname), true);
-                    case sci_int16:
-                        return new ScilabInteger(Call_Scilab.getShort(varname), false);
-                    case sci_uint16:
-                        return new ScilabInteger(Call_Scilab.getUnsignedShort(varname), true);
-                    case sci_int32:
-                        return new ScilabInteger(Call_Scilab.getInt(varname), false);
-                    case sci_uint32:
-                        return new ScilabInteger(Call_Scilab.getUnsignedInt(varname), true);
-                    case sci_int64:
-                    case sci_uint64:
-                        // will be available in Scilab 6
-                        throw new UnsupportedTypeException("64 bit (signed and unsigned) integer types not managed in Scilab 5.X");
+        case sci_matrix:
+        case sci_boolean:
+        case sci_strings:
+        case sci_poly:
+        case sci_sparse:
+        case sci_boolean_sparse:
+        case sci_list:
+        case sci_tlist:
+        case sci_mlist:
+            return ScilabVariablesJavasci.getScilabVariable(varname);
+        case sci_ints:
+            ScilabIntegerTypeEnum typeInt = Call_Scilab.getIntegerPrecision(varname);
+
+            switch (typeInt) {
+            case sci_int8:
+            case sci_uint8:
+            case sci_int16:
+            case sci_uint16:
+            case sci_int32:
+            case sci_uint32:
+                return ScilabVariablesJavasci.getScilabVariable(varname);
+            case sci_int64:
+            case sci_uint64:
+                // will be available in Scilab 6
+                throw new UnsupportedTypeException("64 bit (signed and unsigned) integer types not managed in Scilab 5.X");
 
-                }
+            }
 
-            default:
-                throw new UnsupportedTypeException("Type not managed: " + sciType);
-        
+        default:
+            throw new UnsupportedTypeException("Type not managed: " + sciType);
         }
     }
 
@@ -591,29 +582,29 @@ public class Scilab {
         if (theVariable instanceof ScilabInteger) {
             ScilabInteger sciInteger = (ScilabInteger)theVariable;
             switch (sciInteger.getPrec()) {
-                case sci_uint8:
-                    err = Call_Scilab.putUnsignedByte(varname, sciInteger.getDataAsByte());
-                    break;
-                case sci_int8:
-                    err = Call_Scilab.putByte(varname, sciInteger.getDataAsByte());
-                    break;
-                case sci_uint16:
-                    err = Call_Scilab.putUnsignedShort(varname, sciInteger.getDataAsShort());
-                    break;
-                case sci_int16:
-                    err = Call_Scilab.putShort(varname, sciInteger.getDataAsShort());
-                    break;
-                case sci_uint32:
-                    err = Call_Scilab.putUnsignedInt(varname, sciInteger.getDataAsInt());
-                    break;
-                case sci_int32:
-                    err = Call_Scilab.putInt(varname, sciInteger.getDataAsInt());
-                    break;
-                case sci_uint64:
+            case sci_uint8:
+                err = Call_Scilab.putUnsignedByte(varname, sciInteger.getDataAsByte());
+                break;
+            case sci_int8:
+                err = Call_Scilab.putByte(varname, sciInteger.getDataAsByte());
+                break;
+            case sci_uint16:
+                err = Call_Scilab.putUnsignedShort(varname, sciInteger.getDataAsShort());
+                break;
+            case sci_int16:
+                err = Call_Scilab.putShort(varname, sciInteger.getDataAsShort());
+                break;
+            case sci_uint32:
+                err = Call_Scilab.putUnsignedInt(varname, sciInteger.getDataAsInt());
+                break;
+            case sci_int32:
+                err = Call_Scilab.putInt(varname, sciInteger.getDataAsInt());
+                break;
+            case sci_uint64:
 //                    err = Call_Scilab.putUnsignedLong(varname, sciInteger.getData_());
-                case sci_int64:
+            case sci_int64:
 //                    err = Call_Scilab.putLong(varname, sciInteger.getData_());
-                    break;
+                break;
             }
         }
 
diff --git a/scilab/modules/javasci/src/java/org/scilab/modules/javasci/ScilabVariablesJavasci.java b/scilab/modules/javasci/src/java/org/scilab/modules/javasci/ScilabVariablesJavasci.java
new file mode 100644 (file)
index 0000000..634db63
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Scilab (http://www.scilab.org/) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.javasci;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.scilab.modules.types.GetScilabVariable;
+import org.scilab.modules.types.ScilabVariables;
+import org.scilab.modules.types.ScilabVariablesHandler;
+import org.scilab.modules.types.ScilabType;
+
+/**
+ * Class to get Scilab data from a Java call
+ */
+public final class ScilabVariablesJavasci implements ScilabVariablesHandler {
+
+    private static final Map<Thread, ScilabType> map = new HashMap<Thread, ScilabType>();
+
+    private static int id = -1;
+
+    /**
+     * Constructor
+     */
+    private ScilabVariablesJavasci() { }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void handle(ScilabType var) {
+        map.put(Thread.currentThread(), var);
+    }
+
+    /**
+     * Get a Scilab variable with a given name
+     * @param name the variable name
+     * @param swapRowCol if true the returned data will be stored row by row
+     * @return the corresponding ScilabType object
+     */
+    public static final ScilabType getScilabVariable(String name, boolean swapRowCol) {
+        if (id == -1) {
+            id = ScilabVariables.addScilabVariablesHandler(new ScilabVariablesJavasci());
+        }
+
+        if (name != null && !name.isEmpty()) {
+            GetScilabVariable.getScilabVariable(name, swapRowCol ? 1 : 0, id);
+            Thread t = Thread.currentThread();
+            ScilabType var = map.get(t);
+            map.remove(t);
+
+            return var;
+        }
+
+        return null;
+    }
+
+    /**
+     * Get a Scilab variable with a given name
+     * @param name the variable name
+     * @return the corresponding ScilabType object where the data are stored row by row
+     */
+    public static final ScilabType getScilabVariable(String name) {
+        return getScilabVariable(name, true);
+    }
+}
index 595c6e1..cd208e9 100644 (file)
@@ -46,7 +46,7 @@ pkglib_LTLIBRARIES += libscijvm.la
 noinst_LTLIBRARIES = libscijvm-algo.la
 endif
 
-libscijvm_la_LDFLAGS = -version-number $(SCILAB_LIBRARY_VERSION) -lpthread $(XML_LIBS)
+libscijvm_la_LDFLAGS = -version-number $(SCILAB_LIBRARY_VERSION) -lpthread $(XML_LIBS) $(JAVA_JNI_LIBS)
 
 if IS_MACOSX 
 libscijvm_la_LDFLAGS += -framework JavaVM
index 6e946a8..e49977b 100644 (file)
@@ -465,7 +465,7 @@ pkglib_LTLIBRARIES = libscijvm-disable.la $(am__append_1)
 @GUI_TRUE@USEANT = 1
 @GUI_TRUE@noinst_LTLIBRARIES = libscijvm-algo.la
 libscijvm_la_LDFLAGS = -version-number $(SCILAB_LIBRARY_VERSION) \
-       -lpthread $(XML_LIBS) $(am__append_2)
+       -lpthread $(XML_LIBS) $(JAVA_JNI_LIBS) $(am__append_2)
 libscijvm_la_LIBADD = libscijvm-algo.la
 
 #### jvm : gateway declaration ####
index b0b0134..bb7d63e 100644 (file)
@@ -48,9 +48,26 @@ static void freeJavaVMOption(void)
        }
 }
 /*--------------------------------------------------------------------------*/ 
-JavaVM *getScilabJavaVM(void)
+JavaVM * getScilabJavaVM(void)
 {
-       return jvm_SCILAB;
+    if (!jvm_SCILAB && IsFromJava())
+    {
+        /* If getScilabJavaVM is called from C called itself from JavaSci
+           (in nwni mode) the function returns a JVM */
+        JavaVM * vm = 0;
+        JavaVM ** vmBuf = MALLOC(sizeof(JavaVM *) * 1);
+        jsize size = 0;
+        JNI_GetCreatedJavaVMs(vmBuf, 1, &size);
+        if (size)
+        {
+            vm = *vmBuf;
+        }
+        FREE(vmBuf);
+       
+        return vm;
+     }
+
+     return jvm_SCILAB;
 }
 /*--------------------------------------------------------------------------*/ 
 JNIEnv *getScilabJNIEnv(void)
index d860f44..5fa903d 100644 (file)
@@ -21,18 +21,21 @@ libscitypes_la_root_DATA =  license.txt
 #### types : init scripts ####
 libscitypes_la_etcdir = $(mydatadir)/etc
 libscitypes_la_etc_DATA = etc/types.quit \
-                               etc/types.start
+                         etc/types.start
 
 include $(top_srcdir)/Makefile.incl.am
 
 
-TYPES_JNI_SOURCES =
+TYPES_JNI_SOURCES = 
 
-TYPES_C_SOURCES =
+TYPES_C_SOURCES = src/jni/getScilabVariable_wrap.c
 
-TYPES_CPP_SOURCES =
+TYPES_CPP_SOURCES = src/cpp/ScilabToJava.cpp \
+                   src/jni/ScilabVariables.cpp \
+                   src/jni/ScilabVariablesRefresh.cpp \
+                   src/jni/ScilabPolynomialToJava.cpp
 
-GIWS_WRAPPERS =
+GIWS_WRAPPERS = src/jni/ScilabVariables.giws.xml
 
 if GIWS
 BUILT_SOURCES=giws
@@ -43,10 +46,17 @@ endif
 
 #GATEWAY_CPP_SOURCES =
 
-libscitypes_la_CFLAGS=
+libscitypes_la_CFLAGS = $(JAVA_JNI_INCLUDE) \
+                       -I$(srcdir)/includes
 
-
-libscitypes_la_CPPFLAGS =
+libscitypes_la_CPPFLAGS = $(JAVA_JNI_INCLUDE) \
+                          -I$(srcdir)/src/jni \
+                          -I$(srcdir)/src/cpp \
+                          -I$(srcdir)/includes \
+                          -I$(top_srcdir)/modules/commons/src/jni/ \
+                          -I$(top_srcdir)/modules/jvm/includes/ \
+                          -I$(top_srcdir)/modules/output_stream/includes \
+                          -I$(top_srcdir)/modules/api_scilab/includes
 
 # Without the types module
 libscitypes_disable_la_CFLAGS =
@@ -54,12 +64,19 @@ libscitypes_disable_la_CFLAGS =
 TYPES_DISABLE_C_SOURCES =
 libscitypes_disable_la_LDFLAGS = -version-number $(SCILAB_LIBRARY_VERSION) $(LD_FLAGS)
 libscitypes_disable_la_SOURCES = $(TYPES_DISABLE_C_SOURCES)
+libscitypes_algo_la_SOURCES = $(TYPES_C_SOURCES) $(TYPES_JNI_SOURCES) $(TYPES_CPP_SOURCES)
+libscitypes_algo_la_CFLAGS = $(libscitypes_la_CFLAGS)
+libscitypes_algo_la_CPPFLAGS = $(libscitypes_la_CPPFLAGS)
+
+libscitypes_la_LIBADD = $(top_builddir)/modules/commons/libscicommons.la \
+                       $(top_builddir)/modules/api_scilab/libsciapi_scilab.la \
+                       $(top_builddir)/modules/jvm/libscijvm.la
 
 pkglib_LTLIBRARIES = libscitypes-disable.la
 
 if GUI
 pkglib_LTLIBRARIES += libscitypes.la
-# noinst_LTLIBRARIES = libscitypes-algo.la
+noinst_LTLIBRARIES = libscitypes-algo.la
 endif
 
 libscitypes_la_LDFLAGS = -version-number $(SCILAB_LIBRARY_VERSION) $(LD_FLAGS)  $(X_LIBS) $(X_EXTRA_LIBS)
@@ -73,7 +90,8 @@ INCLUDE_FLAGS = $(libscitypes_la_CFLAGS)
 
 
 #### SWIG Declaration ####
-SWIG_WRAPPERS = src/jni/sci_types.i
+SWIG_WRAPPERS = src/jni/sci_types.i \
+               src/jni/getScilabVariable.i
 
 
 
@@ -81,6 +99,10 @@ if SWIG
 BUILT_SOURCES=swig
 endif
 
+if GIWS
+BUILT_SOURCES += giws-exception
+endif
+
 #### types : gateway declaration ####
 libscitypes_la_sci_gatewaydir = $(mydatadir)/sci_gateway
 libscitypes_la_sci_gateway_DATA =
index 797b7cf..679b5aa 100644 (file)
@@ -115,24 +115,45 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)" \
        "$(DESTDIR)$(libscitypes_la_etcdir)" \
        "$(DESTDIR)$(libscitypes_la_rootdir)" \
        "$(DESTDIR)$(libscitypes_la_sci_gatewaydir)"
-LTLIBRARIES = $(pkglib_LTLIBRARIES)
+LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES)
+libscitypes_algo_la_LIBADD =
+am__objects_1 = libscitypes_algo_la-getScilabVariable_wrap.lo
+am__objects_2 =
+am__objects_3 = libscitypes_algo_la-ScilabToJava.lo \
+       libscitypes_algo_la-ScilabVariables.lo \
+       libscitypes_algo_la-ScilabVariablesRefresh.lo \
+       libscitypes_algo_la-ScilabPolynomialToJava.lo
+am_libscitypes_algo_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+       $(am__objects_3)
+libscitypes_algo_la_OBJECTS = $(am_libscitypes_algo_la_OBJECTS)
+@GUI_TRUE@am_libscitypes_algo_la_rpath =
 libscitypes_disable_la_LIBADD =
-am__objects_1 =
-am_libscitypes_disable_la_OBJECTS = $(am__objects_1)
+am_libscitypes_disable_la_OBJECTS = $(am__objects_2)
 libscitypes_disable_la_OBJECTS = $(am_libscitypes_disable_la_OBJECTS)
 libscitypes_disable_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) \
        $(libscitypes_disable_la_CFLAGS) $(CFLAGS) \
        $(libscitypes_disable_la_LDFLAGS) $(LDFLAGS) -o $@
-libscitypes_la_LIBADD =
-am_libscitypes_la_OBJECTS = $(am__objects_1) $(am__objects_1) \
-       $(am__objects_1)
+libscitypes_la_DEPENDENCIES =  \
+       $(top_builddir)/modules/commons/libscicommons.la \
+       $(top_builddir)/modules/api_scilab/libsciapi_scilab.la \
+       $(top_builddir)/modules/jvm/libscijvm.la
+am__objects_4 = libscitypes_la-getScilabVariable_wrap.lo
+am__objects_5 = libscitypes_la-ScilabToJava.lo \
+       libscitypes_la-ScilabVariables.lo \
+       libscitypes_la-ScilabVariablesRefresh.lo \
+       libscitypes_la-ScilabPolynomialToJava.lo
+am_libscitypes_la_OBJECTS = $(am__objects_4) $(am__objects_2) \
+       $(am__objects_5)
 libscitypes_la_OBJECTS = $(am_libscitypes_la_OBJECTS)
-libscitypes_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libscitypes_la_CFLAGS) \
-       $(CFLAGS) $(libscitypes_la_LDFLAGS) $(LDFLAGS) -o $@
+libscitypes_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(libscitypes_la_LDFLAGS) $(LDFLAGS) -o $@
 @GUI_TRUE@am_libscitypes_la_rpath = -rpath $(pkglibdir)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/modules/core/includes
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -142,11 +163,23 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
        --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
-SOURCES = $(libscitypes_disable_la_SOURCES) $(libscitypes_la_SOURCES)
-DIST_SOURCES = $(libscitypes_disable_la_SOURCES) \
-       $(libscitypes_la_SOURCES)
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libscitypes_algo_la_SOURCES) \
+       $(libscitypes_disable_la_SOURCES) $(libscitypes_la_SOURCES)
+DIST_SOURCES = $(libscitypes_algo_la_SOURCES) \
+       $(libscitypes_disable_la_SOURCES) $(libscitypes_la_SOURCES)
 DATA = $(libscitypes_la_etc_DATA) $(libscitypes_la_root_DATA) \
        $(libscitypes_la_sci_gateway_DATA)
+ETAGS = etags
+CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALL_LINGUAS = @ALL_LINGUAS@
@@ -408,7 +441,7 @@ libscitypes_la_root_DATA = license.txt
 #### types : init scripts ####
 libscitypes_la_etcdir = $(mydatadir)/etc
 libscitypes_la_etc_DATA = etc/types.quit \
-                               etc/types.start
+                         etc/types.start
 
 
 # Where all the Scilab stuff is installed (macros, help, ...)
@@ -474,25 +507,46 @@ HELP_CHAPTERDIR = help/
 HELP_CHAPTERFILE = addchapter.sce
 HELP_CHAPTERLANG = en_US fr_FR pt_BR
 TYPES_JNI_SOURCES = 
-TYPES_C_SOURCES = 
-TYPES_CPP_SOURCES = 
-GIWS_WRAPPERS = 
-@GIWS_TRUE@BUILT_SOURCES = giws
+TYPES_C_SOURCES = src/jni/getScilabVariable_wrap.c
+TYPES_CPP_SOURCES = src/cpp/ScilabToJava.cpp \
+                   src/jni/ScilabVariables.cpp \
+                   src/jni/ScilabVariablesRefresh.cpp \
+                   src/jni/ScilabPolynomialToJava.cpp
+
+GIWS_WRAPPERS = src/jni/ScilabVariables.giws.xml
+@GIWS_TRUE@BUILT_SOURCES = giws giws-exception
 @SWIG_TRUE@BUILT_SOURCES = swig
 
 #GATEWAY_C_SOURCES =
 
 #GATEWAY_CPP_SOURCES =
-libscitypes_la_CFLAGS = 
-libscitypes_la_CPPFLAGS = 
+libscitypes_la_CFLAGS = $(JAVA_JNI_INCLUDE) \
+                       -I$(srcdir)/includes
+
+libscitypes_la_CPPFLAGS = $(JAVA_JNI_INCLUDE) \
+                          -I$(srcdir)/src/jni \
+                          -I$(srcdir)/src/cpp \
+                          -I$(srcdir)/includes \
+                          -I$(top_srcdir)/modules/commons/src/jni/ \
+                          -I$(top_srcdir)/modules/jvm/includes/ \
+                          -I$(top_srcdir)/modules/output_stream/includes \
+                          -I$(top_srcdir)/modules/api_scilab/includes
+
 
 # Without the types module
 libscitypes_disable_la_CFLAGS = 
 TYPES_DISABLE_C_SOURCES = 
 libscitypes_disable_la_LDFLAGS = -version-number $(SCILAB_LIBRARY_VERSION) $(LD_FLAGS)
 libscitypes_disable_la_SOURCES = $(TYPES_DISABLE_C_SOURCES)
+libscitypes_algo_la_SOURCES = $(TYPES_C_SOURCES) $(TYPES_JNI_SOURCES) $(TYPES_CPP_SOURCES)
+libscitypes_algo_la_CFLAGS = $(libscitypes_la_CFLAGS)
+libscitypes_algo_la_CPPFLAGS = $(libscitypes_la_CPPFLAGS)
+libscitypes_la_LIBADD = $(top_builddir)/modules/commons/libscicommons.la \
+                       $(top_builddir)/modules/api_scilab/libsciapi_scilab.la \
+                       $(top_builddir)/modules/jvm/libscijvm.la
+
 pkglib_LTLIBRARIES = libscitypes-disable.la $(am__append_2)
-# noinst_LTLIBRARIES = libscitypes-algo.la
+@GUI_TRUE@noinst_LTLIBRARIES = libscitypes-algo.la
 libscitypes_la_LDFLAGS = -version-number $(SCILAB_LIBRARY_VERSION) $(LD_FLAGS)  $(X_LIBS) $(X_EXTRA_LIBS)
 libscitypes_la_SOURCES = $(TYPES_C_SOURCES) $(TYPES_JNI_SOURCES) $(TYPES_CPP_SOURCES)
 #libscitypes_algo_la_SOURCES = $(GATEWAY_C_SOURCES) $(GATEWAY_CPP_SOURCES)
@@ -502,7 +556,9 @@ CHECK_SRC = $(TYPES_C_SOURCES) $(GATEWAY_C_SOURCES)
 INCLUDE_FLAGS = $(libscitypes_la_CFLAGS)
 
 #### SWIG Declaration ####
-SWIG_WRAPPERS = src/jni/sci_types.i
+SWIG_WRAPPERS = src/jni/sci_types.i \
+               src/jni/getScilabVariable.i
+
 
 #### types : gateway declaration ####
 libscitypes_la_sci_gatewaydir = $(mydatadir)/sci_gateway
@@ -512,7 +568,7 @@ all: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
-.SUFFIXES: .sci .bin
+.SUFFIXES: .sci .bin .c .cpp .lo .o .obj
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.incl.am $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
@@ -543,6 +599,15 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
 install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
        @$(NORMAL_INSTALL)
        test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
@@ -574,6 +639,8 @@ clean-pkglibLTLIBRARIES:
          echo "rm -f \"$${dir}/so_locations\""; \
          rm -f "$${dir}/so_locations"; \
        done
+libscitypes-algo.la: $(libscitypes_algo_la_OBJECTS) $(libscitypes_algo_la_DEPENDENCIES) 
+       $(CXXLINK) $(am_libscitypes_algo_la_rpath) $(libscitypes_algo_la_OBJECTS) $(libscitypes_algo_la_LIBADD) $(LIBS)
 libscitypes-disable.la: $(libscitypes_disable_la_OBJECTS) $(libscitypes_disable_la_DEPENDENCIES) 
        $(libscitypes_disable_la_LINK) -rpath $(pkglibdir) $(libscitypes_disable_la_OBJECTS) $(libscitypes_disable_la_LIBADD) $(LIBS)
 libscitypes.la: $(libscitypes_la_OBJECTS) $(libscitypes_la_DEPENDENCIES) 
@@ -585,6 +652,129 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscitypes_algo_la-ScilabPolynomialToJava.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscitypes_algo_la-ScilabToJava.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscitypes_algo_la-ScilabVariables.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscitypes_algo_la-ScilabVariablesRefresh.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscitypes_algo_la-getScilabVariable_wrap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscitypes_la-ScilabPolynomialToJava.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscitypes_la-ScilabToJava.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscitypes_la-ScilabVariables.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscitypes_la-ScilabVariablesRefresh.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscitypes_la-getScilabVariable_wrap.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libscitypes_algo_la-getScilabVariable_wrap.lo: src/jni/getScilabVariable_wrap.c
+@am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_algo_la_CPPFLAGS) $(CPPFLAGS) $(libscitypes_algo_la_CFLAGS) $(CFLAGS) -MT libscitypes_algo_la-getScilabVariable_wrap.lo -MD -MP -MF $(DEPDIR)/libscitypes_algo_la-getScilabVariable_wrap.Tpo -c -o libscitypes_algo_la-getScilabVariable_wrap.lo `test -f 'src/jni/getScilabVariable_wrap.c' || echo '$(srcdir)/'`src/jni/getScilabVariable_wrap.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libscitypes_algo_la-getScilabVariable_wrap.Tpo $(DEPDIR)/libscitypes_algo_la-getScilabVariable_wrap.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='src/jni/getScilabVariable_wrap.c' object='libscitypes_algo_la-getScilabVariable_wrap.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_algo_la_CPPFLAGS) $(CPPFLAGS) $(libscitypes_algo_la_CFLAGS) $(CFLAGS) -c -o libscitypes_algo_la-getScilabVariable_wrap.lo `test -f 'src/jni/getScilabVariable_wrap.c' || echo '$(srcdir)/'`src/jni/getScilabVariable_wrap.c
+
+libscitypes_la-getScilabVariable_wrap.lo: src/jni/getScilabVariable_wrap.c
+@am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_la_CPPFLAGS) $(CPPFLAGS) $(libscitypes_la_CFLAGS) $(CFLAGS) -MT libscitypes_la-getScilabVariable_wrap.lo -MD -MP -MF $(DEPDIR)/libscitypes_la-getScilabVariable_wrap.Tpo -c -o libscitypes_la-getScilabVariable_wrap.lo `test -f 'src/jni/getScilabVariable_wrap.c' || echo '$(srcdir)/'`src/jni/getScilabVariable_wrap.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libscitypes_la-getScilabVariable_wrap.Tpo $(DEPDIR)/libscitypes_la-getScilabVariable_wrap.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='src/jni/getScilabVariable_wrap.c' object='libscitypes_la-getScilabVariable_wrap.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_la_CPPFLAGS) $(CPPFLAGS) $(libscitypes_la_CFLAGS) $(CFLAGS) -c -o libscitypes_la-getScilabVariable_wrap.lo `test -f 'src/jni/getScilabVariable_wrap.c' || echo '$(srcdir)/'`src/jni/getScilabVariable_wrap.c
+
+.cpp.o:
+@am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@  $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+
+libscitypes_algo_la-ScilabToJava.lo: src/cpp/ScilabToJava.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscitypes_algo_la-ScilabToJava.lo -MD -MP -MF $(DEPDIR)/libscitypes_algo_la-ScilabToJava.Tpo -c -o libscitypes_algo_la-ScilabToJava.lo `test -f 'src/cpp/ScilabToJava.cpp' || echo '$(srcdir)/'`src/cpp/ScilabToJava.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscitypes_algo_la-ScilabToJava.Tpo $(DEPDIR)/libscitypes_algo_la-ScilabToJava.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/ScilabToJava.cpp' object='libscitypes_algo_la-ScilabToJava.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscitypes_algo_la-ScilabToJava.lo `test -f 'src/cpp/ScilabToJava.cpp' || echo '$(srcdir)/'`src/cpp/ScilabToJava.cpp
+
+libscitypes_algo_la-ScilabVariables.lo: src/jni/ScilabVariables.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscitypes_algo_la-ScilabVariables.lo -MD -MP -MF $(DEPDIR)/libscitypes_algo_la-ScilabVariables.Tpo -c -o libscitypes_algo_la-ScilabVariables.lo `test -f 'src/jni/ScilabVariables.cpp' || echo '$(srcdir)/'`src/jni/ScilabVariables.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscitypes_algo_la-ScilabVariables.Tpo $(DEPDIR)/libscitypes_algo_la-ScilabVariables.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/jni/ScilabVariables.cpp' object='libscitypes_algo_la-ScilabVariables.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscitypes_algo_la-ScilabVariables.lo `test -f 'src/jni/ScilabVariables.cpp' || echo '$(srcdir)/'`src/jni/ScilabVariables.cpp
+
+libscitypes_algo_la-ScilabVariablesRefresh.lo: src/jni/ScilabVariablesRefresh.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscitypes_algo_la-ScilabVariablesRefresh.lo -MD -MP -MF $(DEPDIR)/libscitypes_algo_la-ScilabVariablesRefresh.Tpo -c -o libscitypes_algo_la-ScilabVariablesRefresh.lo `test -f 'src/jni/ScilabVariablesRefresh.cpp' || echo '$(srcdir)/'`src/jni/ScilabVariablesRefresh.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscitypes_algo_la-ScilabVariablesRefresh.Tpo $(DEPDIR)/libscitypes_algo_la-ScilabVariablesRefresh.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/jni/ScilabVariablesRefresh.cpp' object='libscitypes_algo_la-ScilabVariablesRefresh.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscitypes_algo_la-ScilabVariablesRefresh.lo `test -f 'src/jni/ScilabVariablesRefresh.cpp' || echo '$(srcdir)/'`src/jni/ScilabVariablesRefresh.cpp
+
+libscitypes_algo_la-ScilabPolynomialToJava.lo: src/jni/ScilabPolynomialToJava.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscitypes_algo_la-ScilabPolynomialToJava.lo -MD -MP -MF $(DEPDIR)/libscitypes_algo_la-ScilabPolynomialToJava.Tpo -c -o libscitypes_algo_la-ScilabPolynomialToJava.lo `test -f 'src/jni/ScilabPolynomialToJava.cpp' || echo '$(srcdir)/'`src/jni/ScilabPolynomialToJava.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscitypes_algo_la-ScilabPolynomialToJava.Tpo $(DEPDIR)/libscitypes_algo_la-ScilabPolynomialToJava.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/jni/ScilabPolynomialToJava.cpp' object='libscitypes_algo_la-ScilabPolynomialToJava.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscitypes_algo_la-ScilabPolynomialToJava.lo `test -f 'src/jni/ScilabPolynomialToJava.cpp' || echo '$(srcdir)/'`src/jni/ScilabPolynomialToJava.cpp
+
+libscitypes_la-ScilabToJava.lo: src/cpp/ScilabToJava.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscitypes_la-ScilabToJava.lo -MD -MP -MF $(DEPDIR)/libscitypes_la-ScilabToJava.Tpo -c -o libscitypes_la-ScilabToJava.lo `test -f 'src/cpp/ScilabToJava.cpp' || echo '$(srcdir)/'`src/cpp/ScilabToJava.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscitypes_la-ScilabToJava.Tpo $(DEPDIR)/libscitypes_la-ScilabToJava.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/ScilabToJava.cpp' object='libscitypes_la-ScilabToJava.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscitypes_la-ScilabToJava.lo `test -f 'src/cpp/ScilabToJava.cpp' || echo '$(srcdir)/'`src/cpp/ScilabToJava.cpp
+
+libscitypes_la-ScilabVariables.lo: src/jni/ScilabVariables.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscitypes_la-ScilabVariables.lo -MD -MP -MF $(DEPDIR)/libscitypes_la-ScilabVariables.Tpo -c -o libscitypes_la-ScilabVariables.lo `test -f 'src/jni/ScilabVariables.cpp' || echo '$(srcdir)/'`src/jni/ScilabVariables.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscitypes_la-ScilabVariables.Tpo $(DEPDIR)/libscitypes_la-ScilabVariables.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/jni/ScilabVariables.cpp' object='libscitypes_la-ScilabVariables.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscitypes_la-ScilabVariables.lo `test -f 'src/jni/ScilabVariables.cpp' || echo '$(srcdir)/'`src/jni/ScilabVariables.cpp
+
+libscitypes_la-ScilabVariablesRefresh.lo: src/jni/ScilabVariablesRefresh.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscitypes_la-ScilabVariablesRefresh.lo -MD -MP -MF $(DEPDIR)/libscitypes_la-ScilabVariablesRefresh.Tpo -c -o libscitypes_la-ScilabVariablesRefresh.lo `test -f 'src/jni/ScilabVariablesRefresh.cpp' || echo '$(srcdir)/'`src/jni/ScilabVariablesRefresh.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscitypes_la-ScilabVariablesRefresh.Tpo $(DEPDIR)/libscitypes_la-ScilabVariablesRefresh.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/jni/ScilabVariablesRefresh.cpp' object='libscitypes_la-ScilabVariablesRefresh.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscitypes_la-ScilabVariablesRefresh.lo `test -f 'src/jni/ScilabVariablesRefresh.cpp' || echo '$(srcdir)/'`src/jni/ScilabVariablesRefresh.cpp
+
+libscitypes_la-ScilabPolynomialToJava.lo: src/jni/ScilabPolynomialToJava.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscitypes_la-ScilabPolynomialToJava.lo -MD -MP -MF $(DEPDIR)/libscitypes_la-ScilabPolynomialToJava.Tpo -c -o libscitypes_la-ScilabPolynomialToJava.lo `test -f 'src/jni/ScilabPolynomialToJava.cpp' || echo '$(srcdir)/'`src/jni/ScilabPolynomialToJava.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscitypes_la-ScilabPolynomialToJava.Tpo $(DEPDIR)/libscitypes_la-ScilabPolynomialToJava.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/jni/ScilabPolynomialToJava.cpp' object='libscitypes_la-ScilabPolynomialToJava.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscitypes_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscitypes_la-ScilabPolynomialToJava.lo `test -f 'src/jni/ScilabPolynomialToJava.cpp' || echo '$(srcdir)/'`src/jni/ScilabPolynomialToJava.cpp
+
 mostlyclean-libtool:
        -rm -f *.lo
 
@@ -650,12 +840,58 @@ uninstall-libscitypes_la_sci_gatewayDATA:
        test -n "$$files" || exit 0; \
        echo " ( cd '$(DESTDIR)$(libscitypes_la_sci_gatewaydir)' && rm -f" $$files ")"; \
        cd "$(DESTDIR)$(libscitypes_la_sci_gatewaydir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
 tags: TAGS
-TAGS:
 
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
 ctags: CTAGS
-CTAGS:
-
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -726,12 +962,13 @@ maintainer-clean-generic:
 clean: clean-am
 
 clean-am: clean-generic clean-libtool clean-local \
-       clean-pkglibLTLIBRARIES mostlyclean-am
+       clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES mostlyclean-am
 
 distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
        -rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
-       distclean-local
+       distclean-local distclean-tags
 
 dvi: dvi-am
 
@@ -776,6 +1013,7 @@ install-ps-am:
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
        -rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
@@ -799,11 +1037,12 @@ uninstall-am: uninstall-libscitypes_la_etcDATA \
 
 .MAKE: all check check-am install install-am install-strip
 
-.PHONY: all all-am all-local check check-am check-local clean \
-       clean-generic clean-libtool clean-local \
-       clean-pkglibLTLIBRARIES distclean distclean-compile \
-       distclean-generic distclean-libtool distclean-local distdir \
-       dvi dvi-am html html-am info info-am install install-am \
+.PHONY: CTAGS GTAGS all all-am all-local check check-am check-local \
+       clean clean-generic clean-libtool clean-local \
+       clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-local distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
        install-data install-data-am install-data-local install-dvi \
        install-dvi-am install-exec install-exec-am install-html \
        install-html-am install-html-local install-info \
@@ -814,8 +1053,8 @@ uninstall-am: uninstall-libscitypes_la_etcDATA \
        install-ps-am install-strip installcheck installcheck-am \
        installdirs maintainer-clean maintainer-clean-generic \
        mostlyclean mostlyclean-compile mostlyclean-generic \
-       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
-       uninstall-libscitypes_la_etcDATA \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+       uninstall-am uninstall-libscitypes_la_etcDATA \
        uninstall-libscitypes_la_rootDATA \
        uninstall-libscitypes_la_sci_gatewayDATA \
        uninstall-pkglibLTLIBRARIES
diff --git a/scilab/modules/types/includes/GetScilabVariable.h b/scilab/modules/types/includes/GetScilabVariable.h
new file mode 100644 (file)
index 0000000..7d8d0e4
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __GETSCILABVARIABLE_H__
+#define __GETSCILABVARIABLE_H__
+
+void getScilabVariable(const char * scilabVarName, int swapRowCol, int handlerId);
+
+#endif
diff --git a/scilab/modules/types/includes/ScilabToJava.hxx b/scilab/modules/types/includes/ScilabToJava.hxx
new file mode 100644 (file)
index 0000000..82c19cc
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __SCILABTOJAVA_HXX__
+#define __SCILABTOJAVA_HXX__
+
+#include <string>
+#include <vector>
+
+#include "../src/jni/ScilabVariables.hxx"
+#include "../src/jni/ScilabVariablesRefresh.hxx"
+#include "../src/jni/ScilabPolynomialToJava.hxx"
+
+extern "C"
+{
+#include "stack-c.h"
+#include "Scierror.h"
+#include "api_scilab.h"
+#include "getScilabJavaVM.h"
+#include "GetScilabVariable.h"
+}
+
+using namespace org_scilab_modules_types;
+
+namespace org_modules_types
+{
+
+    /**
+     * @file
+     * @author Calixte DENIZET <calixte.denizet@scilab.org>
+     *
+     * Class to send Scilab datas in Jav environment
+     */
+    class ScilabToJava
+    {
+
+        static int refreshId;
+
+        /**
+         * Get a double dimension matrix from a one dimension one
+         * The result must be delete in using deleteMatrix
+         *
+         * @param T the data type
+         * @param row the row number
+         * @param col the col number
+         * @param data the data
+         * @param swaped true if the matrix is stored row by row
+         * @return the double dimension matrix
+         */
+        template<typename T>
+        static T ** getMatrix(int row, int col, T * data, bool swaped);
+
+        /**
+         * Get a double dimension matrix from a one dimension one
+         * The result must be delete in using deleteMatrix
+         * Each data element is casted from T to U
+         *
+         * @param T the in data type
+         * @param U the out data type
+         * @param row the row number
+         * @param col the col number
+         * @param data the data
+         * @param swaped true if the matrix is stored row by row
+         * @return the double dimension matrix
+         */
+        template<typename T, typename U>
+        static T ** getConvertedMatrix(int row, int col, U * data, bool swaped);
+
+        /**
+         * Convert a single row matrix into a double dimension one
+         *
+         * @param row the row number
+         * @param col the col number
+         * @return the double dimension matrix
+         */
+        template<typename T>
+        static T ** convertMatrix(int row, int col, T * data);
+
+        /**
+         * Delete a matrix previously created with getMatrix or getConvertedMatrix
+         * or convertMatrix
+         *
+         * @param T the in data type
+         * @param data the data
+         * @param swaped true if the matrix is stored row by row
+         */
+        template<typename T>
+        static void deleteMatrix(T ** data, bool swaped);
+
+        /**
+         * Send the list items
+         *
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param addr the address of the variable in the Scilab stack
+         * @param swaped true if the matrix is stored row by row
+         * @param handlerId the handler id
+         * @param pvApiCtx a pointer to the context
+         */
+        static bool sendItems(const std::string & name, std::vector<int> & indexes, int * addr, bool swaped, int handlerId, void * pvApiCtx);
+
+        /**
+         * Send a variable in the Java environment
+         *
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param addr the address of the variable in the Scilab stack
+         * @param swaped true if the matrix is stored row by row
+         * @param handlerId the handler id
+         * @param pvApiCtx a pointer to the context
+         */
+        static bool sendVariable(const std::string & name, std::vector<int> & indexes, int * addr, bool swaped, int handlerId, void * pvApiCtx);
+
+        /**
+         * Send a list or a tlist or mlist in the Java environment
+         *
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param type a char with the value 'l' or 'm' or 't'
+         * @param handlerId the handler id
+         */
+        static void sendVariable(const std::string & name, std::vector<int> & indexes, char type, int handlerId);
+
+        /**
+         * Close a list or a tlist or mlist in the Java environment
+         *
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param handlerId the handler id
+         */
+        static void closeList(std::vector<int> & indexes, int handlerId);
+
+        /**
+         * Send double sparse matrix
+         *
+         * @param T the type of the data
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param nbItem the number of non null elements
+         * @param nbItemRow the number by row of non null elements
+         * @param colPos the column position of the non null elements
+         * @param row the row number
+         * @param col the col number
+         * @param data the data
+         * @param handlerId the handler id
+         */
+        template<typename T>
+        static void sendVariable(const std::string & name, std::vector<int> & indexes, int nbItem, int * nbItemRow, int * colPos, int row, int col, T * data, int handlerId);
+
+        /**
+         * Send double, string, int* and uint64 matrices
+         *
+         * @param T the type of the data
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param row the row number
+         * @param col the col number
+         * @param data the data
+         * @param swaped true if the matrix is stored row by row
+         * @param handlerId the handler id
+         */
+        template<typename T>
+        static void sendVariable(const std::string & name, std::vector<int> & indexes, int row, int col, T * data, bool swaped, int handlerId);
+
+        /**
+         * Send boolean sparse matrix
+         *
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param nbItem the number of true elements
+         * @param nbItemRow the number by row of true elements
+         * @param colPos the column position of the true elements
+         * @param row the row number
+         * @param col the col number
+         * @param handlerId the handler id
+         */
+        static void sendBooleanSparseVariable(const std::string & name, std::vector<int> & indexes, int nbItem, int * nbItemRow, int * colPos, int row, int col, int handlerId);
+
+        /**
+         * Send uint* matrices (datas are converted to have the good Java type)
+         *
+         * @param T the type of the data
+         * @param U the type of the converted data
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param row the row number
+         * @param col the col number
+         * @param data the data
+         * @param swaped true if the matrix is stored row by row
+         * @param handlerId the handler id
+         */
+        template<typename T, typename U>
+        static void sendUnsignedVariableWithCast(const std::string & name, std::vector<int> & indexes, int row, int col, U * data, bool swaped, int handlerId);
+
+        /**
+         * Send uint* matrices
+         *
+         * @param T the type of the data
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param row the row number
+         * @param col the col number
+         * @param data the data
+         * @param swaped true if the matrix is stored row by row
+         * @param handlerId the handler id
+         */
+        template<typename T>
+        static void sendUnsignedVariable(const std::string & name, std::vector<int> & indexes, int row, int col, T * data, bool swaped, int handlerId);
+
+        /**
+         * Send boolean matrix (data are converted from int to bool)
+         *
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param row the row number
+         * @param col the col number
+         * @param data the data
+         * @param swaped true if the matrix is stored row by row
+         * @param handlerId the handler id
+         */
+        static void sendConvertedBooleanVariable(const std::string & name, std::vector<int> & indexes, int row, int col, int * data, bool swaped, int handlerId);
+
+        /**
+         * Send complex sparse matrix
+         *
+         * @param T the type of the data
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param nbItem the number of non null elements
+         * @param nbItemRow the number by row of non null elements
+         * @param colPos the column position of the non null elements
+         * @param row the row number
+         * @param col the col number
+         * @param real the real data
+         * @param img the imaginary data
+         * @param handlerId the handler id
+         */
+        template<typename T>
+        static void sendVariable(const std::string & name, std::vector<int> & indexes, int nbItem, int * nbItemRow, int * colPos, int row, int col, T * real, T * img, int handlerId);
+
+        /**
+         * Send complex matrices
+         *
+         * @param T the type of the data
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param row the row number
+         * @param col the col number
+         * @param real the real data
+         * @param img the imaginary data
+         * @param swaped true if the matrix is stored row by row
+         * @param handlerId the handler id
+         */
+        template<typename T>
+        static void sendVariable(const std::string & name, std::vector<int> & indexes, int row, int col, T * real, T * img, bool swaped, int handlerId);
+
+        /**
+         * Send double polynomial matrices
+         *
+         * @param T the type of the data
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param row the row number
+         * @param col the col number
+         * @param nbcoeff the number of coefficient of each polynomial
+         * @param data the data
+         * @param swaped true if the matrix is stored row by row
+         * @param handlerId the handler id
+         */
+        template<typename T>
+        static void sendVariable(const std::string & name, std::vector<int> & indexes, const char * varName, int row, int col, int * nbcoeff, T ** data, bool swaped, int handlerId);
+
+        /**
+         * Send complex polynomial matrices
+         *
+         * @param T the type of the data
+         * @param name the variable name
+         * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+         * @param row the row number
+         * @param col the col number
+         * @param nbcoeff the number of coefficient of each polynomial
+         * @param real the real data
+         * @param img the imaginary data
+         * @param swaped true if the matrix is stored row by row
+         * @param handlerId the handler id
+         */
+        template<typename T>
+        static void sendVariable(const std::string & name, std::vector<int> & indexes, const char * varName, int row, int col, int * nbcoeff, T ** real, T ** img, bool swaped, int handlerId);
+
+    public :
+
+        /**
+         * Send all the listened variables
+         */
+        static void sendAllListenedVariables();
+
+        /**
+         * Send a Scilab variable to the Java environment
+         *
+         * @param name the variable name
+         * @param swaped true if the matrix is stored row by row
+         * @param handlerId the handler id
+         * @return true if all was ok
+         */
+        static bool sendVariable(const std::string & name, bool swaped, int handlerId);
+
+        /**
+         * Send a Scilab variable to the Java environment
+         *
+         * @param name the variable name
+         * @param addr the variable address in the Scilab stack
+         * @param swaped true if the matrix is stored row by row
+         * @param handlerId the handler id
+         * @param pvApiCtx a pointer to the context
+         * @return true if all was ok
+         */
+        static bool sendVariable(const std::string & name, int * addr, bool swaped, int handlerId, void * pvApiCtx);
+
+    };
+}
+
+#endif
diff --git a/scilab/modules/types/src/cpp/ScilabToJava.cpp b/scilab/modules/types/src/cpp/ScilabToJava.cpp
new file mode 100644 (file)
index 0000000..311e332
--- /dev/null
@@ -0,0 +1,652 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "ScilabToJava.hxx"
+
+namespace org_modules_types
+{
+
+    int ScilabToJava::refreshId = -1;
+
+    void ScilabToJava::sendAllListenedVariables()
+    {
+        if (refreshId == -1)
+        {
+            refreshId = ScilabVariablesRefresh::getScilabVariablesRefreshId(getScilabJavaVM());
+        }
+
+        char ** vars = ScilabVariables::getAllListenedVariables(getScilabJavaVM());
+        while (*vars)
+        {
+            sendVariable(std::string(*vars), true, refreshId);
+            vars++;
+        }
+    }
+
+    bool ScilabToJava::sendVariable(const std::string & name, bool swaped, int handlerId)
+    {
+        int * addr = 0;
+        SciErr err;
+
+        if (!isNamedVarExist(0, name.c_str()))
+        {
+            return false;
+        }
+
+        err = getVarAddressFromName(0, name.c_str(), &addr);
+        if (err.iErr)
+        {
+            printError(&err, 0);
+            return false;
+        }
+
+        std::vector<int> indexes;
+        return sendVariable(name, indexes, addr, swaped, handlerId, 0);
+    }
+
+    bool ScilabToJava::sendVariable(const std::string & name, int * addr, bool swaped, int handlerId, void * pvApiCtx)
+    {
+        std::vector<int> indexes;
+        return sendVariable(name, indexes, addr, swaped, handlerId, pvApiCtx);
+    }
+
+    bool ScilabToJava::sendVariable(const std::string & name, std::vector<int> & indexes, int * addr, bool swaped, int handlerId, void * pvApiCtx)
+    {
+        SciErr err;
+
+        int type;
+        int row;
+        int col;
+        int prec;
+
+        // Double
+        double * real = 0;
+        double * img = 0;
+
+        // Integers
+        char * integers8 = 0;
+        unsigned char * uintegers8 = 0;
+        short * integers16 = 0;
+        unsigned short * uintegers16 = 0;
+        int * integers32 = 0;
+        unsigned int * uintegers32 = 0;
+
+        // Boolean
+        int * booleans = 0;
+
+#ifdef __SCILAB_INT64__
+        long long * integers64 = 0;
+        unsigned long long * uintegers64 = 0;
+#endif
+
+        // Strings
+        char ** strings = 0;
+
+        // Sparse
+        int nbItem;
+        int * nbItemRow = 0;
+        int * colPos = 0;
+
+        // Polynomial
+        double ** re = 0;
+        double ** im = 0;
+        int rc;
+        int * nbCoeffs = 0;
+        char varName[5];
+        int varNameLen;
+
+        // Lists
+        char listtype = 0;
+
+        err = getVarType(pvApiCtx, addr, &type);
+        if (err.iErr)
+        {
+            printError(&err, 0);
+            return false;
+        }
+
+        switch (type)
+        {
+        case sci_matrix :
+            if (isVarComplex(pvApiCtx, addr))
+            {
+                err = getComplexMatrixOfDouble(pvApiCtx, addr, &row, &col, &real, &img);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendVariable<double>(name, indexes, row, col, real, img, swaped, handlerId);
+            }
+            else
+            {
+                err = getMatrixOfDouble(pvApiCtx, addr, &row, &col, &real);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendVariable<double>(name, indexes, row, col, real, swaped, handlerId);
+            }
+            break;
+        case sci_ints :
+            err = getMatrixOfIntegerPrecision(pvApiCtx, addr, &prec);
+            if (err.iErr)
+            {
+                printError(&err, 0);
+                return false;
+            }
+
+            switch (prec)
+            {
+            case SCI_INT8 :
+                err = getMatrixOfInteger8(pvApiCtx, addr, &row, &col, &integers8);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendVariable<byte>(name, indexes, row, col, (byte *)integers8, swaped, handlerId);
+                break;
+            case SCI_UINT8 :
+                err = getMatrixOfUnsignedInteger8(pvApiCtx, addr, &row, &col, &uintegers8);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendUnsignedVariable<byte>(name, indexes, row, col, (byte *)uintegers8, swaped, handlerId);
+                break;
+            case SCI_INT16 :
+                err = getMatrixOfInteger16(pvApiCtx, addr, &row, &col, &integers16);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendVariable<short>(name, indexes, row, col, integers16, swaped, handlerId);
+                break;
+            case SCI_UINT16 :
+                err = getMatrixOfUnsignedInteger16(pvApiCtx, addr, &row, &col, &uintegers16);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendUnsignedVariable<short>(name, indexes, row, col, (short *)uintegers16, swaped, handlerId);
+                break;
+            case SCI_INT32 :
+                err = getMatrixOfInteger32(pvApiCtx, addr, &row, &col, &integers32);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendVariable<int>(name, indexes, row, col, integers32, swaped, handlerId);
+                break;
+            case SCI_UINT32 :
+                err = getMatrixOfUnsignedInteger32(pvApiCtx, addr, &row, &col, &uintegers32);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendUnsignedVariable<int>(name, indexes, row, col, (int *)uintegers32, swaped, handlerId);
+                break;
+
+#ifdef __SCILAB_INT64__
+            case SCI_INT64 :
+                err = getMatrixOfInteger64(pvApiCtx, addr, &row, &col, &integers64);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendVariable<long long>(name, indexes, row, col, integers64, swaped, handlerId);
+                break;
+            case SCI_UINT64 :
+                err = getMatrixOfUnsignedInteger64(pvApiCtx, addr, &row, &col, &uintegers64);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendUnsignedVariable<long long>(name, indexes, row, col, (long long *)uintegers64, swaped, handlerId);
+                break;
+#endif
+            default :
+                return false;
+            }
+            break;
+        case sci_strings :
+            if (getAllocatedMatrixOfString(pvApiCtx, addr, &row, &col, &strings))
+            {
+                return false;
+            }
+
+            sendVariable<char *>(name, indexes, row, col, strings, swaped, handlerId);
+            freeAllocatedMatrixOfString(row, col, strings);
+            break;
+        case sci_boolean :
+            err = getMatrixOfBoolean(pvApiCtx, addr, &row, &col, &booleans);
+            if (err.iErr)
+            {
+                printError(&err, 0);
+                return false;
+            }
+
+            sendConvertedBooleanVariable(name, indexes, row, col, booleans, swaped, handlerId);
+            break;
+        case sci_sparse :
+            if (isVarComplex(pvApiCtx, addr))
+            {
+                err = getComplexSparseMatrix(pvApiCtx, addr, &row, &col, &nbItem, &nbItemRow, &colPos, &real, &img);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return 0;
+                }
+
+                sendVariable<double>(name, indexes, nbItem, nbItemRow, colPos, row, col, real, img, handlerId);
+            }
+            else
+            {
+                err = getSparseMatrix(pvApiCtx, addr, &row, &col, &nbItem, &nbItemRow, &colPos, &real);
+                if (err.iErr)
+                {
+                    printError(&err, 0);
+                    return 0;
+                }
+
+                sendVariable<double>(name, indexes, nbItem, nbItemRow, colPos, row, col, real, handlerId);
+            }
+            break;
+        case sci_boolean_sparse :
+            err = getBooleanSparseMatrix(pvApiCtx, addr, &row, &col, &nbItem, &nbItemRow, &colPos);
+            if (err.iErr)
+            {
+                printError(&err, 0);
+                return 0;
+            }
+
+            sendBooleanSparseVariable(name, indexes, nbItem, nbItemRow, colPos, row, col, handlerId);
+            delete[] integers8;
+            break;
+        case sci_poly :
+            err = getPolyVariableName(pvApiCtx, addr, varName, &varNameLen);
+            if (err.iErr)
+            {
+                printError(&err, 0);
+                return false;
+            }
+
+            if (isVarComplex(pvApiCtx, addr))
+            {
+                getComplexMatrixOfPoly(pvApiCtx, addr, &row, &col, 0, 0, 0);
+                rc = row * col;
+                nbCoeffs = new int[rc];
+
+                getComplexMatrixOfPoly(pvApiCtx, addr, &row, &col, nbCoeffs, 0, 0);
+                re = new double*[rc];
+                for (int i = 0; i < rc; i++)
+                {
+                    re[i] = new double[nbCoeffs[i]];
+                }
+
+                im = new double*[rc];
+                for (int i = 0; i < rc; i++)
+                {
+                    im[i] = new double[nbCoeffs[i]];
+                }
+                err = getComplexMatrixOfPoly(pvApiCtx, addr, &row, &col, nbCoeffs, re, im);
+                if (err.iErr)
+                {
+                    for (int i = 0; i < rc; i++)
+                    {
+                        delete[] im[i];
+                        delete[] re[i];
+                    }
+                    delete[] im;
+                    delete[] re;
+                    delete[] nbCoeffs;
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendVariable<double>(name, indexes, varName, row, col, nbCoeffs, re, im, swaped, handlerId);
+                for (int i = 0; i < rc; i++)
+                {
+                    delete[] im[i];
+                }
+                delete[] im;
+            }
+            else
+            {
+                getMatrixOfPoly(pvApiCtx, addr, &row, &col, 0, 0);
+                rc = row * col;
+                nbCoeffs = new int[rc];
+
+                getMatrixOfPoly(pvApiCtx, addr, &row, &col, nbCoeffs, 0);
+                re = new double*[rc];
+                for (int i = 0; i < rc; i++)
+                {
+                    re[i] = new double[nbCoeffs[i]];
+                }
+
+                err = getMatrixOfPoly(pvApiCtx, addr, &row, &col, nbCoeffs, re);
+                if (err.iErr)
+                {
+                    for (int i = 0; i < rc; i++)
+                    {
+                        delete[] re[i];
+                    }
+                    delete[] re;
+                    delete[] nbCoeffs;
+                    printError(&err, 0);
+                    return false;
+                }
+
+                sendVariable<double>(name, indexes, varName, row, col, nbCoeffs, re, swaped, handlerId);
+            }
+            for (int i = 0; i < rc; i++)
+            {
+                delete[] re[i];
+            }
+            delete[] re;
+            delete[] nbCoeffs;
+
+            break;
+        case sci_list :
+            listtype = 'l';
+            break;
+        case sci_mlist :
+            listtype = 'm';
+            break;
+        case sci_tlist :
+            listtype = 't';
+            break;
+        default :
+            return false;
+        }
+
+        if (listtype)
+        {
+            sendVariable(name, indexes, listtype, handlerId);
+            bool b = sendItems(name, indexes, addr, swaped, handlerId, pvApiCtx);
+            closeList(indexes, handlerId);
+            return b;
+        }
+
+        return true;
+    }
+
+    inline bool ScilabToJava::sendItems(const std::string & name, std::vector<int> & indexes, int * addr, bool swaped, int handlerId, void * pvApiCtx)
+    {
+        int nbItems = 0;
+        int * itemAddr = 0;
+
+        SciErr err = getListItemNumber(pvApiCtx, addr, &nbItems);
+        if (err.iErr)
+        {
+            printError(&err, 0);
+            return false;
+        }
+
+        for (int i = 1; i <= nbItems; i++)
+        {
+            err = getListItemAddress(pvApiCtx, addr, i, &itemAddr);
+            if (err.iErr)
+            {
+                printError(&err, 0);
+                return false;
+            }
+
+            indexes.push_back(i);
+
+            if (!sendVariable(name, indexes, itemAddr, swaped, handlerId, pvApiCtx))
+            {
+                return false;
+            }
+
+            indexes.pop_back();
+        }
+
+        return true;
+    }
+
+    // Lists
+    inline void ScilabToJava::sendVariable(const std::string & name, std::vector<int> & indexes, char type, int handlerId)
+    {
+        ScilabVariables::sendData(getScilabJavaVM(), (char *)name.c_str(), &(indexes[0]), indexes.size(), type, handlerId);
+    }
+
+    inline void ScilabToJava::closeList(std::vector<int> & indexes, int handlerId)
+    {
+        ScilabVariables::closeList(getScilabJavaVM(), &(indexes[0]), indexes.size(), handlerId);
+    }
+
+    // Sparse
+    template<typename T>
+    inline void ScilabToJava::sendVariable(const std::string & name, std::vector<int> & indexes, int nbItem, int * nbItemRow, int * colPos, int row, int col, T * data, int handlerId)
+    {
+        int * colPos_ = new int[nbItem];
+        for (int i = 0; i < nbItem; i++)
+        {
+            colPos_[i] = colPos[i] - 1;
+        }
+        ScilabVariables::sendData(getScilabJavaVM(), (char *)name.c_str(), &(indexes[0]), indexes.size(), row, col, nbItem, nbItemRow, row, colPos_, nbItem, data, nbItem, handlerId);
+        delete[] colPos_;
+    }
+
+    // Double, String, ...
+    template<typename T>
+    inline void ScilabToJava::sendVariable(const std::string & name, std::vector<int> & indexes, int row, int col, T * data, bool swaped, int handlerId)
+    {
+        T ** addr = getMatrix<T>(row, col, data, swaped);
+        ScilabVariables::sendData(getScilabJavaVM(), (char *)name.c_str(), &(indexes[0]), indexes.size(), addr, row, col, swaped, handlerId);
+        deleteMatrix<T>(addr, swaped);
+    }
+
+    // Boolean sparse
+    inline void ScilabToJava::sendBooleanSparseVariable(const std::string & name, std::vector<int> & indexes, int nbItem, int * nbItemRow, int * colPos, int row, int col, int handlerId)
+    {
+        int * colPos_ = new int[nbItem];
+        for (int i = 0; i < nbItem; i++)
+        {
+            colPos_[i] = colPos[i] - 1;
+        }
+        ScilabVariables::sendData(getScilabJavaVM(), (char *)name.c_str(), &(indexes[0]), indexes.size(), row, col, nbItem, nbItemRow, row, colPos_, nbItem, handlerId);
+        delete[] colPos_;
+    }
+
+    // uint* matrix with a bigger storage
+    // TODO : change the Java wrapping
+    template<typename T, typename U>
+    inline void ScilabToJava::sendUnsignedVariableWithCast(const std::string & name, std::vector<int> & indexes, int row, int col, U * data, bool swaped, int handlerId)
+    {
+        T ** addr = getConvertedMatrix<T, U>(row, col, data, swaped);
+        ScilabVariables::sendUnsignedData(getScilabJavaVM(), (char *)name.c_str(), &(indexes[0]), indexes.size(), addr, row, col, swaped, handlerId);
+        deleteMatrix<T>(addr, swaped);
+    }
+
+    // uint*
+    template<typename T>
+    inline void ScilabToJava::sendUnsignedVariable(const std::string & name, std::vector<int> & indexes, int row, int col, T * data, bool swaped, int handlerId)
+    {
+        T ** addr = getMatrix<T>(row, col, data, swaped);
+        ScilabVariables::sendUnsignedData(getScilabJavaVM(), (char *)name.c_str(), &(indexes[0]), indexes.size(), addr, row, col, swaped, handlerId);
+        deleteMatrix<T>(addr, swaped);
+    }
+
+    // Boolean
+    inline void ScilabToJava::sendConvertedBooleanVariable(const std::string & name, std::vector<int> & indexes, int row, int col, int * data, bool swaped, int handlerId)
+    {
+        bool ** addr = getConvertedMatrix<bool, int>(row, col, data, swaped);
+        ScilabVariables::sendData(getScilabJavaVM(), (char *)name.c_str(), &(indexes[0]), indexes.size(), addr, row, col, swaped, handlerId);
+        deleteMatrix<bool>(addr, swaped);
+    }
+
+    // Complex sparse
+    template<typename T>
+    inline void ScilabToJava::sendVariable(const std::string & name, std::vector<int> & indexes, int nbItem, int * nbItemRow, int * colPos, int row, int col, T * real, T * img, int handlerId)
+    {
+        int * colPos_ = new int[nbItem];
+        for (int i = 0; i < nbItem; i++)
+        {
+            colPos_[i] = colPos[i] - 1;
+        }
+        ScilabVariables::sendData(getScilabJavaVM(), (char *)name.c_str(), &(indexes[0]), indexes.size(),  row, col, nbItem, nbItemRow, row, colPos_, nbItem, real, nbItem, img, nbItem, handlerId);
+        delete[] colPos_;
+    }
+
+    // Complex
+    template<typename T>
+    inline void ScilabToJava::sendVariable(const std::string & name, std::vector<int> & indexes, int row, int col, T * real, T * img, bool swaped, int handlerId)
+    {
+        T ** re = getMatrix<T>(row, col, real, swaped);
+        T ** im = getMatrix<T>(row, col, img, swaped);
+        ScilabVariables::sendData(getScilabJavaVM(), (char *)name.c_str(), &(indexes[0]), indexes.size(), re, row, col, im, row, col, swaped, handlerId);
+        deleteMatrix<T>(re, swaped);
+        deleteMatrix<T>(im, swaped);
+    }
+
+    // Polynomial
+    template<typename T>
+    inline void ScilabToJava::sendVariable(const std::string & name, std::vector<int> & indexes, const char * varName, int row, int col, int * nbcoeff, T ** data, bool swaped, int handlerId)
+    {
+        T *** addr = getMatrix<T*>(row, col, data, swaped);
+        int ** nbc = getMatrix<int>(row, col, nbcoeff, swaped);
+        ScilabPolynomialToJava::sendPolynomial(getScilabJavaVM(), (char *)name.c_str(), &(indexes[0]), indexes.size(), (char *)varName, addr, row, col, nbc, swaped, handlerId);
+        deleteMatrix<T*>(addr, swaped);
+        deleteMatrix<int>(nbc, swaped);
+    }
+
+    // Complex polynomial
+    template<typename T>
+    inline void ScilabToJava::sendVariable(const std::string & name, std::vector<int> & indexes, const char * varName, int row, int col, int * nbcoeff, T ** real, T ** img, bool swaped, int handlerId)
+    {
+        T *** re = getMatrix<T*>(row, col, real, swaped);
+        T *** im = getMatrix<T*>(row, col, img, swaped);
+        int ** nbc = getMatrix<int>(row, col, nbcoeff, swaped);
+        ScilabPolynomialToJava::sendPolynomial(getScilabJavaVM(), (char *)name.c_str(), &(indexes[0]), indexes.size(), (char *)varName, re, im, row, col, nbc, swaped, handlerId);
+        deleteMatrix<T*>(re, swaped);
+        deleteMatrix<T*>(im, swaped);
+        deleteMatrix<int>(nbc, swaped);
+    }
+
+    template<typename T>
+    inline T ** ScilabToJava::getMatrix(int row, int col, T * data, bool swaped)
+    {
+        T ** addr = 0;
+
+        if (row && col)
+        {
+            if (swaped)
+            {
+                T * d = new T[row * col];
+                for (int i = 0; i < row; i++)
+                {
+                    for (int j = 0; j < col; j++)
+                    {
+                        d[i * col + j] = data[j * row + i];
+                    }
+                }
+                addr = convertMatrix<T>(row, col, d);
+            }
+            else
+            {
+                addr = convertMatrix<T>(col, row, data);
+            }
+        }
+
+        return addr;
+    }
+
+    template<typename T, typename U>
+    inline T ** ScilabToJava::getConvertedMatrix(int row, int col, U * data, bool swaped)
+    {
+        T ** addr = 0;
+
+        if (row && col)
+        {
+            int rc = row * col;
+            T * d = new T[rc];
+            if (swaped)
+            {
+                for (int i = 0; i < row; i++)
+                {
+                    for (int j = 0; j < col; j++)
+                    {
+                        d[i * col + j] = static_cast<T>(data[j * row + i]);
+                    }
+                }
+                addr = convertMatrix<T>(row, col, d);
+            }
+            else
+            {
+                for (int i = 0; i < rc; i++)
+                {
+                    d[i] = static_cast<T>(data[i]);
+                }
+                addr = convertMatrix<T>(col, row, d);
+            }
+        }
+
+        return addr;
+    }
+
+    template<typename T>
+    inline T ** ScilabToJava::convertMatrix(int row, int col, T * data)
+    {
+        T ** addr = 0;
+
+        if (row && col)
+        {
+            addr = new T*[row];
+            *addr = data;
+            for (int i = 1; i < row; i++)
+            {
+                addr[i] = addr[i - 1] + col;
+            }
+        }
+
+        return addr;
+    }
+
+    template<typename T>
+    inline void ScilabToJava::deleteMatrix(T ** data, bool swaped)
+    {
+        if (data)
+        {
+            if (swaped && *data)
+            {
+                delete[] *data;
+            }
+            delete[] data;
+        }
+    }
+}
+
+void getScilabVariable(const char * variableName, int swapRowCol, int handlerId)
+{
+    org_modules_types::ScilabToJava::sendVariable(std::string(variableName), swapRowCol != 0, handlerId);
+}
diff --git a/scilab/modules/types/src/java/org/scilab/modules/types/GetScilabVariable.java b/scilab/modules/types/src/java/org/scilab/modules/types/GetScilabVariable.java
new file mode 100644 (file)
index 0000000..45e4ea7
--- /dev/null
@@ -0,0 +1,30 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 2.0.4
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package org.scilab.modules.types;
+
+
+ /**
+   * Connector for Javasci v2.
+   * This class should <b>not</b> be used directly
+   * @see org.scilab.modules.javasci.Scilab
+   * @author DIGITEO - Sylvestre LEDRU
+   */
+public class GetScilabVariable {
+
+ /**
+   * Constructor
+   */
+ protected GetScilabVariable() {
+    throw new UnsupportedOperationException();
+ }
+  public static void getScilabVariable(String variableName, int arg1, int arg2) {
+    GetScilabVariableJNI.getScilabVariable(variableName, arg1, arg2);
+  }
+
+}
diff --git a/scilab/modules/types/src/java/org/scilab/modules/types/GetScilabVariableJNI.java b/scilab/modules/types/src/java/org/scilab/modules/types/GetScilabVariableJNI.java
new file mode 100644 (file)
index 0000000..4fa1bf2
--- /dev/null
@@ -0,0 +1,42 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 2.0.4
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package org.scilab.modules.types;
+
+
+/* It is generated code. Disable checkstyle */
+//CHECKSTYLE:OFF
+ /**
+   * Connector for Javasci v2.
+   * This class should <b>not</b> be used directly
+   * @see org.scilab.modules.javasci.Scilab
+   * @author DIGITEO - Sylvestre LEDRU
+   */
+class GetScilabVariableJNI {
+
+  /**
+    * Constructor
+    */
+  protected GetScilabVariableJNI() {
+    throw new UnsupportedOperationException();
+  }
+
+  static {
+    try {
+        System.loadLibrary("scitypes");
+    } catch (SecurityException e) {
+        System.err.println("A security manager exists and does not allow the loading of the specified dynamic library :");
+        e.printStackTrace(System.err);
+    } catch (UnsatisfiedLinkError e)    {
+        System.err.println("The native library commons does not exist or cannot be found.");
+        e.printStackTrace(System.err);
+    }
+  }
+
+  public final static native void getScilabVariable(String jarg1, int jarg2, int jarg3);
+}
index 5b2f8db..3c38b2a 100644 (file)
@@ -2,13 +2,14 @@
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2009-2009 - DIGITEO - Bruno JOFRET
  *  Copyright (C) 2010-2010 - DIGITEO - Clement DAVID
- * 
+ *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
+ *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
  *  you should have received as part of this distribution.  The terms
  *  are also available at
  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- * 
+ *
  */
 
 package org.scilab.modules.types;
@@ -18,7 +19,7 @@ import java.util.Arrays;
 /**
  * This class provides a representation on the Scilab boolean datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could 
+ * This class is {@link java.io.Serializable} and any modification could
  * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
@@ -30,147 +31,175 @@ import java.util.Arrays;
  */
 public class ScilabBoolean implements ScilabType {
 
-       private static final long serialVersionUID = 6511497080095473901L;
-       private static final ScilabTypeEnum type = ScilabTypeEnum.sci_boolean;
-
-       /* the boolean data */
-       private boolean[][] data;
-
-       /**
-        * Create an empty object
-        */
-       public ScilabBoolean() {
-               data = null;
-       }
-       
-       /**
-        * Create an object from an array of array of boolean
-        *
-        * @param data the array of boolean
-        */
-       public ScilabBoolean(boolean[][] data) {
-               this.data = data;
-       }
-       
-       /**
-        * Create a scalar boolean from a boolean
-        *
-        * @param value the boolean
-        */
-       public ScilabBoolean(boolean value) {
-               this.data = new boolean[1][1];
-               this.data[0][0] = value;
-       }
-
-       /**
-        * Change the value with the provided data
-        *
-        * @param data array of boolean
-        */
-       public void setData(boolean[][] data) {
-               this.data = data;
-       }
-
-       /**
-        * Return the data
-        *
-        * @return the array of array of boolean
-        */
-       public boolean[][] getData() {
-               return data;
-       }
-
-    /** 
-     * Return the type of Scilab 
+    private static final long serialVersionUID = 6511497080095473901L;
+    private static final ScilabTypeEnum type = ScilabTypeEnum.sci_boolean;
+
+    /* the boolean data */
+    private boolean[][] data;
+    
+    private String varName;
+    private boolean swaped;
+
+    /**
+     * Create an empty object
+     */
+    public ScilabBoolean() {
+        data = null;
+    }
+
+    /**
+     * Create an object from an array of array of boolean
+     *
+     * @param data the array of boolean
+     */
+    public ScilabBoolean(boolean[][] data) {
+        this.data = data;
+    }
+
+    /**
+     * Create an object from an array of array of boolean
+     *
+     * @param data the array of boolean
+     */
+    public ScilabBoolean(String varName, boolean[][] data, boolean swaped) {
+       this.varName = varName;
+        this.data = data;
+       this.swaped = swaped;
+    }
+
+    /**
+     * Create a scalar boolean from a boolean
+     *
+     * @param value the boolean
+     */
+    public ScilabBoolean(boolean value) {
+        this.data = new boolean[1][1];
+        this.data[0][0] = value;
+    }
+
+    /**
+     * Change the value with the provided data
+     *
+     * @param data array of boolean
+     */
+    public void setData(boolean[][] data) {
+        this.data = data;
+    }
+
+    /**
+     * Return the data
+     *
+     * @return the array of array of boolean
+     */
+    public boolean[][] getData() {
+        return data;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getVarName() {
+        return varName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isSwaped() {
+        return swaped;
+    }
+
+    /**
+     * Return the type of Scilab
      * @return the type of Scilab
      * @since 5.4.0
      */
     @Override
-       public ScilabTypeEnum getType() {
+    public ScilabTypeEnum getType() {
         return type;
     }
 
-       /**
-        * Return the height (number of element) of the stored data
-        *
-        * @return the height
-        */
-       @Override
-       public int getHeight() {
-               if (data == null) {
-                       return 0;
-               }
-               return data.length;
-       }
-
-       /**
-        * Return the width (number of element) of the stored data
-        *
-        * @return the width
-        */
-       @Override
-       public int getWidth() {
-               if (data == null) {
-                       return 0;
-               }
-               return data[0].length;
-       }
-
-       /**
-        * If it is empty / uninitialized
-        *
-        * @return true if empty
-        */
-       @Override
-       public boolean isEmpty() {
-               return (data == null);
-       }
-       
-
-       /**
-        * @see org.scilab.modules.types.ScilabType#equals(Object)
-        */
-       @Override
-       public boolean equals(Object obj) {
-               if (obj instanceof ScilabBoolean) {
-                       return Arrays.deepEquals(this.getData(), ((ScilabBoolean)obj).getData());
-               } else {
-                       return false;
-               }
-       }
-
-       /**
-        * Display the representation in the Scilab language of the type<br />
-        * Note that the representation can be copied/pasted straight into Scilab 
+    /**
+     * Return the height (number of element) of the stored data
+     *
+     * @return the height
+     */
+    @Override
+    public int getHeight() {
+        if (data == null) {
+            return 0;
+        }
+        return data.length;
+    }
+
+    /**
+     * Return the width (number of element) of the stored data
+     *
+     * @return the width
+     */
+    @Override
+    public int getWidth() {
+        if (data == null) {
+            return 0;
+        }
+        return data[0].length;
+    }
+
+    /**
+     * If it is empty / uninitialized
+     *
+     * @return true if empty
+     */
+    @Override
+    public boolean isEmpty() {
+        return (data == null);
+    }
+
+
+    /**
+     * @see org.scilab.modules.types.ScilabType#equals(Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof ScilabBoolean) {
+            return Arrays.deepEquals(this.getData(), ((ScilabBoolean)obj).getData());
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Display the representation in the Scilab language of the type<br />
+     * Note that the representation can be copied/pasted straight into Scilab
      *
-        * @return the pretty print
-        */
-       @Override
-       public String toString() {
-               StringBuilder result = new StringBuilder();
-               
-               if (isEmpty()) {
-                       result.append("[]");
-                       return result.toString();
-               }
-
-               result.append("[");
-               for (int i = 0; i < getHeight(); ++i) {
-                       for (int j = 0; j < getWidth(); ++j) {
-                               if (getData()[i][j]) {
-                                       result.append("%t");
-                               } else {
-                                       result.append("%f");
-                               }
-                               if (j != getWidth() - 1) {
-                                       result.append(", ");
-                               }
-                       }
-                       if (i != getHeight() - 1) {
-                               result.append(" ; ");
-                       }
-               }
-               result.append("]");
-               return result.toString();
-       }
+     * @return the pretty print
+     */
+    @Override
+    public String toString() {
+        StringBuilder result = new StringBuilder();
+
+        if (isEmpty()) {
+            result.append("[]");
+            return result.toString();
+        }
+
+        result.append("[");
+        for (int i = 0; i < getHeight(); ++i) {
+            for (int j = 0; j < getWidth(); ++j) {
+                if (getData()[i][j]) {
+                    result.append("%t");
+                } else {
+                    result.append("%f");
+                }
+                if (j != getWidth() - 1) {
+                    result.append(", ");
+                }
+            }
+            if (i != getHeight() - 1) {
+                result.append(" ; ");
+            }
+        }
+        result.append("]");
+        return result.toString();
+    }
 }
diff --git a/scilab/modules/types/src/java/org/scilab/modules/types/ScilabBooleanSparse.java b/scilab/modules/types/src/java/org/scilab/modules/types/ScilabBooleanSparse.java
new file mode 100644 (file)
index 0000000..ded0bc8
--- /dev/null
@@ -0,0 +1,318 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.types;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * This class provides a representation on the Scilab Boolean Sparse datatype<br>
+ * <br>
+ * This class is {@link java.io.Serializable} and any modification could
+ * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * <br>
+ * //TODO Sly : ajouter de la doc
+ * @see org.scilab.modules.javasci.Scilab
+ */
+public class ScilabBooleanSparse implements ScilabType {
+
+    private static final long serialVersionUID = 879625048944109684L;
+    private static final ScilabTypeEnum type = ScilabTypeEnum.sci_boolean_sparse;
+
+    private int rows;
+    private int cols;
+    private int nbItem;
+    private int[] nbItemRow;
+    private int[] colPos;
+    private String varName;
+
+    /**
+     * Default constructor
+     */
+    public ScilabBooleanSparse() { }
+
+    /**
+     * Constructor with a unique value.
+     * @param data the unique value
+     */
+    public ScilabBooleanSparse(boolean data) {
+        if (data) {
+            nbItem = 1;
+            rows = cols = 1;
+            nbItemRow = new int[]{1};
+            colPos = new int[]{0};
+        }
+    }
+
+    /**
+     * Constructor
+     *
+     * @param rows the number of rows
+     * @param cols the number of cols
+     * @param nbItem the number of true items
+     * @param nbItemRow contains the number of true in each rows
+     * @param colPos the column position of each true
+     */
+    public ScilabBooleanSparse(int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos) {
+        this.rows = rows;
+        this.cols = cols;
+        this.nbItem = nbItem;
+        this.nbItemRow = nbItemRow;
+        this.colPos = colPos;
+    }
+
+    /**
+     * Constructor with a matrix of real data.
+     *
+     * @param data the data
+     */
+    public ScilabBooleanSparse(boolean[][] data) {
+        if (data.length != 0 && data[0].length != 0) {
+            rows = data.length;
+            cols = data[0].length;
+            nbItemRow = new int[rows];
+            List<Integer> listCol = new ArrayList<Integer>();
+
+            for (int i = 0; i < rows; i++) {
+                for (int j = 0; j < cols; j++) {
+                    if (data[i][j]) {
+                        ++nbItem;
+                        ++nbItemRow[i];
+                        listCol.add(j);
+                    }
+                }
+            }
+
+            colPos = new int[listCol.size()];
+            int i = 0;
+            for (Integer c : listCol) {
+                colPos[i++] = c;
+            }
+        }
+    }
+
+    /**
+     * Constructor
+     *
+     * @param varName the variable name
+     * @param rows the number of rows
+     * @param cols the number of cols
+     * @param nbItem the number of true items
+     * @param nbItemRow contains the number of true in each rows
+     * @param colPos the column position of each true
+     */
+    public ScilabBooleanSparse(String varName, int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos) {
+        this(rows, cols, nbItem, nbItemRow, colPos);
+        this.varName = varName;
+    }
+
+    /**
+     * Return the type of Scilab
+     * @return the type of Scilab
+     * @since 5.4.0
+     */
+    @Override
+    public ScilabTypeEnum getType() {
+        return type;
+    }
+
+    /**
+     * Check the emptiness of the associated data.
+     * @return true, if the associated data array is empty.
+     */
+    @Override
+    public boolean isEmpty() {
+        return rows == 0 && cols == 0;
+    }
+
+    /**
+     * Get the real part of the data.
+     *
+     * @return the real part.
+     */
+    public int getNbNonNullItems() {
+        return nbItem;
+    }
+
+    /**
+     * Set the real part of the data.
+     *
+     * @param realPart the real part.
+     */
+    public void setNbNonNullItems(int nbItem) {
+        this.nbItem = nbItem;
+    }
+
+    /**
+     * Get the real part of the data.
+     *
+     * @return the real part.
+     */
+    public int[] getNbItemRow() {
+        return nbItemRow;
+    }
+
+    /**
+     * Set the real part of the data.
+     *
+     * @param realPart the real part.
+     */
+    public void setNbItemRow(int[] nbItemRow) {
+        this.nbItemRow = nbItemRow;
+    }
+
+    /**
+     * Get the real part of the data.
+     *
+     * @return the real part.
+     */
+    public int[] getColPos() {
+        return colPos;
+    }
+
+    /**
+     * Set the real part of the data.
+     *
+     * @param realPart the real part.
+     */
+    public void setColPos(int[] colPos) {
+        this.colPos = colPos;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getVarName() {
+        return varName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isSwaped() {
+        return false;
+    }
+
+    /**
+     * Get the real part of the full sparse matrix
+     *
+     * @return the full real matrix
+     */
+    public boolean[][] getFullMatrix() {
+        int prev = 0;
+        int j = 0;
+        boolean[][] b = new boolean[rows][cols];
+        for (int i = 0; i < rows; i++) {
+            for (; j < prev + nbItemRow[i]; j++) {
+                b[i][colPos[j]] = true;
+            }
+            prev += nbItemRow[i];
+        }
+
+        return b;
+    }
+
+    /**
+     * Get complex matrix as a serialized form
+     *
+     * @return the serialized matrix with complex values
+     */
+    // TODO Sly : faire qque chose ici...
+    public boolean[] getSerializedBooleanSparseMatrix() {
+        return new boolean[0];
+    }
+
+
+    /**
+     * @return the height of the data matrix
+     * @see org.scilab.modules.types.ScilabType#getHeight()
+     */
+    @Override
+    public int getHeight() {
+        return rows;
+    }
+
+    /**
+     * @return the width of the data matrix
+     * @see org.scilab.modules.types.ScilabType#getWidth()
+     */
+    @Override
+    public int getWidth() {
+        return cols;
+    }
+
+    /**
+     * @see org.scilab.modules.types.ScilabType#equals(Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof ScilabBooleanSparse) {
+            ScilabBooleanSparse sciSparse = (ScilabBooleanSparse) obj;
+            return this.getNbNonNullItems() == sciSparse.getNbNonNullItems() &&
+                Arrays.equals(this.getNbItemRow(), sciSparse.getNbItemRow()) &&
+                Arrays.equals(this.getColPos(), sciSparse.getColPos());
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Display the representation in the Scilab language of the type<br />
+     * Note that the representation can be copied/pasted straight into Scilab
+     *
+     * @return a Scilab-like String representation of the data.
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        StringBuilder result = new StringBuilder();
+
+        if (isEmpty()) {
+            result.append("[]");
+            return result.toString();
+        }
+
+        result.append("sparse([");
+        int j = 0;
+        int prev = 0;
+        for (int i = 0; i < rows; i++) {
+            for (; j < prev + nbItemRow[i]; j++) {
+                result.append(Integer.toString(i + 1));
+                result.append(", ");
+                result.append(Integer.toString(colPos[j] + 1));
+                if (j < nbItem - 1) {
+                    result.append(" ; ");
+                }
+            }
+            prev += nbItemRow[i];
+        }
+
+        result.append("], [");
+        for (int i = 0; i < nbItem; i++) {
+            result.append("%t");
+            if (i < nbItem - 1) {
+                result.append(", ");
+            }
+        }
+
+        result.append("], [");
+        result.append(Integer.toString(rows));
+        result.append(", ");
+        result.append(Integer.toString(cols));
+
+        result.append("])");
+
+        return result.toString();
+    }
+}
index 932db4a..a754e08 100644 (file)
@@ -2,13 +2,14 @@
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2009-2009 - DIGITEO - Bruno JOFRET
  *  Copyright (C) 2010-2010 - DIGITEO - Clement DAVID
- * 
+ *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
+ *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
  *  you should have received as part of this distribution.  The terms
  *  are also available at
  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- * 
+ *
  */
 
 package org.scilab.modules.types;
@@ -19,7 +20,7 @@ import java.util.Arrays;
  * This class provides a representation on the Scilab Double datatype<br>
  * Note that double is the default datatype in Scilab.<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could 
+ * This class is {@link java.io.Serializable} and any modification could
  * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example (real):<br />
@@ -33,232 +34,260 @@ import java.util.Arrays;
  * double [][]aImg={{210.2, 220.0, 420.0, 390.0},{230.2, 240.0, 440.0, 400.0}};<br />
  * ScilabDouble aMatrix = new ScilabDouble(a, aImg);
  * </code>
- * 
+ *
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabDouble implements ScilabType {
 
-       private static final long serialVersionUID = 879624048944109684L;
-       private static final ScilabTypeEnum type = ScilabTypeEnum.sci_matrix;
-       
-       private double[][] realPart;
-       private double[][] imaginaryPart;
-
-       /**
-        * Default constructor
-        */
-       public ScilabDouble() {
-               realPart = null;
-               imaginaryPart = null;
-       }
-
-       /**
-        * Constructor with a unique value.
-        * @param data the unique value
-        */
-       public ScilabDouble(double data) {
-               realPart = new double[1][1];
-               realPart[0][0] = data;
-               imaginaryPart = null;
-       }
-
-       /**
-        * Constructor with a unique complex value.
-        * 
-        * @param realData the real part
-        * @param imagData the complex part 
-        */
-       public ScilabDouble(double realData, double imagData) {
-               realPart = new double[1][1];
-               realPart[0][0] = realData;
-               imaginaryPart = new double[1][1];
-               imaginaryPart[0][0] = imagData;
-       }
-
-       /**
-        * Constructor with a matrix of real data.
-        * 
-        * @param data the data
-        */
-       public ScilabDouble(double[][] data) {
-               realPart = data;
-               imaginaryPart = null;
-       }
-
-       /**
-        * Constructor with a matrix of complex numbers 
-        * 
-        * @param realData the real part of the data
-        * @param imagData the imaginary part of the data
-        */
-       public ScilabDouble(double[][] realData, double[][] imagData) {
-               realPart = realData;
-               imaginaryPart = imagData;
-       }
-
-    /** 
-     * Return the type of Scilab 
+    private static final long serialVersionUID = 879624048944109684L;
+    private static final ScilabTypeEnum type = ScilabTypeEnum.sci_matrix;
+
+    private double[][] realPart;
+    private double[][] imaginaryPart;
+    private String varName;
+    private boolean swaped;
+
+    /**
+     * Default constructor
+     */
+    public ScilabDouble() {
+        realPart = null;
+        imaginaryPart = null;
+    }
+
+    /**
+     * Constructor with a unique value.
+     * @param data the unique value
+     */
+    public ScilabDouble(double data) {
+        realPart = new double[1][1];
+        realPart[0][0] = data;
+        imaginaryPart = null;
+    }
+
+    /**
+     * Constructor with a unique complex value.
+     *
+     * @param realData the real part
+     * @param imagData the complex part
+     */
+    public ScilabDouble(double realData, double imagData) {
+        realPart = new double[1][1];
+        realPart[0][0] = realData;
+        imaginaryPart = new double[1][1];
+        imaginaryPart[0][0] = imagData;
+    }
+
+    /**
+     * Constructor with a matrix of real data.
+     *
+     * @param data the data
+     */
+    public ScilabDouble(double[][] data) {
+        realPart = data;
+        imaginaryPart = null;
+    }
+
+    /**
+     * Constructor with a matrix of complex numbers
+     *
+     * @param realData the real part of the data
+     * @param imagData the imaginary part of the data
+     */
+    public ScilabDouble(double[][] realData, double[][] imagData) {
+        realPart = realData;
+        imaginaryPart = imagData;
+    }
+
+    /**
+     * Constructor with a matrix of complex numbers
+     *
+     * @param realData the real part of the data
+     * @param imagData the imaginary part of the data
+     */
+    public ScilabDouble(String varName, double[][] realData, double[][] imagData, boolean swaped) {
+        this.varName = varName;
+        this.swaped = swaped;
+        realPart = realData;
+        imaginaryPart = imagData;
+    }
+
+    /**
+     * Return the type of Scilab
      * @return the type of Scilab
      * @since 5.4.0
      */
     @Override
-       public ScilabTypeEnum getType() {
+    public ScilabTypeEnum getType() {
         return type;
     }
 
-       /**
-        * Check the emptiness of the associated data.
-        * @return true, if the associated data array is empty. 
-        */
-       @Override
-       public boolean isEmpty() {
-               return (realPart == null && imaginaryPart == null);
-       }
-
-       /**
-        * Check if the current data doesn't have an imaginary part.
-        * 
-        * @return true, if the data are real only.
-        */
-       public boolean isReal() {
-               return (imaginaryPart == null);
-       }
-
-       /**
-        * Get the real part of the data.
-        * 
-        * @return the real part.
-        */
-       public double[][] getRealPart() {
-               return realPart;
-       }
-
-       /**
-        * Set the real part of the data.
-        * 
-        * @param realPart the real part.
-        */
-       public void setRealPart(double[][] realPart) {
-               this.realPart = realPart;
-       }
-
-       /**
-        * Get the imaginary part of the data.
-        * 
-        * @return the imaginary part.
-        */
-       public double[][] getImaginaryPart() {
-               return imaginaryPart;
-       }
-
-       /**
-        * Set the imaginary part of the data.
-        * 
-        * @param imaginaryPart the imaginary part.
-        */
-       public void setImaginaryPart(double[][] imaginaryPart) {
-               this.imaginaryPart = imaginaryPart;
-       }
-
-
-       /**
-        * Get complex matrix as a serialized form
-        * 
-        * @return the serialized matrix with complex values
-        */
-       public double[] getSerializedComplexMatrix() {
-               int size = this.getHeight()*this.getWidth();
-               double [] serializedComplexMatrix = new double[size*2];
-               for (int i = 0; i < this.getHeight(); i++) {
-                       for (int j = 0; j < this.getWidth(); j++) {
-                               serializedComplexMatrix[j * this.getHeight() + i] = realPart[i][j];
-                               serializedComplexMatrix[size+j * this.getHeight() + i] = imaginaryPart[i][j];
-                       }
-               }
-
-               return serializedComplexMatrix;
-       }
-
-
-       /**
-        * @return the height of the data matrix
-        * @see org.scilab.modules.types.ScilabType#getHeight()
-        */
-       @Override
-       public int getHeight() {
-               if (isEmpty()) {
-                       return 0;
-               }
-               return realPart.length;
-       }
-
-       /**
-        * @return the width of the data matrix
-        * @see org.scilab.modules.types.ScilabType#getWidth()
-        */
-       @Override
-       public int getWidth() {
-               if (isEmpty() || realPart.length  == 0) {
-                       return 0;
-               }
-               
-               return realPart[0].length;
-       }
-
-       /**
-        * @see org.scilab.modules.types.ScilabType#equals(Object)
-        */
-       @Override
-       public boolean equals(Object obj) {
-               if (obj instanceof ScilabDouble) {
-                       ScilabDouble sciDouble = ((ScilabDouble)obj);
-                       if (this.isReal() && sciDouble.isReal()) {
-                               return Arrays.deepEquals(this.getRealPart(), sciDouble.getRealPart());
-                       } else {
-                               /* Complex */
-                               return Arrays.deepEquals(this.getRealPart(), sciDouble.getRealPart()) && Arrays.deepEquals(this.getImaginaryPart(), sciDouble.getImaginaryPart());
-                       }
-               } else {
-                       return false;
-               }
-       }
-
-
-       /**
-        * Display the representation in the Scilab language of the type<br />
-        * Note that the representation can be copied/pasted straight into Scilab 
+    /**
+     * Check the emptiness of the associated data.
+     * @return true, if the associated data array is empty.
+     */
+    @Override
+    public boolean isEmpty() {
+        return (realPart == null && imaginaryPart == null);
+    }
+
+    /**
+     * Check if the current data doesn't have an imaginary part.
+     *
+     * @return true, if the data are real only.
+     */
+    public boolean isReal() {
+        return (imaginaryPart == null);
+    }
+
+    /**
+     * Get the real part of the data.
+     *
+     * @return the real part.
+     */
+    public double[][] getRealPart() {
+        return realPart;
+    }
+
+    /**
+     * Set the real part of the data.
+     *
+     * @param realPart the real part.
+     */
+    public void setRealPart(double[][] realPart) {
+        this.realPart = realPart;
+    }
+
+    /**
+     * Get the imaginary part of the data.
      *
-        * @return a Scilab-like String representation of the data.
-        * @see java.lang.Object#toString()
-        */
-       @Override
-       public String toString() {
-               StringBuilder result = new StringBuilder();
-               
-               if (isEmpty()) {
-                       result.append("[]");
-                       return result.toString();
-               }
-
-               result.append("[");
-               for (int i = 0; i < getHeight(); ++i) {
-                       for (int j = 0; j < getWidth(); ++j) {
-                               if (isReal()) {
-                                       result.append(getRealPart()[i][j]);
-                               } else {
-                                       result.append(getRealPart()[i][j] + " + " + getImaginaryPart()[i][j] + " * %i");
-                               }
-                               if (j != getWidth() - 1) {
-                                       result.append(", ");
-                               }
-                       }
-                       if (i != getHeight() - 1) {
-                               result.append(" ; ");
-                       }
-               }
-               result.append("]");
-               
-               return result.toString();
-       }
+     * @return the imaginary part.
+     */
+    public double[][] getImaginaryPart() {
+        return imaginaryPart;
+    }
+
+    /**
+     * Set the imaginary part of the data.
+     *
+     * @param imaginaryPart the imaginary part.
+     */
+    public void setImaginaryPart(double[][] imaginaryPart) {
+        this.imaginaryPart = imaginaryPart;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getVarName() {
+        return varName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isSwaped() {
+        return swaped;
+    }
+
+    /**
+     * Get complex matrix as a serialized form
+     *
+     * @return the serialized matrix with complex values
+     */
+    public double[] getSerializedComplexMatrix() {
+        int size = this.getHeight()*this.getWidth();
+        double [] serializedComplexMatrix = new double[size*2];
+        for (int i = 0; i < this.getHeight(); i++) {
+            for (int j = 0; j < this.getWidth(); j++) {
+                serializedComplexMatrix[j * this.getHeight() + i] = realPart[i][j];
+                serializedComplexMatrix[size+j * this.getHeight() + i] = imaginaryPart[i][j];
+            }
+        }
+
+        return serializedComplexMatrix;
+    }
+
+
+    /**
+     * @return the height of the data matrix
+     * @see org.scilab.modules.types.ScilabType#getHeight()
+     */
+    @Override
+    public int getHeight() {
+        if (isEmpty()) {
+            return 0;
+        }
+        return realPart.length;
+    }
+
+    /**
+     * @return the width of the data matrix
+     * @see org.scilab.modules.types.ScilabType#getWidth()
+     */
+    @Override
+    public int getWidth() {
+        if (isEmpty() || realPart.length  == 0) {
+            return 0;
+        }
+
+        return realPart[0].length;
+    }
+
+    /**
+     * @see org.scilab.modules.types.ScilabType#equals(Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof ScilabDouble) {
+            ScilabDouble sciDouble = ((ScilabDouble)obj);
+            if (this.isReal() && sciDouble.isReal()) {
+                return Arrays.deepEquals(this.getRealPart(), sciDouble.getRealPart());
+            } else {
+                /* Complex */
+                return Arrays.deepEquals(this.getRealPart(), sciDouble.getRealPart()) && Arrays.deepEquals(this.getImaginaryPart(), sciDouble.getImaginaryPart());
+            }
+        } else {
+            return false;
+        }
+    }
+
+
+    /**
+     * Display the representation in the Scilab language of the type<br />
+     * Note that the representation can be copied/pasted straight into Scilab
+     *
+     * @return a Scilab-like String representation of the data.
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        StringBuilder result = new StringBuilder();
+
+        if (isEmpty()) {
+            result.append("[]");
+            return result.toString();
+        }
+
+        result.append("[");
+        for (int i = 0; i < getHeight(); ++i) {
+            for (int j = 0; j < getWidth(); ++j) {
+                if (isReal()) {
+                    result.append(getRealPart()[i][j]);
+                } else {
+                    result.append(getRealPart()[i][j] + " + " + getImaginaryPart()[i][j] + " * %i");
+                }
+                if (j != getWidth() - 1) {
+                    result.append(", ");
+                }
+            }
+            if (i != getHeight() - 1) {
+                result.append(" ; ");
+            }
+        }
+        result.append("]");
+
+        return result.toString();
+    }
 
 }
index 937bfa0..c05f667 100644 (file)
@@ -1,13 +1,14 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS
- * 
+ *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
+ *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
  *  you should have received as part of this distribution.  The terms
  *  are also available at
  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- * 
+ *
  */
 
 package org.scilab.modules.types;
@@ -17,523 +18,587 @@ import java.util.Arrays;
 /**
  * This class provides a representation on the Scilab Integer datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could 
+ * This class is {@link java.io.Serializable} and any modification could
  * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
  * <code>
  * byte [][]a={{32,42,41}, {12,13,32}};<br />
- * ScilabInteger aMatrix = new ScilabInteger(a, true); // true = unsigned 
+ * ScilabInteger aMatrix = new ScilabInteger(a, true); // true = unsigned
  * </code>
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabInteger implements ScilabType {
 
-       private static final long serialVersionUID = 1759633801332932450L;
-       private static final ScilabTypeEnum type = ScilabTypeEnum.sci_ints;
-
-       private long[][] longData = null;
-       private short[][] shortData = null;
-       private int[][] intData = null;
-       private byte[][] byteData = null;
-       private ScilabIntegerTypeEnum precision;
-       
-       /**
-        * Default constructor
-        */
-       public ScilabInteger() {
-
-       }
-
-       /**
-        * Constructor with values
-        * 
-        * @param data the values
-        * @param bUnsigned true, if the values are unsigned; false if they are signed.
-        */
-       public ScilabInteger(byte[][] data, boolean bUnsigned) {
-               this.setData(data, bUnsigned);
-       }
-
-       /**
-        * Constructor with values
-        * 
-        * @param data the values
-        * @param bUnsigned true, if the values are unsigned; false if they are signed.
-        */
-       public ScilabInteger(short[][] data, boolean bUnsigned) {
-               this.setData(data, bUnsigned);
-       }
-
-       /**
-        * Constructor with values
-        * 
-        * @param data the values
-        * @param bUnsigned true, if the values are unsigned; false if they are signed.
-        */
-       public ScilabInteger(int[][] data, boolean bUnsigned) {
-               this.setData(data, bUnsigned);
-       }
-
-       /**
-        * Constructor with values
-        * 
-        * @param data the values
-        * @param bUnsigned true, if the values are unsigned; false if they are signed.
-        */
-       public ScilabInteger(long[][] data, boolean bUnsigned) {
-               this.setData(data, bUnsigned);
-       }
-
-       /**
-        * Constructor with single signed value
-        * 
-        * @param value the unique value
-        */
-       public ScilabInteger(byte value) {
-               this.byteData = new byte[1][1];
-               this.byteData[0][0] = value;
-               this.precision = ScilabIntegerTypeEnum.sci_int8;
-       }
-
-       /**
-        * Constructor with single signed value
-        * 
-        * @param value the unique value
-        */
-       public ScilabInteger(short value) {
-               this.shortData = new short[1][1];
-               this.shortData[0][0] = value;
-               this.precision = ScilabIntegerTypeEnum.sci_int16;
-       }
-
-       /**
-        * Constructor with single signed value
-        * 
-        * @param value the unique value
-        */
-       public ScilabInteger(int value) {
-               this.intData = new int[1][1];
-               this.intData[0][0] = value;
-               this.precision = ScilabIntegerTypeEnum.sci_int32;
-       }
-
-       /**
-        * Constructor with single signed value
-        * 
-        * @param value the unique value
-        */
-       public ScilabInteger(long value) {
-               this.longData = new long[1][1];
-               this.longData[0][0] = value;
-               this.precision = ScilabIntegerTypeEnum.sci_int64;
-       }
-
-       /**
-        * Set the current values 
-        * 
-        * @param data the values to set
-        * @param bUnsigned true, if these values are unsigned; false otherwise.
-        */
-       public void setData(byte[][] data, boolean bUnsigned) {
-               this.byteData = data;
-               if (bUnsigned) {
-                       this.precision = ScilabIntegerTypeEnum.sci_uint8;
-               } else {
-                       this.precision = ScilabIntegerTypeEnum.sci_int8;
-               }
-       }
-
-       /**
-        * Set the current values 
-        * 
-        * @param data the values to set
-        * @param bUnsigned true, if these values are unsigned; false otherwise.
-        */
-       public void setData(short[][] data, boolean bUnsigned) {
-               this.shortData = data;
-               if (bUnsigned) {
-                       this.precision = ScilabIntegerTypeEnum.sci_uint16;
-               } else {
-                       this.precision = ScilabIntegerTypeEnum.sci_int16;
-               }
-       }
-
-       /**
-        * Set the current values 
-        * 
-        * @param data the values to set
-        * @param bUnsigned true, if these values are unsigned; false otherwise.
-        */
-       public void setData(int[][] data, boolean bUnsigned) {
-               this.intData = data;
-               if (bUnsigned) {
-                       this.precision = ScilabIntegerTypeEnum.sci_uint32;
-               } else {
-                       this.precision = ScilabIntegerTypeEnum.sci_int32;
-               }
-       }
-
-       /**
-        * Set the current values 
-        * 
-        * @param data the values to set
-        * @param bUnsigned true, if these values are unsigned; false otherwise.
-        */
-       public void setData(long[][] data, boolean bUnsigned) {
-               this.longData = data;
-               if (bUnsigned) {
-                       this.precision = ScilabIntegerTypeEnum.sci_uint64;
-               } else {
-                       this.precision = ScilabIntegerTypeEnum.sci_int64;
-               }
-       }
-
-    /** 
-     * Return the type of Scilab 
+    private static final long serialVersionUID = 1759633801332932450L;
+    private static final ScilabTypeEnum type = ScilabTypeEnum.sci_ints;
+
+    private long[][] longData = null;
+    private short[][] shortData = null;
+    private int[][] intData = null;
+    private byte[][] byteData = null;
+    private ScilabIntegerTypeEnum precision;
+    private String varName;
+    private boolean swaped;
+
+    /**
+     * Default constructor
+     */
+    public ScilabInteger() {
+
+    }
+
+    /**
+     * Constructor with values
+     *
+     * @param data the values
+     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     */
+    public ScilabInteger(byte[][] data, boolean bUnsigned) {
+        this.setData(data, bUnsigned);
+    }
+
+    /**
+     * Constructor with values
+     *
+     * @param data the values
+     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     */
+    public ScilabInteger(short[][] data, boolean bUnsigned) {
+        this.setData(data, bUnsigned);
+    }
+
+    /**
+     * Constructor with values
+     *
+     * @param data the values
+     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     */
+    public ScilabInteger(int[][] data, boolean bUnsigned) {
+        this.setData(data, bUnsigned);
+    }
+
+    /**
+     * Constructor with values
+     *
+     * @param data the values
+     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     */
+    public ScilabInteger(long[][] data, boolean bUnsigned) {
+        this.setData(data, bUnsigned);
+    }
+
+    /**
+     * Constructor with values
+     *
+     * @param data the values
+     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     */
+    public ScilabInteger(String varName, byte[][] data, boolean bUnsigned, boolean swaped) {
+        this.setData(data, bUnsigned);
+       this.varName = varName;
+       this.swaped = swaped;
+    }
+
+    /**
+     * Constructor with values
+     *
+     * @param data the values
+     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     */
+    public ScilabInteger(String varName, short[][] data, boolean bUnsigned, boolean swaped) {
+        this.setData(data, bUnsigned);
+       this.varName = varName;
+       this.swaped = swaped;
+    }
+
+    /**
+     * Constructor with values
+     *
+     * @param data the values
+     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     */
+    public ScilabInteger(String varName, int[][] data, boolean bUnsigned, boolean swaped) {
+        this.setData(data, bUnsigned);
+       this.varName = varName;
+       this.swaped = swaped;
+    }
+
+    /**
+     * Constructor with values
+     *
+     * @param data the values
+     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     */
+    public ScilabInteger(String varName, long[][] data, boolean bUnsigned, boolean swaped) {
+        this.setData(data, bUnsigned);
+       this.varName = varName;
+       this.swaped = swaped;
+    }
+
+    /**
+     * Constructor with single signed value
+     *
+     * @param value the unique value
+     */
+    public ScilabInteger(byte value) {
+        this.byteData = new byte[1][1];
+        this.byteData[0][0] = value;
+        this.precision = ScilabIntegerTypeEnum.sci_int8;
+    }
+
+    /**
+     * Constructor with single signed value
+     *
+     * @param value the unique value
+     */
+    public ScilabInteger(short value) {
+        this.shortData = new short[1][1];
+        this.shortData[0][0] = value;
+        this.precision = ScilabIntegerTypeEnum.sci_int16;
+    }
+
+    /**
+     * Constructor with single signed value
+     *
+     * @param value the unique value
+     */
+    public ScilabInteger(int value) {
+        this.intData = new int[1][1];
+        this.intData[0][0] = value;
+        this.precision = ScilabIntegerTypeEnum.sci_int32;
+    }
+
+    /**
+     * Constructor with single signed value
+     *
+     * @param value the unique value
+     */
+    public ScilabInteger(long value) {
+        this.longData = new long[1][1];
+        this.longData[0][0] = value;
+        this.precision = ScilabIntegerTypeEnum.sci_int64;
+    }
+
+    /**
+     * Set the current values
+     *
+     * @param data the values to set
+     * @param bUnsigned true, if these values are unsigned; false otherwise.
+     */
+    public void setData(byte[][] data, boolean bUnsigned) {
+        this.byteData = data;
+        if (bUnsigned) {
+            this.precision = ScilabIntegerTypeEnum.sci_uint8;
+        } else {
+            this.precision = ScilabIntegerTypeEnum.sci_int8;
+        }
+    }
+
+    /**
+     * Set the current values
+     *
+     * @param data the values to set
+     * @param bUnsigned true, if these values are unsigned; false otherwise.
+     */
+    public void setData(short[][] data, boolean bUnsigned) {
+        this.shortData = data;
+        if (bUnsigned) {
+            this.precision = ScilabIntegerTypeEnum.sci_uint16;
+        } else {
+            this.precision = ScilabIntegerTypeEnum.sci_int16;
+        }
+    }
+
+    /**
+     * Set the current values
+     *
+     * @param data the values to set
+     * @param bUnsigned true, if these values are unsigned; false otherwise.
+     */
+    public void setData(int[][] data, boolean bUnsigned) {
+        this.intData = data;
+        if (bUnsigned) {
+            this.precision = ScilabIntegerTypeEnum.sci_uint32;
+        } else {
+            this.precision = ScilabIntegerTypeEnum.sci_int32;
+        }
+    }
+
+    /**
+     * Set the current values
+     *
+     * @param data the values to set
+     * @param bUnsigned true, if these values are unsigned; false otherwise.
+     */
+    public void setData(long[][] data, boolean bUnsigned) {
+        this.longData = data;
+        if (bUnsigned) {
+            this.precision = ScilabIntegerTypeEnum.sci_uint64;
+        } else {
+            this.precision = ScilabIntegerTypeEnum.sci_int64;
+        }
+    }
+
+    /**
+     * Return the type of Scilab
      * @return the type of Scilab
      * @since 5.4.0
      */
     @Override
-       public ScilabTypeEnum getType() {
+    public ScilabTypeEnum getType() {
         return type;
     }
 
-       /**
-        * If the precision is not 64, all values will be converted to long 
-        * (attention, the convertion can be long)
-        * if precision is 64, just return the data
-        * @return the values
-        */
-       public long[][] getData() {
-               long[][] convertedMatrix = new long[this.getHeight()][this.getWidth()];
-               switch (this.getPrec()) {
-
-                       case sci_int8:
-                       case sci_uint8:
-                               for (int i = 0; i < this.getHeight(); i++) {
-                                       for (int j = 0; j < this.getWidth(); j++) {
-                                               convertedMatrix[i][j] = Long.valueOf(byteData[i][j]);
-                                       }
-                               }
-                               return convertedMatrix;
-                       case sci_int16:
-                       case sci_uint16:
-                               for (int i = 0; i < this.getHeight(); i++) {
-                                       for (int j = 0; j < this.getWidth(); j++) {
-                                               convertedMatrix[i][j] = Long.valueOf(shortData[i][j]);
-                                       }
-                               }
-                               return convertedMatrix;
-                       case sci_int32:
-                       case sci_uint32:
-                               for (int i = 0; i < this.getHeight(); i++) {
-                                       for (int j = 0; j < this.getWidth(); j++) {
-                                               convertedMatrix[i][j] = Long.valueOf(intData[i][j]);
-                                       }
-                               }
-                               return convertedMatrix;
-                       case sci_int64:
-                       case sci_uint64:
-                               return longData;
-               }
-               return null;
-       }
-       
-
-       /**
-        * Returns the value as the form of short
-        * @return the values as short
-        */
-       public short[][] getDataAsShort() {
-               return shortData;
-       }
-
-       /**
-        * Returns the value as the form of byte
-        * @return the values as byte
-        */
-       public byte[][] getDataAsByte() {
-               return byteData;
-       }
-
-       /**
-        * Returns the value as the form of int
-        * @return the values as int
-        */
-       public int[][] getDataAsInt() {
-               return intData;
-       }
-
-       /**
-        * Returns the value as the form of long
-        * Only for Scilab 6.X
-        * @return the values as long
-        */
-       public long[][] getDataAsLong() {
-               return longData;
-       }
-
-       /**
-        * @return the precision of the values
-        */
-       public ScilabIntegerTypeEnum getPrec() {
-               return precision;
-       }
-
-       /**
-        * @return true, if the values are signed, false otherwise.
-        */
-       public boolean isUnsigned() {
-               switch (precision) {
-                       case sci_int8:
-                       case sci_int16:
-                       case sci_int32:
-                       case sci_int64:
-                               return false;
-                       case sci_uint8:
-                       case sci_uint16:
-                       case sci_uint32:
-                       case sci_uint64:
-                               return true;
-               }
-               return false;
-       }
-
-       /**
-        * Manage the old representation of IntegerType 
-        * @param typeName the typeName (TYPE8, TYPE16, TYPE32, TYPE64)
-        * @param unsigned unsigned or not
-        * @return the converted type to ScilabIntegerTypeEnum. null is cannot convert
-        */
-       public static ScilabIntegerTypeEnum convertOldType(String typeName, boolean unsigned) {
-               
-               if (typeName.equals("TYPE8")) {
-                       if (unsigned) {
-                               return ScilabIntegerTypeEnum.sci_uint8;
-                       } else {
-                               return ScilabIntegerTypeEnum.sci_int8;
-                       }
-               }
-               if (typeName.equals("TYPE16")) {
-                       if (unsigned) {
-                               return ScilabIntegerTypeEnum.sci_uint16;
-                       } else {
-                               return ScilabIntegerTypeEnum.sci_int16;
-                       }
-               }
-               if (typeName.equals("TYPE32")) {
-                       if (unsigned) {
-                               return ScilabIntegerTypeEnum.sci_uint32;
-                       } else {
-                               return ScilabIntegerTypeEnum.sci_int32;
-                       }
-               }
-               if (typeName.equals("TYPE64")) {
-                       if (unsigned) {
-                               return ScilabIntegerTypeEnum.sci_uint64;
-                       } else {
-                               return ScilabIntegerTypeEnum.sci_int64;
-                       }
-               }
-               return null;
-
-       }
-
-
-       /**
-        * @return the height of the value matrix
-        * @see org.scilab.modules.types.ScilabType#getHeight()
-        */
-       @Override
-       public int getHeight() {
-               if (this.getPrec() == null) {
-                       return 0;
-               }
-               switch (this.getPrec()) {
-                       case sci_int8:
-                       case sci_uint8:
-                               if (byteData == null) {
-                                       return 0;
-                               }
-                               return byteData.length;
-                       case sci_int16:
-                       case sci_uint16:
-                               if (shortData == null) {
-                                       return 0;
-                               }
-                               return shortData.length;
-                       case sci_int32:
-                       case sci_uint32:
-                               if (intData == null) {
-                                       return 0;
-                               }
-                               return intData.length;
-                       case sci_int64:
-                       case sci_uint64:
-                               if (longData == null) {
-                                       return 0;
-                               }
-                               return longData.length;
-                       default:
-                               return 0;
-               }
-       }
-
-       /**
-        * @return the width of the value matrix
-        * @see org.scilab.modules.types.ScilabType#getWidth()
-        */
-       @Override
-       public int getWidth() {
-               if (this.getPrec() == null) {
-                       return 0;
-               }
-               switch (this.getPrec()) {
-                       case sci_int8:
-                       case sci_uint8:
-                               if (byteData == null) {
-                                       return 0;
-                               }
-                               return byteData[0].length;
-                       case sci_int16:
-                       case sci_uint16:
-                               if (shortData == null) {
-                                       return 0;
-                               }
-                               return shortData[0].length;
-                       case sci_int32:
-                       case sci_uint32:
-                               if (intData == null) {
-                                       return 0;
-                               }
-                               return intData[0].length;
-                       case sci_int64:
-                       case sci_uint64:
-                               if (longData == null) {
-                                       return 0;
-                               }
-                               return longData[0].length;
-                       default:
-                               return 0;
-               }
-       }
-
-       // int32(X), int8(x) , int16([x,x,x;x,x,x])
-       //       uint32(X), uint8(x) , uint16([x,x,x;x,x,x])
-       
-       /**
-        * @return true, if there is no values; false otherwise.
-        */
-       @Override
-       public boolean isEmpty() {
-               if (this.getPrec() == null) {
-                       return true;
-               }
-               switch (this.getPrec()) {
-                       case sci_int8:
-                       case sci_uint8:
-                               return byteData == null;
-                       case sci_int16:
-                       case sci_uint16:
-                               return shortData == null;
-                       case sci_int32:
-                       case sci_uint32:
-                               return intData == null;
-                       case sci_int64:
-                       case sci_uint64:
-                               return longData == null;
-                       default:
-                               return true;
-               }
-       }
-       
-       /**
-        * @see org.scilab.modules.types.ScilabType#equals(Object)
-        */
-       @Override
-       public boolean equals(Object obj) {
-               if (obj instanceof ScilabInteger) {
-                       return Arrays.deepEquals(this.getData(), ((ScilabInteger)obj).getData());
-               } else {
-                       return false;
-               }
-       }
-
-       /**
-        * Display the representation in the Scilab language of the type<br />
-        * Note that the representation can be copied/pasted straight into Scilab 
+    /**
+     * If the precision is not 64, all values will be converted to long
+     * (attention, the convertion can be long)
+     * if precision is 64, just return the data
+     * @return the values
+     */
+    public long[][] getData() {
+        long[][] convertedMatrix = new long[this.getHeight()][this.getWidth()];
+        switch (this.getPrec()) {
+
+        case sci_int8:
+        case sci_uint8:
+            for (int i = 0; i < this.getHeight(); i++) {
+                for (int j = 0; j < this.getWidth(); j++) {
+                    convertedMatrix[i][j] = Long.valueOf(byteData[i][j]);
+                }
+            }
+            return convertedMatrix;
+        case sci_int16:
+        case sci_uint16:
+            for (int i = 0; i < this.getHeight(); i++) {
+                for (int j = 0; j < this.getWidth(); j++) {
+                    convertedMatrix[i][j] = Long.valueOf(shortData[i][j]);
+                }
+            }
+            return convertedMatrix;
+        case sci_int32:
+        case sci_uint32:
+            for (int i = 0; i < this.getHeight(); i++) {
+                for (int j = 0; j < this.getWidth(); j++) {
+                    convertedMatrix[i][j] = Long.valueOf(intData[i][j]);
+                }
+            }
+            return convertedMatrix;
+        case sci_int64:
+        case sci_uint64:
+            return longData;
+        }
+        return null;
+    }
+
+
+    /**
+     * Returns the value as the form of short
+     * @return the values as short
+     */
+    public short[][] getDataAsShort() {
+        return shortData;
+    }
+
+    /**
+     * Returns the value as the form of byte
+     * @return the values as byte
+     */
+    public byte[][] getDataAsByte() {
+        return byteData;
+    }
+
+    /**
+     * Returns the value as the form of int
+     * @return the values as int
+     */
+    public int[][] getDataAsInt() {
+        return intData;
+    }
+
+    /**
+     * Returns the value as the form of long
+     * Only for Scilab 6.X
+     * @return the values as long
+     */
+    public long[][] getDataAsLong() {
+        return longData;
+    }
+
+    /**
+     * @return the precision of the values
+     */
+    public ScilabIntegerTypeEnum getPrec() {
+        return precision;
+    }
+
+    /**
+     * @return true, if the values are signed, false otherwise.
+     */
+    public boolean isUnsigned() {
+        switch (precision) {
+        case sci_int8:
+        case sci_int16:
+        case sci_int32:
+        case sci_int64:
+            return false;
+        case sci_uint8:
+        case sci_uint16:
+        case sci_uint32:
+        case sci_uint64:
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Manage the old representation of IntegerType
+     * @param typeName the typeName (TYPE8, TYPE16, TYPE32, TYPE64)
+     * @param unsigned unsigned or not
+     * @return the converted type to ScilabIntegerTypeEnum. null is cannot convert
+     */
+    public static ScilabIntegerTypeEnum convertOldType(String typeName, boolean unsigned) {
+
+        if (typeName.equals("TYPE8")) {
+            if (unsigned) {
+                return ScilabIntegerTypeEnum.sci_uint8;
+            } else {
+                return ScilabIntegerTypeEnum.sci_int8;
+            }
+        }
+        if (typeName.equals("TYPE16")) {
+            if (unsigned) {
+                return ScilabIntegerTypeEnum.sci_uint16;
+            } else {
+                return ScilabIntegerTypeEnum.sci_int16;
+            }
+        }
+        if (typeName.equals("TYPE32")) {
+            if (unsigned) {
+                return ScilabIntegerTypeEnum.sci_uint32;
+            } else {
+                return ScilabIntegerTypeEnum.sci_int32;
+            }
+        }
+        if (typeName.equals("TYPE64")) {
+            if (unsigned) {
+                return ScilabIntegerTypeEnum.sci_uint64;
+            } else {
+                return ScilabIntegerTypeEnum.sci_int64;
+            }
+        }
+        return null;
+
+    }
+
+
+    /**
+     * @return the height of the value matrix
+     * @see org.scilab.modules.types.ScilabType#getHeight()
+     */
+    @Override
+    public int getHeight() {
+        if (this.getPrec() == null) {
+            return 0;
+        }
+        switch (this.getPrec()) {
+        case sci_int8:
+        case sci_uint8:
+            if (byteData == null) {
+                return 0;
+            }
+            return byteData.length;
+        case sci_int16:
+        case sci_uint16:
+            if (shortData == null) {
+                return 0;
+            }
+            return shortData.length;
+        case sci_int32:
+        case sci_uint32:
+            if (intData == null) {
+                return 0;
+            }
+            return intData.length;
+        case sci_int64:
+        case sci_uint64:
+            if (longData == null) {
+                return 0;
+            }
+            return longData.length;
+        default:
+            return 0;
+        }
+    }
+
+    /**
+     * @return the width of the value matrix
+     * @see org.scilab.modules.types.ScilabType#getWidth()
+     */
+    @Override
+    public int getWidth() {
+        if (this.getPrec() == null) {
+            return 0;
+        }
+        switch (this.getPrec()) {
+        case sci_int8:
+        case sci_uint8:
+            if (byteData == null) {
+                return 0;
+            }
+            return byteData[0].length;
+        case sci_int16:
+        case sci_uint16:
+            if (shortData == null) {
+                return 0;
+            }
+            return shortData[0].length;
+        case sci_int32:
+        case sci_uint32:
+            if (intData == null) {
+                return 0;
+            }
+            return intData[0].length;
+        case sci_int64:
+        case sci_uint64:
+            if (longData == null) {
+                return 0;
+            }
+            return longData[0].length;
+        default:
+            return 0;
+        }
+    }
+
+    // int32(X), int8(x) , int16([x,x,x;x,x,x])
+    //   uint32(X), uint8(x) , uint16([x,x,x;x,x,x])
+
+    /**
+     * @return true, if there is no values; false otherwise.
+     */
+    @Override
+    public boolean isEmpty() {
+        if (this.getPrec() == null) {
+            return true;
+        }
+        switch (this.getPrec()) {
+        case sci_int8:
+        case sci_uint8:
+            return byteData == null;
+        case sci_int16:
+        case sci_uint16:
+            return shortData == null;
+        case sci_int32:
+        case sci_uint32:
+            return intData == null;
+        case sci_int64:
+        case sci_uint64:
+            return longData == null;
+        default:
+            return true;
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getVarName() {
+        return varName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isSwaped() {
+        return swaped;
+    }
+
+    /**
+     * @see org.scilab.modules.types.ScilabType#equals(Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof ScilabInteger) {
+            return Arrays.deepEquals(this.getData(), ((ScilabInteger)obj).getData());
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Display the representation in the Scilab language of the type<br />
+     * Note that the representation can be copied/pasted straight into Scilab
+     *
+     * @return the pretty-printed values
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        StringBuilder result = new StringBuilder();
+
+
+        if (isEmpty()) {
+            result.append("int([])");
+            return result.toString();
+        }
+
+        if (isUnsigned()) {
+            result.append("u");
+        }
+        result.append("int");
+
+        switch (this.getPrec()) {
+        case sci_int8:
+        case sci_uint8:
+            result.append("8");
+            break;
+
+        case sci_int16:
+        case sci_uint16:
+            result.append("16");
+            break;
+
+        case sci_int32:
+        case sci_uint32:
+            result.append("32");
+            break;
+
+        case sci_int64:
+        case sci_uint64:
+            result.append("64");
+            break;
+
+        default:
+            break;
+        }
+
+        result.append("([");
+        appendData(result);
+        result.append("])");
+
+        return result.toString();
+    }
+
+    /**
+     * Put each value on the buffer.
      *
-        * @return the pretty-printed values 
-        * @see java.lang.Object#toString()
-        */
-       @Override
-       public String toString() {
-               StringBuilder result = new StringBuilder();
-               
-               
-               if (isEmpty()) {
-                       result.append("int([])");
-                       return result.toString();
-               }
-               
-               if (isUnsigned()) {
-                       result.append("u");
-               }
-               result.append("int");
-               
-               switch (this.getPrec()) {
-                       case sci_int8:
-                       case sci_uint8:
-                               result.append("8");
-                       break;
-
-                       case sci_int16:
-                       case sci_uint16:
-                               result.append("16");
-                               break;
-                       
-                       case sci_int32:
-                       case sci_uint32:
-                               result.append("32");
-                               break;
-                       
-                       case sci_int64:
-                       case sci_uint64:
-                               result.append("64");
-                               break;
-                       
-                       default:
-                               break;
-               }
-
-               result.append("([");
-               appendData(result);
-               result.append("])");
-       
-               return result.toString();
-       }
-
-       /**
-        * Put each value on the buffer.
-        * 
-        * @param result the current buffer
-        */
-       private void appendData(StringBuilder result) {
-               for (int i = 0; i < getHeight(); ++i) {
-                       for (int j = 0; j < getWidth(); ++j) {
-
-                               result.append(getData()[i][j]);
-                               
-                               
-                               if (j != getWidth() - 1) {
-                                       result.append(", ");
-                               }
-                       }
-                       if (i != getHeight() - 1) {
-                               result.append(" ; ");
-                       }
-               }
-       }
-       
+     * @param result the current buffer
+     */
+    private void appendData(StringBuilder result) {
+        for (int i = 0; i < getHeight(); ++i) {
+            for (int j = 0; j < getWidth(); ++j) {
+
+                result.append(getData()[i][j]);
+
+
+                if (j != getWidth() - 1) {
+                    result.append(", ");
+                }
+            }
+            if (i != getHeight() - 1) {
+                result.append(" ; ");
+            }
+        }
+    }
+
 }
index 77e6715..d655068 100644 (file)
@@ -1,13 +1,14 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2009-2009 - DIGITEO - Bruno JOFRET
- * 
+ *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
+ *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
  *  you should have received as part of this distribution.  The terms
  *  are also available at
  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- * 
+ *
  */
 
 package org.scilab.modules.types;
@@ -18,7 +19,7 @@ import java.util.Collection;
 /**
  * This class provides a representation on the Scilab List datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could 
+ * This class is {@link java.io.Serializable} and any modification could
  * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
@@ -30,87 +31,114 @@ import java.util.Collection;
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
-       
-       private static final long serialVersionUID = 6884293176289980909L;
-       private static final ScilabTypeEnum type = ScilabTypeEnum.sci_list;
-
-       /**
-        * Construct an empty Scilab list.
-        */
-       public ScilabList() {
-               super();
-       }
-
-       /**
-        * Construct a list containing the elements of the specified collection, in
-        * the order that they are returned by the specified collection's iterator.
-        * 
-        * @param c
-        *                      the collection whose elements are to be placed into this list.
-        */
-       public ScilabList(Collection< ? extends ScilabType> c) {
-               super(c);
-       }
-       
-       /**
-        * @return 1 when there is data on the list, 0 otherwise.
-        * @see org.scilab.modules.types.ScilabType#getHeight()
-        */
-       @Override
-       public int getHeight() {
-               if (isEmpty()) {
-                       return 0;
-               }
-               return 1;
-       }
-
-    /** 
-     * Return the type of Scilab 
+
+    private static final long serialVersionUID = 6884293176289980909L;
+    private static final ScilabTypeEnum type = ScilabTypeEnum.sci_list;
+
+    private String varName;
+
+    /**
+     * Construct an empty Scilab list.
+     */
+    public ScilabList() {
+        super();
+    }
+
+    /**
+     * Construct a list containing the elements of the specified collection, in
+     * the order that they are returned by the specified collection's iterator.
+     *
+     * @param c
+     *                  the collection whose elements are to be placed into this list.
+     */
+    public ScilabList(Collection< ? extends ScilabType> c) {
+        super(c);
+    }
+
+    /**
+     * Construct an empty mlist.
+     *
+     * Note that the first element of this collection is the header used by
+     * Scilab to find each field name.
+     */
+    public ScilabList(String varName) {
+        super();
+        this.varName = varName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getVarName() {
+        return varName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isSwaped() {
+        return false;
+    }
+
+    /**
+     * @return 1 when there is data on the list, 0 otherwise.
+     * @see org.scilab.modules.types.ScilabType#getHeight()
+     */
+    @Override
+        public int getHeight() {
+        if (isEmpty()) {
+            return 0;
+        }
+        return 1;
+    }
+
+    /**
+     * Return the type of Scilab
      * @return the type of Scilab
      * @since 5.4.0
      */
     @Override
-       public ScilabTypeEnum getType() {
+        public ScilabTypeEnum getType() {
         return type;
     }
 
-       /**
-        * @return 1 when there is data on the list, 0 otherwise.
-        * @see org.scilab.modules.types.ScilabType#getWidth()
-        */
-       @Override
-       public int getWidth() {
-               if (isEmpty()) {
-                       return 0;
-               }
-               return size();
-       }
-
-       /**
-        * Display the representation in the Scilab language of the type<br />
-        * Note that the representation can be copied/pasted straight into Scilab 
+    /**
+     * @return 1 when there is data on the list, 0 otherwise.
+     * @see org.scilab.modules.types.ScilabType#getWidth()
+     */
+    @Override
+        public int getWidth() {
+        if (isEmpty()) {
+            return 0;
+        }
+        return size();
+    }
+
+    /**
+     * Display the representation in the Scilab language of the type<br />
+     * Note that the representation can be copied/pasted straight into Scilab
      *
-        * @return the pretty-printed data 
-        * @see java.util.AbstractCollection#toString()
-        */
-       @Override
-       public String toString() {
-
-               StringBuffer result = new StringBuffer();
-               if (isEmpty()) {
-                       result.append("list()");
-                       return result.toString();
-               }
-
-               result.append("list(");
-               for (int i = 0; i < size(); i++) {
-                       result.append(get(i));
-                       if (i != size() - 1) {
-                               result.append(", ");
-                       }
-               }
-               result.append(")");
-
-               return result.toString();
-       }
+     * @return the pretty-printed data
+     * @see java.util.AbstractCollection#toString()
+     */
+    @Override
+        public String toString() {
+
+        StringBuffer result = new StringBuffer();
+        if (isEmpty()) {
+            result.append("list()");
+            return result.toString();
+        }
+
+        result.append("list(");
+        for (int i = 0; i < size(); i++) {
+            result.append(get(i));
+            if (i != size() - 1) {
+                result.append(", ");
+            }
+        }
+        result.append(")");
+
+        return result.toString();
+    }
 }
index b486a9a..b16b660 100644 (file)
@@ -1,24 +1,27 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2009-2009 - DIGITEO - Bruno JOFRET
- * 
+ *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
+ *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
  *  you should have received as part of this distribution.  The terms
  *  are also available at
  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- * 
+ *
  */
 
 package org.scilab.modules.types;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * This class provides a representation on the Scilab MList datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could 
+ * This class is {@link java.io.Serializable} and any modification could
  * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
@@ -30,112 +33,185 @@ import java.util.Collection;
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
-   
-       private static final long serialVersionUID = 3224510024213901841L;
-       private static final ScilabTypeEnum type = ScilabTypeEnum.sci_mlist;
-
-       /**
-        * Construct an empty mlist.
-        * 
-        * Note that the first element of this collection is the header used by
-        * Scilab to find each field name.
-        */
-       public ScilabMList() {
-               super();
-       }
-       
-       /**
-        * Construct an mlist with a specified header.
-        *  
-        * @param types field names used by the accessors.
-        */
-       public ScilabMList(String []types) {
-               super();
-               String [][] typesData = new String[1][types.length];
-               typesData[0] = types;
-               add(new ScilabString(typesData));
-       }
-       
-       /**
-        * Construct a tlist containing the elements of the specified collection, in
-        * the order that they are returned by the specified collection's iterator.
-        * 
-        * @param names
-        *                      field names, used by the accessors.
-        * @param c
-        *                      the collection whose elements are to be placed into this
-        *                      mlist.
-        */
-       public ScilabMList(String[] names, Collection< ? extends ScilabType> c) {
-               super(c.size() + 1);
-               
-               String[][] namesData = new String[1][names.length];
-               namesData[0] = names;
-               add(new ScilabString(namesData));
-               
-               addAll(c);
-       }
-       
-       /**
-        * @return 1 when there is data on the list, 0 otherwise.
-        * @see org.scilab.modules.types.ScilabType#getHeight()
-        */
-       @Override
-       public int getHeight() {
-               if (isEmpty()) {
-                       return 0;
-               }
-               return 1;
-       }
-
-    /** 
-     * Return the type of Scilab 
+
+    private static final long serialVersionUID = 3224510024213901841L;
+    private static final ScilabTypeEnum type = ScilabTypeEnum.sci_mlist;
+
+    private String varName;
+
+    /**
+     * Construct an empty mlist.
+     *
+     * Note that the first element of this collection is the header used by
+     * Scilab to find each field name.
+     */
+    public ScilabMList() {
+        super();
+    }
+
+    /**
+     * Construct an empty mlist.
+     *
+     * Note that the first element of this collection is the header used by
+     * Scilab to find each field name.
+     */
+    public ScilabMList(String varName) {
+        super();
+        this.varName = varName;
+    }
+
+    /**
+     * Construct an mlist with a specified header.
+     *
+     * @param types field names used by the accessors.
+     */
+    public ScilabMList(String []types) {
+        super();
+        String [][] typesData = new String[1][types.length];
+        typesData[0] = types;
+        add(new ScilabString(typesData));
+    }
+
+    /**
+     * Construct a tlist containing the elements of the specified collection, in
+     * the order that they are returned by the specified collection's iterator.
+     *
+     * @param names
+     *                  field names, used by the accessors.
+     * @param c
+     *                  the collection whose elements are to be placed into this
+     *                  mlist.
+     */
+    public ScilabMList(String[] names, Collection< ? extends ScilabType> c) {
+        super(c.size() + 1);
+
+        String[][] namesData = new String[1][names.length];
+        namesData[0] = names;
+        add(new ScilabString(namesData));
+
+        addAll(c);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getVarName() {
+        return varName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isSwaped() {
+        return false;
+    }
+
+    /**
+     * Get a map between the fields name and the associated ScilabType objects
+     *
+     * @return the map
+     */
+    public Map<String, ScilabType> getMListFields() {
+        Map<String, ScilabType> map = new HashMap<String, ScilabType>();
+        if (isEmpty()) {
+            return map;
+        }
+
+        ScilabString mat = (ScilabString) get(0);
+        if (mat.isEmpty()) {
+            return map;
+        }
+
+        String[] fields = mat.getData()[0];
+        for (int i = 1; i < fields.length; i++) {
+            if (i < size()) {
+                map.put(fields[i], get(i));
+            } else {
+                map.put(fields[i], null);
+            }
+        }
+
+        return map;
+    }
+
+    /**
+     * Get the mlist type or null if none
+     *
+     * @return the mlist type
+     */
+    public String getMListType() {
+        if (isEmpty()) {
+            return null;
+        }
+
+        ScilabString mat = (ScilabString) get(0);
+        if (mat.isEmpty()) {
+            return null;
+        }
+
+        return mat.getData()[0][0];
+    }
+
+    /**
+     * @return 1 when there is data on the list, 0 otherwise.
+     * @see org.scilab.modules.types.ScilabType#getHeight()
+     */
+    @Override
+        public int getHeight() {
+        if (isEmpty()) {
+            return 0;
+        }
+        return 1;
+    }
+
+    /**
+     * Return the type of Scilab
      * @return the type of Scilab
      * @since 5.4.0
      */
     @Override
-       public ScilabTypeEnum getType() {
+        public ScilabTypeEnum getType() {
         return type;
     }
 
-       /**
-        * @return 1 when there is data on the list, 0 otherwise.
-        * @see org.scilab.modules.types.ScilabType#getWidth()
-        */
-       @Override
-       public int getWidth() {
-               if (isEmpty()) {
-                       return 0;
-               }
-               return size();
-       }
-       
-       /**
-        * Display the representation in the Scilab language of the type<br />
-        * Note that the representation can be copied/pasted straight into Scilab 
+    /**
+     * @return 1 when there is data on the list, 0 otherwise.
+     * @see org.scilab.modules.types.ScilabType#getWidth()
+     */
+    @Override
+        public int getWidth() {
+        if (isEmpty()) {
+            return 0;
+        }
+        return size();
+    }
+
+    /**
+     * Display the representation in the Scilab language of the type<br />
+     * Note that the representation can be copied/pasted straight into Scilab
      *
-        * @return the pretty-printed data 
-        * @see java.util.AbstractCollection#toString()
-        */
-       @Override
-       public String toString() {
-               
-               StringBuffer result = new StringBuffer();
-               if (isEmpty()) {
-                       result.append("mlist()");
-                       return result.toString();
-               }
-
-               result.append("mlist(");
-               for (int i = 0; i < size(); i++) {
-                       result.append(get(i));
-                       if (i != size() - 1) {
-                               result.append(", ");
-                       }
-                       
-               }
-               result.append(")");
-       
-               return result.toString();
-       }
+     * @return the pretty-printed data
+     * @see java.util.AbstractCollection#toString()
+     */
+    @Override
+        public String toString() {
+
+        StringBuffer result = new StringBuffer();
+        if (isEmpty()) {
+            result.append("mlist()");
+            return result.toString();
+        }
+
+        result.append("mlist(");
+        for (int i = 0; i < size(); i++) {
+            result.append(get(i));
+            if (i != size() - 1) {
+                result.append(", ");
+            }
+
+        }
+        result.append(")");
+
+        return result.toString();
+    }
 }
diff --git a/scilab/modules/types/src/java/org/scilab/modules/types/ScilabPolynomial.java b/scilab/modules/types/src/java/org/scilab/modules/types/ScilabPolynomial.java
new file mode 100644 (file)
index 0000000..a63b834
--- /dev/null
@@ -0,0 +1,306 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.types;
+
+import java.util.Arrays;
+
+/**
+ * This class provides a representation on the Scilab Polynomial datatype<br>
+ * <br>
+ * This class is {@link java.io.Serializable} and any modification could
+ * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * <br>
+ * TODO Sly: faire de la doc
+ * @see org.scilab.modules.javasci.Scilab
+ */
+public class ScilabPolynomial implements ScilabType {
+
+    private static final long serialVersionUID = 870624048944109684L;
+    private static final ScilabTypeEnum type = ScilabTypeEnum.sci_poly;
+
+    private double[][][] realPart;
+    private double[][][] imaginaryPart;
+
+    private String varName;
+    private String polyVarName;
+    private boolean swaped;
+
+    /**
+     * Default constructor
+     */
+    public ScilabPolynomial() {
+        realPart = null;
+        imaginaryPart = null;
+    }
+
+    /**
+     * Constructor with a unique polynomial.
+     *
+     * @param data the unique polynomial
+     */
+    public ScilabPolynomial(double[] data) {
+        realPart = new double[1][1][];
+        realPart[0][0] = data;
+        imaginaryPart = null;
+    }
+
+    /**
+     * Constructor with a unique complex polynomial.
+     *
+     * @param realData the real part
+     * @param imagData the complex part
+     */
+    public ScilabPolynomial(double[] realData, double[] imagData) {
+        realPart = new double[1][1][];
+        realPart[0][0] = realData;
+        imaginaryPart = new double[1][1][];
+        imaginaryPart[0][0] = imagData;
+    }
+
+    /**
+     * Constructor with a matrix of real polynomials.
+     *
+     * @param data the data
+     */
+    public ScilabPolynomial(double[][][] data) {
+        realPart = data;
+        imaginaryPart = null;
+    }
+
+    /**
+     * Constructor with a matrix of complex polynomials
+     *
+     * @param realData the real part of the data
+     * @param imagData the imaginary part of the data
+     */
+    public ScilabPolynomial(double[][][] realData, double[][][] imagData) {
+        realPart = realData;
+        imaginaryPart = imagData;
+    }
+
+    /**
+     * Constructor with a matrix of complex polynomials
+     *
+     * @param varName the variable name
+     * @param polyVarName the polynomial variable name
+     * @param realData the real part of the data
+     * @param imagData the imaginary part of the data
+     * @param swaped if true the matrix is stored row by row
+     */
+    public ScilabPolynomial(String varName, String polyVarName, double[][][] realData, double[][][] imagData, boolean swaped) {
+        this.varName = varName;
+        this.polyVarName = polyVarName;
+        this.swaped = swaped;
+        realPart = realData;
+        imaginaryPart = imagData;
+    }
+
+    /**
+     * Return the type of Scilab
+     * @return the type of Scilab
+     * @since 5.4.0
+     */
+    @Override
+    public ScilabTypeEnum getType() {
+        return type;
+    }
+
+    /**
+     * Check the emptiness of the associated data.
+     * @return true, if the associated data array is empty.
+     */
+    @Override
+    public boolean isEmpty() {
+        return (realPart == null && imaginaryPart == null);
+    }
+
+    /**
+     * Check if the current data doesn't have an imaginary part.
+     *
+     * @return true, if the data are real only.
+     */
+    public boolean isReal() {
+        return (imaginaryPart == null);
+    }
+
+    /**
+     * Get the real part of the data.
+     *
+     * @return the real part.
+     */
+    public double[][][] getRealPart() {
+        return realPart;
+    }
+
+    /**
+     * Set the real part of the data.
+     *
+     * @param realPart the real part.
+     */
+    public void setRealPart(double[][][] realPart) {
+        this.realPart = realPart;
+    }
+
+    /**
+     * Get the imaginary part of the data.
+     *
+     * @return the imaginary part.
+     */
+    public double[][][] getImaginaryPart() {
+        return imaginaryPart;
+    }
+
+    /**
+     * Set the imaginary part of the data.
+     *
+     * @param imaginaryPart the imaginary part.
+     */
+    public void setImaginaryPart(double[][][] imaginaryPart) {
+        this.imaginaryPart = imaginaryPart;
+    }
+
+    /**
+     * Get the polynomila variable name
+     *
+     * @return the name
+     */
+    public String getPolyVarName() {
+        return polyVarName == null ? "x" : polyVarName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getVarName() {
+        return varName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isSwaped() {
+        return swaped;
+    }
+
+    /**
+     * Get complex matrix as a serialized form
+     *
+     * @return the serialized matrix with complex values
+     */
+    // TODO Sly :  serializer ce machin
+    public double[][] getSerializedComplexPolynomial() {
+        return new double[0][0];
+    }
+
+
+    /**
+     * @return the height of the data matrix
+     * @see org.scilab.modules.types.ScilabType#getHeight()
+     */
+    @Override
+    public int getHeight() {
+        if (isEmpty()) {
+            return 0;
+        }
+        return realPart.length;
+    }
+
+    /**
+     * @return the width of the data matrix
+     * @see org.scilab.modules.types.ScilabType#getWidth()
+     */
+    @Override
+    public int getWidth() {
+        if (isEmpty() || realPart.length  == 0) {
+            return 0;
+        }
+
+        return realPart[0].length;
+    }
+
+    /**
+     * @see org.scilab.modules.types.ScilabType#equals(Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof ScilabPolynomial) {
+            ScilabPolynomial sciPoly = ((ScilabPolynomial) obj);
+            if (sciPoly.getPolyVarName().equals(getPolyVarName())) {
+                if (this.isReal() && sciPoly.isReal()) {
+                    return Arrays.deepEquals(this.getRealPart(), sciPoly.getRealPart());
+                } else {
+                    /* Complex */
+                    return Arrays.deepEquals(this.getRealPart(), sciPoly.getRealPart()) && Arrays.deepEquals(this.getImaginaryPart(), sciPoly.getImaginaryPart());
+                }
+            } else {
+                return false;
+            }
+        } else {
+            return false;
+        }
+    }
+
+
+    /**
+     * Display the representation in the Scilab language of the type<br />
+     * Note that the representation can be copied/pasted straight into Scilab
+     *
+     * @return a Scilab-like String representation of the data.
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        StringBuilder result = new StringBuilder();
+
+        if (isEmpty()) {
+            result.append("[]");
+            return result.toString();
+        }
+
+        result.append("[");
+
+        for (int i = 0; i < getHeight(); ++i) {
+            for (int j = 0; j < getWidth(); ++j) {
+                result.append("poly([");
+                for (int k = 0; k < realPart[i][j].length; k++) {
+                    if (isReal()) {
+                        result.append(Double.toString(realPart[i][j][k]));
+                    } else {
+                        result.append(Double.toString(realPart[i][j][k]));
+                        if (imaginaryPart[i][j][k] != 0) {
+                            result.append("+");
+                            result.append(Double.toString(imaginaryPart[i][j][k]));
+                            result.append("*%i");
+                        }
+                    }
+                    if (k < realPart[i][j].length - 1) {
+                        result.append(", ");
+                    }
+                }
+                result.append("], \"");
+                result.append(getPolyVarName());
+                result.append("\", \"coeff\")");
+
+                if (j < getWidth() - 1) {
+                    result.append(", ");
+                }
+            }
+            if (i < getHeight() - 1) {
+                result.append(" ; ");
+            }
+        }
+        result.append("]");
+
+        return result.toString();
+    }
+}
diff --git a/scilab/modules/types/src/java/org/scilab/modules/types/ScilabSparse.java b/scilab/modules/types/src/java/org/scilab/modules/types/ScilabSparse.java
new file mode 100644 (file)
index 0000000..6a8083f
--- /dev/null
@@ -0,0 +1,514 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.types;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * This class provides a representation on the Scilab Sparse datatype<br>
+ * <br>
+ * This class is {@link java.io.Serializable} and any modification could
+ * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * <br>
+ * //TODO Sly : ajouter de la doc
+ * @see org.scilab.modules.javasci.Scilab
+ */
+public class ScilabSparse implements ScilabType {
+
+    private static final long serialVersionUID = 879625048944109684L;
+    private static final ScilabTypeEnum type = ScilabTypeEnum.sci_sparse;
+
+    private int rows;
+    private int cols;
+    private int nbItem;
+    private int[] nbItemRow;
+    private int[] colPos;
+    private double[] realPart;
+    private double[] imaginaryPart;
+    private String varName;
+
+    /**
+     * Default constructor
+     */
+    public ScilabSparse() { }
+
+    /**
+     * Constructor with a unique value.
+     * @param data the unique value
+     */
+    public ScilabSparse(double data) {
+        if (data != 0) {
+            nbItem = 1;
+            rows = cols = 1;
+            nbItemRow = new int[]{1};
+            colPos = new int[]{0};
+            realPart = new double[]{ data };
+        }
+    }
+
+    /**
+     * Constructor with a unique complex value.
+     *
+     * @param realData the real part
+     * @param imagData the complex part
+     */
+    public ScilabSparse(double realData, double imagData) {
+        if (realData != 0 || imagData != 0) {
+            nbItem = 1;
+            rows = cols = 1;
+            nbItemRow = new int[]{1};
+            colPos = new int[]{0};
+            realPart = new double[]{ realData };
+            imaginaryPart = new double[]{ imagData };
+        }
+    }
+
+    /**
+     * Constructor
+     *
+     * @param rows the number of rows
+     * @param cols the number of cols
+     * @param nbItem the number of non null items
+     * @param nbItemRow contains the number of true in each rows
+     * @param colPos the column position of each non null item
+     * @param data the non null data
+     */
+    public ScilabSparse(int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos, double[] data) {
+        this.rows = rows;
+        this.cols = cols;
+        this.nbItem = nbItem;
+        this.nbItemRow = nbItemRow;
+        this.colPos = colPos;
+        this.realPart = data;
+    }
+
+    /**
+     * Constructor
+     *
+     * @param rows the number of rows
+     * @param cols the number of cols
+     * @param nbItem the number of non null items
+     * @param nbItemRow contains the number of true in each rows
+     * @param colPos the column position of each non null item
+     * @param real the non null real data
+     * @param imag the non null imaginary data
+     */
+    public ScilabSparse(int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos, double[] real, double[] imag) {
+        this(rows, cols, nbItem, nbItemRow, colPos, real);
+        this.imaginaryPart = imag;
+    }
+
+    /**
+     * Constructor with a matrix of real data.
+     *
+     * @param data the data
+     */
+    public ScilabSparse(double[][] data) {
+        if (data.length != 0 && data[0].length != 0) {
+            rows = data.length;
+            cols = data[0].length;
+            nbItemRow = new int[rows];
+            List<Integer> listCol = new ArrayList<Integer>();
+            List<Double> listVal = new ArrayList<Double>();
+
+            for (int i = 0; i < rows; i++) {
+                for (int j = 0; j < cols; j++) {
+                    if (data[i][j] != 0) {
+                        ++nbItem;
+                        ++nbItemRow[i];
+                        listCol.add(j);
+                        listVal.add(data[i][j]);
+                    }
+                }
+            }
+
+            colPos = new int[listCol.size()];
+            realPart = new double[colPos.length];
+            int i = 0;
+            for (Integer c : listCol) {
+                colPos[i++] = c;
+            }
+            for (Double x : listVal) {
+                realPart[i++] = x;
+            }
+        }
+    }
+
+    /**
+     * Constructor with a matrix of complex numbers
+     *
+     * @param realData the real part of the data
+     * @param imagData the imaginary part of the data
+     */
+    public ScilabSparse(double[][] realData, double[][] imagData) {
+        if (realData.length != 0 && realData[0].length != 0) {
+            rows = realData.length;
+            cols = realData[0].length;
+            nbItemRow = new int[rows];
+            List<Integer> listCol = new ArrayList<Integer>();
+            List<Double> listReal = new ArrayList<Double>();
+            List<Double> listImag = new ArrayList<Double>();
+
+            for (int i = 0; i < rows; i++) {
+                for (int j = 0; j < cols; j++) {
+                    if (realData[i][j] != 0 || imagData[i][j] != 0) {
+                        ++nbItem;
+                        ++nbItemRow[i];
+                        listCol.add(j);
+                        listReal.add(realData[i][j]);
+                        listImag.add(imagData[i][j]);
+                    }
+                }
+            }
+
+            colPos = new int[listCol.size()];
+            this.realPart = new double[colPos.length];
+            this.imaginaryPart = new double[colPos.length];
+            int i = 0;
+            for (Integer c : listCol) {
+                colPos[i++] = c;
+            }
+            i = 0;
+            for (Double x : listReal) {
+                this.realPart[i++] = x;
+            }
+            i = 0;
+            for (Double x : listImag) {
+                this.imaginaryPart[i++] = x;
+            }
+        }
+    }
+
+    /**
+     * Constructor
+     *
+     * @param varName the variable name
+     * @param rows the number of rows
+     * @param cols the number of cols
+     * @param nbItem the number of non null items
+     * @param nbItemRow contains the number of true in each rows
+     * @param colPos the column position of each non null item
+     * @param real the non null real data
+     * @param imag the non null imaginary data
+     */
+    public ScilabSparse(String varName, int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos, double[] real, double[] imag) {
+        this(rows, cols, nbItem, nbItemRow, colPos, real, imag);
+        this.varName = varName;
+    }
+
+    /**
+     * Return the type of Scilab
+     * @return the type of Scilab
+     * @since 5.4.0
+     */
+    @Override
+    public ScilabTypeEnum getType() {
+        return type;
+    }
+
+    /**
+     * Check the emptiness of the associated data.
+     * @return true, if the associated data array is empty.
+     */
+    @Override
+    public boolean isEmpty() {
+        return rows == 0 && cols == 0;
+    }
+
+    /**
+     * Check if the current data doesn't have an imaginary part.
+     *
+     * @return true, if the data are real only.
+     */
+    public boolean isReal() {
+        return (imaginaryPart == null);
+    }
+
+    /**
+     * Get the real part of the data.
+     *
+     * @return the real part.
+     */
+    public double[] getRealPart() {
+        return realPart;
+    }
+
+    /**
+     * Set the real part of the data.
+     *
+     * @param realPart the real part.
+     */
+    public void setRealPart(double[] realPart) {
+        this.realPart = realPart;
+    }
+
+    /**
+     * Get the imaginary part of the data.
+     *
+     * @return the imaginary part.
+     */
+    public double[] getImaginaryPart() {
+        return imaginaryPart;
+    }
+
+    /**
+     * Set the imaginary part of the data.
+     *
+     * @param imaginaryPart the imaginary part.
+     */
+    public void setImaginaryPart(double[] imaginaryPart) {
+        this.imaginaryPart = imaginaryPart;
+    }
+
+    /**
+     * Get the number of non null items in the matrix.
+     *
+     * @return the number of non null items.
+     */
+    public int getNbNonNullItems() {
+        return nbItem;
+    }
+
+    /**
+     * Set the number of non null items in the matrix.
+     *
+     * @param the number of non null items.
+     */
+    public void setNbNonNullItems(int nbItem) {
+        this.nbItem = nbItem;
+    }
+
+    /**
+     * Get the number of non null items by row.
+     *
+     * @return an integer array.
+     */
+    public int[] getNbItemRow() {
+        return nbItemRow;
+    }
+
+    /**
+     * Set the number of non null items by row.
+     *
+     * @param an integer array.
+     */
+    public void setNbItemRow(int[] nbItemRow) {
+        this.nbItemRow = nbItemRow;
+    }
+
+    /**
+     * Get the column positions of the non null items.
+     *
+     * @return an integer array.
+     */
+    public int[] getColPos() {
+        return colPos;
+    }
+
+    /**
+     * Set the column positions of the non null items.
+     *
+     * @param an integer array.
+     */
+    public void setColPos(int[] colPos) {
+        this.colPos = colPos;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getVarName() {
+        return varName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isSwaped() {
+        return false;
+    }
+
+    /**
+     * Get the real part of the full sparse matrix
+     *
+     * @return the full real matrix
+     */
+    public double[][] getFullRealPart() {
+        int prev = 0;
+        int j = 0;
+        double[][] d = new double[rows][cols];
+        for (int i = 0; i < rows; i++) {
+            for (; j < prev + nbItemRow[i]; j++) {
+                d[i][colPos[j]] = realPart[j];
+            }
+            prev += nbItemRow[i];
+        }
+
+        return d;
+    }
+
+    /**
+     * Get the imaginary part of the full sparse matrix
+     *
+     * @return the full imaginary matrix
+     */
+    public double[][] getFullImaginaryPart() {
+        int prev = 0;
+        int j = 0;
+        double[][] d = new double[rows][cols];
+        for (int i = 0; i < rows; i++) {
+            for (; j < prev + nbItemRow[i]; j++) {
+                d[i][colPos[j]] = imaginaryPart[j];
+            }
+            prev += nbItemRow[i];
+        }
+
+        return d;
+    }
+
+    /**
+     * Get the full sparse matrix representation as an array 2 x rows x cols
+     * If d = getFullMatrix(), then d[0] contains realpart and d[1] the imaginary one.
+     *
+     * @return the full matrix components
+     */
+    public double[][][] getFullMatrix() {
+        int prev = 0;
+        int j = 0;
+        double[][][] d = new double[2][rows][cols];
+        for (int i = 0; i < rows; i++) {
+            for (; j < prev + nbItemRow[i]; j++) {
+                d[0][i][colPos[j]] = realPart[j];
+                d[1][i][colPos[j]] = imaginaryPart[j];
+            }
+            prev += nbItemRow[i];
+        }
+
+        return d;
+    }
+
+    /**
+     * Get complex matrix as a serialized form
+     *
+     * @return the serialized matrix with complex values
+     */
+    // TODO Sly : faire qque chose ici...
+    public double[] getSerializedSparseMatrix() {
+        return new double[0];
+    }
+
+
+    /**
+     * @return the height of the data matrix
+     * @see org.scilab.modules.types.ScilabType#getHeight()
+     */
+    @Override
+    public int getHeight() {
+        return rows;
+    }
+
+    /**
+     * @return the width of the data matrix
+     * @see org.scilab.modules.types.ScilabType#getWidth()
+     */
+    @Override
+    public int getWidth() {
+        return cols;
+    }
+
+    /**
+     * @see org.scilab.modules.types.ScilabType#equals(Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof ScilabSparse) {
+            ScilabSparse sciSparse = (ScilabSparse) obj;
+            if (this.getNbNonNullItems() == sciSparse.getNbNonNullItems() &&
+                Arrays.equals(this.getNbItemRow(), sciSparse.getNbItemRow()) &&
+                Arrays.equals(this.getColPos(), sciSparse.getColPos())) {
+                if (this.isReal() && sciSparse.isReal()) {
+                    return Arrays.equals(this.getRealPart(), sciSparse.getRealPart());
+                } else {
+                    /* Complex */
+                    return Arrays.equals(this.getRealPart(), sciSparse.getRealPart()) && Arrays.equals(this.getImaginaryPart(), sciSparse.getImaginaryPart());
+                }
+            } else {
+                return false;
+            }
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Display the representation in the Scilab language of the type<br />
+     * Note that the representation can be copied/pasted straight into Scilab
+     *
+     * @return a Scilab-like String representation of the data.
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        StringBuilder result = new StringBuilder();
+
+        if (isEmpty()) {
+            result.append("[]");
+            return result.toString();
+        }
+
+        result.append("sparse([");
+        int j = 0;
+        int prev = 0;
+        for (int i = 0; i < rows; i++) {
+            for (; j < prev + nbItemRow[i]; j++) {
+                result.append(Integer.toString(i + 1));
+                result.append(", ");
+                result.append(Integer.toString(colPos[j] + 1));
+                if (j < nbItem - 1) {
+                    result.append(" ; ");
+                }
+            }
+            prev += nbItemRow[i];
+        }
+
+        result.append("], [");
+        for (int i = 0; i < nbItem; i++) {
+            if (isReal()) {
+                result.append(Double.toString(realPart[i]));
+            } else {
+                result.append(Double.toString(realPart[i]));
+                if (imaginaryPart[i] != 0) {
+                    result.append("+");
+                    result.append(Double.toString(imaginaryPart[i]));
+                    result.append("*%i");
+                }
+            }
+            if (i < nbItem - 1) {
+                result.append(" ; ");
+            } else {
+                result.append("]");
+            }
+        }
+
+        result.append(", [");
+        result.append(Integer.toString(rows));
+        result.append(", ");
+        result.append(Integer.toString(cols));
+
+        result.append("])");
+
+        return result.toString();
+    }
+}
index dbe9de1..4cd9e50 100644 (file)
@@ -1,13 +1,14 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2009-2009 - DIGITEO - Bruno JOFRET
- * 
+ *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
+ *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
  *  you should have received as part of this distribution.  The terms
  *  are also available at
  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- * 
+ *
  */
 
 package org.scilab.modules.types;
@@ -17,7 +18,7 @@ import java.util.Arrays;
 /**
  * This class provides a representation on the Scilab String datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could 
+ * This class is {@link java.io.Serializable} and any modification could
  * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
@@ -29,160 +30,187 @@ import java.util.Arrays;
  */
 public class ScilabString implements ScilabType {
 
-       private static final long serialVersionUID = 359802519980180085L;
-       private static final ScilabTypeEnum type = ScilabTypeEnum.sci_strings;
-
-       private String[][] data;
-
-       /**
-        * Default constructor
-        */
-       public ScilabString() {
-               data = null;
-       }
-       
-       /**
-        * Constructor with data.
-        * 
-        * @param data the associated data.
-        */
-       public ScilabString(String[][] data) {
-               this.data = data;
-       }
-       
-       /**
-        * Constructor with vector data.
-        * 
-        * @param data the column vector data 
-        */
-       public ScilabString(String[] data) {
-               if (data == null || data.length == 0) {
-                       this.data = new String[1][1];
-                       this.data[0][0] = "";
-               } else {
-                       this.data = new String[1][data.length];
-                       for (int i = 0; i < data.length; i++) {
-                               this.data[0][i] = data[i];
-                       }
-               }
-       }
-       
-       /**
-        * Constructor with a unique value
-        * 
-        * @param string the value
-        */
-       public ScilabString(String string) {
-               if (string == null) {
-                       throw new IllegalArgumentException("string == null");
-               }
-               this.data = new String[1][1];
-               this.data[0][0] = string;
-       }
-
-       /**
-        * Set the values.
-        * 
-        * @param data the values
-        */
-       public void setData(String[][] data) {
-               this.data = data;
-       }
-
-    /** 
-     * Return the type of Scilab 
+    private static final long serialVersionUID = 359802519980180085L;
+    private static final ScilabTypeEnum type = ScilabTypeEnum.sci_strings;
+
+    private String[][] data;
+    private String varName;
+    private boolean swaped;
+
+    /**
+     * Default constructor
+     */
+    public ScilabString() {
+        data = null;
+    }
+
+    /**
+     * Constructor with data.
+     *
+     * @param data the associated data.
+     */
+    public ScilabString(String[][] data) {
+        this.data = data;
+    }
+
+    /**
+     * Constructor with data.
+     *
+     * @param data the associated data.
+     */
+    public ScilabString(String varName, String[][] data, boolean swaped) {
+        this.varName = varName;
+        this.data = data;
+        this.swaped = swaped;
+    }
+
+    /**
+     * Constructor with vector data.
+     *
+     * @param data the column vector data
+     */
+    public ScilabString(String[] data) {
+        if (data == null || data.length == 0) {
+            this.data = new String[1][1];
+            this.data[0][0] = "";
+        } else {
+            this.data = new String[1][data.length];
+            for (int i = 0; i < data.length; i++) {
+                this.data[0][i] = data[i];
+            }
+        }
+    }
+
+    /**
+     * Constructor with a unique value
+     *
+     * @param string the value
+     */
+    public ScilabString(String string) {
+        if (string == null) {
+            throw new IllegalArgumentException("string == null");
+        }
+        this.data = new String[1][1];
+        this.data[0][0] = string;
+    }
+
+    /**
+     * Set the values.
+     *
+     * @param data the values
+     */
+    public void setData(String[][] data) {
+        this.data = data;
+    }
+
+    /**
+     * Return the type of Scilab
      * @return the type of Scilab
      * @since 5.4.0
      */
     @Override
-       public ScilabTypeEnum getType() {
+    public ScilabTypeEnum getType() {
         return type;
     }
 
-       /**
-        * @return the associated values
-        */
-       public String[][] getData() {
-               return data;
-       }
-       
-       /**
-        * @return the height of the data matrix
-        * @see org.scilab.modules.types.ScilabType#getHeight()
-        */
-       @Override
-       public int getHeight() {
-               if (data == null) {
-                       return 0;
-               }
-               return data.length;
-       }
-
-       /**
-        * @return the width of the data matrix
-        * @see org.scilab.modules.types.ScilabType#getWidth()
-        */
-       @Override
-       public int getWidth() {
-               if (data == null) {
-                       return 0;
-               }
-               return data[0].length;
-       }
-       
-       /**
-        * Check the emptiness of the associated data.
-        * @return true, if the associated data array is empty. 
-        */
-       @Override
-       public boolean isEmpty() {
-               return (data == null);
-       }
-       
-       /**
-        * @see org.scilab.modules.types.ScilabType#equals(Object)
-        */
-       @Override
-       public boolean equals(Object obj) {
-               if (obj instanceof ScilabString) {
-                       return Arrays.deepEquals(this.getData(), ((ScilabString)obj).getData());
-               } else {
-                       return false;
-               }
-       }
-
-       /**
-        * Display the representation in the Scilab language of the type<br />
-        * Note that the representation can be copied/pasted straight into Scilab 
+    /**
+     * @return the associated values
+     */
+    public String[][] getData() {
+        return data;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getVarName() {
+        return varName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isSwaped() {
+        return swaped;
+    }
+
+    /**
+     * @return the height of the data matrix
+     * @see org.scilab.modules.types.ScilabType#getHeight()
+     */
+    @Override
+    public int getHeight() {
+        if (data == null) {
+            return 0;
+        }
+        return data.length;
+    }
+
+    /**
+     * @return the width of the data matrix
+     * @see org.scilab.modules.types.ScilabType#getWidth()
+     */
+    @Override
+    public int getWidth() {
+        if (data == null) {
+            return 0;
+        }
+        return data[0].length;
+    }
+
+    /**
+     * Check the emptiness of the associated data.
+     * @return true, if the associated data array is empty.
+     */
+    @Override
+    public boolean isEmpty() {
+        return (data == null);
+    }
+
+    /**
+     * @see org.scilab.modules.types.ScilabType#equals(Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof ScilabString) {
+            return Arrays.deepEquals(this.getData(), ((ScilabString)obj).getData());
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Display the representation in the Scilab language of the type<br />
+     * Note that the representation can be copied/pasted straight into Scilab
      *
-        * @return a Scilab-like String representation of the data.
-        * @see java.lang.Object#toString()
-        */
-       @Override
-       public String toString() {
-               StringBuffer result = new StringBuffer();
-               if (isEmpty()) {
-                       result.append("[]");
-                       return result.toString();
-               }
-
-               result.append("[");
-               for (int i = 0; i < getHeight(); ++i) {
-                       for (int j = 0; j < getWidth(); ++j) {
-
-                               result.append('"');
-                               result.append(getData()[i][j]);
-                               result.append('"');
-                               
-                               if (j != getWidth() - 1) {
-                                       result.append(", ");
-                               }
-                       }
-                       if (i != getHeight() - 1) {
-                               result.append(" ; ");
-                       }
-               }
-               result.append("]");
-               return result.toString();
-       }
+     * @return a Scilab-like String representation of the data.
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        StringBuffer result = new StringBuffer();
+        if (isEmpty()) {
+            result.append("[]");
+            return result.toString();
+        }
+
+        result.append("[");
+        for (int i = 0; i < getHeight(); ++i) {
+            for (int j = 0; j < getWidth(); ++j) {
+
+                result.append('"');
+                result.append(getData()[i][j].replaceAll("\"", "\"\"").replaceAll("\'", "\'\'"));
+                result.append('"');
+
+                if (j != getWidth() - 1) {
+                    result.append(", ");
+                }
+            }
+            if (i != getHeight() - 1) {
+                result.append(" ; ");
+            }
+        }
+        result.append("]");
+        return result.toString();
+    }
 }
index 1326c92..8713f60 100644 (file)
@@ -1,24 +1,27 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2009-2009 - DIGITEO - Bruno JOFRET
- * 
+ *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
+ *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
  *  you should have received as part of this distribution.  The terms
  *  are also available at
  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- * 
+ *
  */
 
 package org.scilab.modules.types;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * This class provides a representation on the Scilab TList datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could 
+ * This class is {@link java.io.Serializable} and any modification could
  * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
@@ -31,111 +34,184 @@ import java.util.Collection;
  */
 public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
 
-       private static final long serialVersionUID = 8080160982092586620L;
-       private static final ScilabTypeEnum type = ScilabTypeEnum.sci_tlist;
-
-       /**
-        * Construct an empty tlist.
-        * 
-        * Note that the first element of this collection is the header used by
-        * Scilab to find each field type.
-        */
-       public ScilabTList() {
-               super();
+    private static final long serialVersionUID = 8080160982092586620L;
+    private static final ScilabTypeEnum type = ScilabTypeEnum.sci_tlist;
+
+    private String varName;
+
+    /**
+     * Construct an empty tlist.
+     *
+     * Note that the first element of this collection is the header used by
+     * Scilab to find each field type.
+     */
+    public ScilabTList() {
+        super();
+    }
+
+    /**
+     * Construct an empty mlist.
+     *
+     * Note that the first element of this collection is the header used by
+     * Scilab to find each field name.
+     */
+    public ScilabTList(String varName) {
+        super();
+        this.varName = varName;
+    }
+
+    /**
+     * Construct a tlist with a specified header.
+     *
+     * @param types type names of the fields.
+     */
+    public ScilabTList(String []types) {
+        super();
+        String [][] typesData = new String[1][types.length];
+        typesData[0] = types;
+        add(new ScilabString(typesData));
+    }
+
+    /**
+     * Construct a tlist containing the elements of the specified collection, in
+     * the order that they are returned by the specified collection's iterator.
+     *
+     * @param types
+     *                  type names of the fields.
+     * @param c
+     *                  the collection whose elements are to be placed into this
+     *                  tlist.
+     */
+    public ScilabTList(String[] types, Collection< ? extends ScilabType> c) {
+        super(c.size() + 1);
+
+        String[][] typesData = new String[1][types.length];
+        typesData[0] = types;
+        add(new ScilabString(typesData));
+
+        addAll(c);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getVarName() {
+        return varName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isSwaped() {
+        return false;
+    }
+
+/**
+     * Get a map between the fields name and the associated ScilabType objects
+     *
+     * @return the map
+     */
+    public Map<String, ScilabType> getTListFields() {
+       Map<String, ScilabType> map = new HashMap<String, ScilabType>();
+       if (isEmpty()) {
+           return map;
+       }
+
+       ScilabString mat = (ScilabString) get(0);
+       if (mat.isEmpty()) {
+           return map;
        }
-       
-       /**
-        * Construct a tlist with a specified header.
-        *  
-        * @param types type names of the fields.
-        */
-       public ScilabTList(String []types) {
-               super();
-               String [][] typesData = new String[1][types.length];
-               typesData[0] = types;
-               add(new ScilabString(typesData));
+
+       String[] fields = mat.getData()[0];
+       for (int i = 1; i < fields.length; i++) {
+           if (i < size()) {
+               map.put(fields[i], get(i));
+           } else {
+               map.put(fields[i], null);
+           }
        }
 
-       /**
-        * Construct a tlist containing the elements of the specified collection, in
-        * the order that they are returned by the specified collection's iterator.
-        * 
-        * @param types
-        *                      type names of the fields.
-        * @param c
-        *                      the collection whose elements are to be placed into this
-        *                      tlist.
-        */
-       public ScilabTList(String[] types, Collection< ? extends ScilabType> c) {
-               super(c.size() + 1);
-               
-               String[][] typesData = new String[1][types.length];
-               typesData[0] = types;
-               add(new ScilabString(typesData));
-               
-               addAll(c);
+       return map;
+    }
+
+    /**
+     * Get the mlist type or null if none
+     *
+     * @return the mlist type
+     */
+    public String getTListType() {
+       if (isEmpty()) {
+           return null;
        }
-       
-    /** 
-     * Return the type of Scilab 
+
+       ScilabString mat = (ScilabString) get(0);
+       if (mat.isEmpty()) {
+           return null;
+       }
+
+       return mat.getData()[0][0];
+    }
+
+    /**
+     * Return the type of Scilab
      * @return the type of Scilab
      * @since 5.4.0
      */
     @Override
-       public ScilabTypeEnum getType() {
+        public ScilabTypeEnum getType() {
         return type;
     }
 
-       /**
-        * @return 1 when there is data on the list, 0 otherwise.
-        * @see org.scilab.modules.types.ScilabType#getHeight()
-        */
-       @Override
-       public int getHeight() {
-               if (isEmpty()) {
-                       return 0;
-               }
-               return 1;
-       }
+    /**
+     * @return 1 when there is data on the list, 0 otherwise.
+     * @see org.scilab.modules.types.ScilabType#getHeight()
+     */
+    @Override
+        public int getHeight() {
+        if (isEmpty()) {
+            return 0;
+        }
+        return 1;
+    }
 
-       /**
-        * @return 1 when there is data on the list, 0 otherwise.
-        * @see org.scilab.modules.types.ScilabType#getWidth()
-        */
-       @Override
-       public int getWidth() {
-               if (isEmpty()) {
-                       return 0;
-               }
-               return size();
-       }
-       
-       /**
-        * Display the representation in the Scilab language of the type<br />
-        * Note that the representation can be copied/pasted straight into Scilab 
-     * 
-        * @return the pretty-printed data
-        * @see java.util.AbstractCollection#toString()
-        */
-       @Override
-       public String toString() {
-               
-               StringBuffer result = new StringBuffer();
-               if (isEmpty()) {
-                       result.append("tlist()");
-                       return result.toString();
-               }
-
-               result.append("tlist(");
-               for (int i = 0; i < size(); i++) {
-                       result.append(get(i));
-                       if (i != size() - 1) {
-                               result.append(", ");
-                       }
-                       
-               }
-               result.append(")");
-       
-               return result.toString();
-       }
+    /**
+     * @return 1 when there is data on the list, 0 otherwise.
+     * @see org.scilab.modules.types.ScilabType#getWidth()
+     */
+    @Override
+        public int getWidth() {
+        if (isEmpty()) {
+            return 0;
+        }
+        return size();
+    }
+
+    /**
+     * Display the representation in the Scilab language of the type<br />
+     * Note that the representation can be copied/pasted straight into Scilab
+     *
+     * @return the pretty-printed data
+     * @see java.util.AbstractCollection#toString()
+     */
+    @Override
+        public String toString() {
+
+        StringBuffer result = new StringBuffer();
+        if (isEmpty()) {
+            result.append("tlist()");
+            return result.toString();
+        }
+
+        result.append("tlist(");
+        for (int i = 0; i < size(); i++) {
+            result.append(get(i));
+            if (i != size() - 1) {
+                result.append(", ");
+            }
+
+        }
+        result.append(")");
+
+        return result.toString();
+    }
 }
index 97a0c21..cb2621d 100644 (file)
@@ -1,13 +1,13 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2009-2009 - DIGITEO - Bruno JOFRET
- * 
+ *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
  *  you should have received as part of this distribution.  The terms
  *  are also available at
  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- * 
+ *
  */
 
 package org.scilab.modules.types;
@@ -17,53 +17,66 @@ import java.io.Serializable;
 /**
  * This interface specifies what is a Scilab types<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could 
+ * This class is {@link java.io.Serializable} and any modification could
  * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  */
 public interface ScilabType extends Serializable, Cloneable {
 
-    /** 
-     * Return the type of Scilab 
+    /**
+     * Return the type of Scilab
      * @return the type of Scilab
      * @since 5.4.0
      */
     public ScilabTypeEnum getType();
 
-       /**
-        * Return the width (number of elements) of the stored data
-        *
-        * @return the width
-        */
-       int getWidth();
-       
-       /**
-        * Return the height (number of elements) of the stored data
-        *
-        * @return the height
-        */
-       int getHeight();
-       
-       /**
-        * Check if the current instance is empty.
-        * 
-        * @return true, the there is no data; false otherwise.
-        */
-       boolean isEmpty();
-       
+    /**
+     * Return the width (number of elements) of the stored data
+     *
+     * @return the width
+     */
+    int getWidth();
+
+    /**
+     * Return the height (number of elements) of the stored data
+     *
+     * @return the height
+     */
+    int getHeight();
 
-       /**
-        * Compare if obj is the same object or not
-        * @param obj the object we want to compare
-        * @return true if the two objects are equals, false otherwise
-        */
-       public boolean equals(Object obj);
+    /**
+     * Check if the current instance is empty.
+     *
+     * @return true, the there is no data; false otherwise.
+     */
+    boolean isEmpty();
+
+    /**
+     * Get the variable name or null if it has not a name
+     *
+     * @return the name
+     */
+    String getVarName();
 
-       /**
-        * Display the representation in the Scilab language of the type<br />
-        * Note that the representation can be copied/pasted straight into Scilab 
-     * 
-        * @return the pretty print
-        */
-       String toString();
+    /**
+     * Get the how the matrix is stored
+     *
+     * @return true if the matrix is stored row by row
+     */
+    boolean isSwaped();
+
+    /**
+     * Compare if obj is the same object or not
+     * @param obj the object we want to compare
+     * @return true if the two objects are equals, false otherwise
+     */
+    public boolean equals(Object obj);
+
+    /**
+     * Display the representation in the Scilab language of the type<br />
+     * Note that the representation can be copied/pasted straight into Scilab
+     *
+     * @return the pretty print
+     */
+    String toString();
 }
diff --git a/scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariables.java b/scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariables.java
new file mode 100644 (file)
index 0000000..2b9f3d0
--- /dev/null
@@ -0,0 +1,420 @@
+/*
+ * Scilab (http://www.scilab.org/) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.types;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.swing.event.EventListenerList;
+
+/**
+ * Class to handle the Scilab data retrievment and conversion to a ScilabType object.
+ * All the functions sendFoo are used from C++ and should not be used on the Java side.
+ *
+ * An handler which implements ScilabVariablesHandler must be used to achieve the retrievment.
+ * The id returned by addScilabVariablesHandler must be passed from C/C++ to functions in the
+ * class org_modules_types::ScilabToJava to guarantee that the correct handler would receive its datas.
+ */
+public final class ScilabVariables {
+
+    private static final Map<Thread, ArrayList<ScilabType>> lists = new HashMap<Thread, ArrayList<ScilabType>>();
+    private static final Vector<ScilabVariablesHandler> handlers = new Vector<ScilabVariablesHandler>();
+
+    /**
+     * Register a new handler
+     * @param handler the handler
+     * @return the id to use from C/C++
+     */
+    public static final int addScilabVariablesHandler(ScilabVariablesHandler handler) {
+        int i = 0;
+        for (;i < handlers.size(); i++) {
+            ScilabVariablesHandler h = handlers.get(i);
+            if (h == handler) {
+                return i;
+            } else if (h == null) {
+                handlers.set(i, handler);
+                return i;
+            }
+        }
+        handlers.add(handler);
+
+        return i;
+    }
+
+    /**
+     * Unregister an handler (the id must be considered as lost !!)
+     * @param handler the handler to remove
+     */
+    public static final void removeScilabVariablesHandler(ScilabVariablesHandler handler) {
+        if (handler != null) {
+            for (int i = 0; i < handlers.size(); i++) {
+                if (handlers.get(i) == handler) {
+                    handlers.set(i, null);
+                }
+            }
+        }
+    }
+
+    /**
+     * Unregister an handler with a given id (the id must be considered as lost !!)
+     * @param id the handler id to remove
+     */
+    public static final void removeScilabVariablesHandler(int id) {
+        if (id >= 0 && id < handlers.size()) {
+            handlers.set(id, null);
+        }
+    }
+
+    /**
+     * Send double matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param data the data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, double[][] data, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabDouble(null, data, null, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabDouble(varName, data, null, swaped));
+        }
+    }
+
+    /**
+     * Send complex matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param real the real data
+     * @param imag the imaginary data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, double[][] real, double[][] img, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabDouble(null, real, img, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabDouble(varName, real, img, swaped));
+        }
+    }
+
+    /**
+     * Send int32 matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param data the data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, int[][] data, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabInteger(null, data, false, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabInteger(varName, data, false, swaped));
+        }
+    }
+
+    /**
+     * Send uint16 matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param data the data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendUnsignedData(String varName, int[] indexes, short[][] data, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabInteger(null, data, true, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabInteger(varName, data, true, swaped));
+        }
+    }
+
+    /**
+     * Send int16 matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param data the data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, short[][] data, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabInteger(null, data, false, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabInteger(varName, data, false, swaped));
+        }
+    }
+
+    /**
+     * Send uint8 matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param data the data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendUnsignedData(String varName, int[] indexes, byte[][] data, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabInteger(null, data, true, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabInteger(varName, data, true, swaped));
+        }
+    }
+
+    /**
+     * Send boolean matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param data the data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, boolean[][] data, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabBoolean(null, data, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabBoolean(varName, data, swaped));
+        }
+    }
+
+    /**
+     * Send int8 matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param data the data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, byte[][] data, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabInteger(null, data, false, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabInteger(varName, data, false, swaped));
+        }
+    }
+
+    /**
+     * Send int64 or uint64 matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param data the data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, long[][] data, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabInteger(null, data, false, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabInteger(varName, data, false, swaped));
+        }
+    }
+
+    /**
+     * Send uint32 matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param data the data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendUnsignedData(String varName, int[] indexes, int[][] data, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabInteger(null, data, true, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabInteger(varName, data, true, swaped));
+        }
+    }
+
+    /**
+     * Send string matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param data the data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, String[][] data, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabString(null, data, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabString(varName, data, swaped));
+        }
+    }
+
+    /**
+     * Send double sparse matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param row the row number
+     * @param col the col number
+     * @param nbItem the number of non null elements
+     * @param nbItemRow the number by row of non null elements
+     * @param colPos the column position of the non null elements
+     * @param data the data
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, int row, int col, int nbItem, int[] nbItemRow, int[] colPos, double[] data, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabSparse(null, row, col, nbItem, nbItemRow, colPos, data, null));
+        } else {
+            handlers.get(handlerId).handle(new ScilabSparse(varName, row, col, nbItem, nbItemRow, colPos, data, null));
+        }
+    }
+
+    /**
+     * Send double sparse matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param row the row number
+     * @param col the col number
+     * @param nbItem the number of non null elements
+     * @param nbItemRow the number by row of non null elements
+     * @param colPos the column position of the non null elements
+     * @param real the real data
+     * @param imag the imaginary data
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, int row, int col, int nbItem, int[] nbItemRow, int[] colPos, double[] real, double[] imag, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabSparse(null, row, col, nbItem, nbItemRow, colPos, real, imag));
+        } else {
+            handlers.get(handlerId).handle(new ScilabSparse(varName, row, col, nbItem, nbItemRow, colPos, real, imag));
+        }
+    }
+
+    /**
+     * Send boolean sparse matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param row the row number
+     * @param col the col number
+     * @param nbItem the number of true elements
+     * @param nbItemRow the number by row of true elements
+     * @param colPos the column position of the true elements
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, int row, int col, int nbItem, int[] nbItemRow, int[] colPos, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabBooleanSparse(null, row, col, nbItem, nbItemRow, colPos));
+        } else {
+            handlers.get(handlerId).handle(new ScilabBooleanSparse(varName, row, col, nbItem, nbItemRow, colPos));
+        }
+    }
+
+    /**
+     * Send double polynomial matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param polyVarName the polynomial variable name
+     * @param data the data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendPolynomial(String varName, int[] indexes, String polyVarName, double[][][] data, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabPolynomial(null, polyVarName, data, null, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabPolynomial(varName, polyVarName, data, null, swaped));
+        }
+    }
+
+    /**
+     * Send complex polynomial matrix
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param polyVarName the polynomial variable name
+     * @param real the real data
+     * @param imag the imaginary data
+     * @param swaped true if the matrix is stored row by row
+     * @param handlerId the handler id
+     */
+    public static final void sendPolynomial(String varName, int[] indexes, String polyVarName, double[][][] real, double[][][] img, boolean swaped, int handlerId) {
+        if (indexes.length != 0) {
+            addElement(indexes, new ScilabPolynomial(null, polyVarName, real, img, swaped));
+        } else {
+            handlers.get(handlerId).handle(new ScilabPolynomial(varName, polyVarName, real, img, swaped));
+        }
+    }
+
+    /**
+     * Send list, tlist and mlist
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param type a char which must take the values 'l' for list or 'm' for mlist or 't' for tlist
+     * @param handlerId the handler id
+     */
+    public static final void sendData(String varName, int[] indexes, char type, int handlerId) {
+        String name = null;
+        if (indexes.length == 0) {
+            name = varName;
+        }
+
+        ScilabType var = null;
+        switch (type) {
+        case 'l' :
+            var = new ScilabList(name);
+            break;
+        case 'm' :
+            var = new ScilabMList(name);
+            break;
+        case 't' :
+            var = new ScilabTList(name);
+            break;
+        }
+
+        if (indexes.length == 0) {
+            lists.put(Thread.currentThread(), (ArrayList<ScilabType>) var);
+        } else {
+            addElement(indexes, var);
+        }
+    }
+
+    /**
+     * Call when the list filling is finished
+     * @param varName the variable name
+     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
+     * @param handlerId the handler id
+     */
+    public static final void closeList(int[] indexes, int handlerId) {
+        Thread t = Thread.currentThread();
+        ArrayList<ScilabType> var = lists.get(t);
+        if (var != null && indexes.length == 0) {
+            handlers.get(handlerId).handle((ScilabType) var);
+            lists.remove(t);
+        }
+    }
+
+    /**
+     * Add an element to the list
+     * @param indexes the indexes where to put the variable
+     * @param var the variable to put
+     */
+    private static final void addElement(int[] indexes, ScilabType data) {
+        ArrayList<ScilabType> list = lists.get(Thread.currentThread());
+
+        for (int i = 0; i < indexes.length - 1; i++) {
+            list = (ArrayList<ScilabType>) list.get(indexes[i] - 1);
+        }
+
+        int n = indexes[indexes.length - 1] - 1;
+        if (n < list.size()) {
+            list.set(indexes[indexes.length - 1] - 1, data);
+        } else {
+            list.add(data);
+        }
+    }
+}
diff --git a/scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesEvent.java b/scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesEvent.java
new file mode 100644 (file)
index 0000000..802b550
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Scilab (http://www.scilab.org/) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.types;
+
+/**
+ * Event thrown when refresh has been done
+ */
+public class ScilabVariablesEvent {
+
+    private ScilabType var;
+
+    /**
+     * Constructor
+     * @param var the new refreshed variable
+     */
+    public ScilabVariablesEvent(ScilabType var) {
+        this.var = var;
+    }
+
+    /**
+     * @return the Scilab variable newly created
+     */
+    public ScilabType getScilabType() {
+        return var;
+    }
+}
diff --git a/scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesHandler.java b/scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesHandler.java
new file mode 100644 (file)
index 0000000..2b87172
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Scilab (http://www.scilab.org/) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.types;
+
+/**
+ * Interface to handle a Scilab variable coming from C/C++
+ */
+public interface ScilabVariablesHandler {
+
+    /**
+     * Handle a Scilab variable
+     * @param var the variable
+     */
+    public void handle(ScilabType var);
+}
diff --git a/scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesListener.java b/scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesListener.java
new file mode 100644 (file)
index 0000000..538543c
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Scilab (http://www.scilab.org/) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.types;
+
+import java.util.EventListener;
+import java.util.Set;
+
+/**
+ * The listener to listen to the refresh
+ */
+public interface ScilabVariablesListener extends EventListener {
+
+    /**
+     * Prevent the listener that a variable has been updated
+     * @param event the event
+     */
+    public void scilabVariableUpdated(ScilabVariablesEvent event);
+
+    /**
+     * Gets the listened variables
+     * @return the listened variables name
+     */
+    public Set<String> getListenedVariables();
+}
diff --git a/scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesRefresh.java b/scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesRefresh.java
new file mode 100644 (file)
index 0000000..e11565a
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Scilab (http://www.scilab.org/) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.types;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.swing.event.EventListenerList;
+
+/**
+ * Class to handle the refresh
+ */
+public final class ScilabVariablesRefresh implements ScilabVariablesHandler {
+
+    private static final EventListenerList eventListeners = new EventListenerList();
+    private static ScilabVariablesRefresh instance;
+    private static int id;
+
+    /**
+     * Constructor
+     */
+    private ScilabVariablesRefresh() { }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void handle(ScilabType var) {
+        Object[] listeners = eventListeners.getListenerList();
+        ScilabVariablesEvent event = null;
+        for (int i = listeners.length - 2; i >= 0; i -= 2) {
+            if (listeners[i] == ScilabVariablesListener.class && ((ScilabVariablesListener) listeners[i + 1]).getListenedVariables().contains(var.getVarName())) {
+                if (event == null) {
+                    event = new ScilabVariablesEvent(var);
+                }
+                ((ScilabVariablesListener) listeners[i + 1]).scilabVariableUpdated(event);
+            }
+        }
+    }
+
+    /**
+     * Get the id to use to send data from C/C++ to this Java handler
+     * @return the handler id
+     */
+    public static final int getScilabVariablesRefreshId() {
+        if (instance == null) {
+            instance = new ScilabVariablesRefresh();
+            id = ScilabVariables.addScilabVariablesHandler(instance);
+        }
+
+        return id;
+    }
+
+    /**
+     * Get all the listened variables from the different listeners
+     * This function is used from C++ to retrieve exactly what is needed and should not be used from Java.
+     * @return all the listened variables
+     */
+    public static final String[] getAllListenedVariables() {
+        Object[] listeners = eventListeners.getListenerList();
+        Set<String> set = new HashSet<String>();
+        for (int i = listeners.length - 2; i >= 0; i -= 2) {
+            if (listeners[i] == ScilabVariablesListener.class) {
+                set.addAll(((ScilabVariablesListener) listeners[i + 1]).getListenedVariables());
+            }
+        }
+        String[] arr = new String[set.size() + 1];
+        arr = set.toArray(arr);
+        arr[set.size()] = null;
+
+        return arr;
+    }
+
+    /**
+     * Add a new ScilabVariablesListener
+     * @param listener the listener to add
+     */
+    public static final void addScilabVariablesListener(ScilabVariablesListener listener) {
+        eventListeners.add(ScilabVariablesListener.class, listener);
+    }
+
+    /**
+     * Remove a ScilabVariablesListener
+     * @param listener the listener to remove
+     */
+    public static final void removeScilabVariablesListener(ScilabVariablesListener listener) {
+        eventListeners.remove(ScilabVariablesListener.class, listener);
+    }
+}
diff --git a/scilab/modules/types/src/jni/ScilabPolynomialToJava.cpp b/scilab/modules/types/src/jni/ScilabPolynomialToJava.cpp
new file mode 100644 (file)
index 0000000..2a78783
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "ScilabPolynomialToJava.hxx"
+
+namespace org_modules_types
+{
+
+    jobjectArray ScilabPolynomialToJava::getJavaArrayFromPolynom(JNIEnv * curEnv, double *** data, int rows, int cols, int ** nbCoeff)
+    {
+        jobjectArray data_ = curEnv->NewObjectArray(rows, curEnv->FindClass("[[D"), 0);
+        if (!data_)
+        {
+            return 0;
+        }
+
+        for (int i = 0; i < rows; i++)
+        {
+            jobjectArray data1_ = curEnv->NewObjectArray(cols, curEnv->FindClass("[D"), 0);
+            if (!data1_)
+            {
+                curEnv->DeleteLocalRef(data_);
+                return 0;
+            }
+            curEnv->SetObjectArrayElement(data_, i, data1_);
+            for (int j = 0; j < cols; j++)
+            {
+                jdoubleArray dataLocal = curEnv->NewDoubleArray(nbCoeff[i][j]);
+                if (!dataLocal)
+                {
+                    curEnv->DeleteLocalRef(data_);
+                    for (int k = 0; k <= i; k++)
+                    {
+                        curEnv->DeleteLocalRef(curEnv->GetObjectArrayElement(data_, k));
+                    }
+                    return 0;
+                }
+                curEnv->SetDoubleArrayRegion(dataLocal, 0, nbCoeff[i][j], (jdouble*)(data[i][j]) );
+                curEnv->SetObjectArrayElement(data1_, j, dataLocal);
+                curEnv->DeleteLocalRef(dataLocal);
+            }
+        }
+
+        return data_;
+    }
+
+    void ScilabPolynomialToJava::sendPolynomial(JavaVM * jvm_, char * varName, int * indexes, int indexesSize, char * polyVarName, double *** data, int rows, int cols, int ** nbCoeff, bool swaped, int handlerId)
+    {
+        JNIEnv * curEnv = 0;
+        jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), 0);
+        jclass cls = curEnv->FindClass(ScilabVariables::className().c_str());
+
+        jmethodID methodId = curEnv->GetStaticMethodID(cls, "sendPolynomial", "(Ljava/lang/String;[ILjava/lang/String;[[[DZI)V" ) ;
+        if (!methodId)
+        {
+            curEnv->DeleteLocalRef(cls);
+            throw GiwsException::JniMethodNotFoundException(curEnv, "sendPolynomial");
+        }
+
+        jstring varName_ = curEnv->NewStringUTF(varName);
+        if (varName && !varName_)
+        {
+            curEnv->DeleteLocalRef(cls);
+            throw GiwsException::JniBadAllocException(curEnv);
+        }
+
+        jintArray indexes_ = curEnv->NewIntArray(indexesSize) ;
+
+        if (!indexes_)
+        {
+            curEnv->DeleteLocalRef(varName_);
+            curEnv->DeleteLocalRef(cls);
+            throw GiwsException::JniBadAllocException(curEnv);
+        }
+
+        curEnv->SetIntArrayRegion(indexes_, 0, indexesSize, (jint*)(indexes));
+
+        jstring polyVarName_ = curEnv->NewStringUTF(polyVarName);
+        if (polyVarName && !polyVarName_)
+        {
+            curEnv->DeleteLocalRef(varName_);
+            curEnv->DeleteLocalRef(indexes_);
+            curEnv->DeleteLocalRef(cls);
+            throw GiwsException::JniBadAllocException(curEnv);
+        }
+
+        jobjectArray data_ = getJavaArrayFromPolynom(curEnv, data, rows, cols, nbCoeff);
+        if (!data_)
+        {
+            curEnv->DeleteLocalRef(varName_);
+            curEnv->DeleteLocalRef(indexes_);
+            curEnv->DeleteLocalRef(polyVarName_);
+            curEnv->DeleteLocalRef(cls);
+            throw GiwsException::JniBadAllocException(curEnv);
+        }
+
+        jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+        curEnv->CallStaticVoidMethod(cls, methodId ,varName_, indexes_, polyVarName_, data_, swaped_, handlerId);
+        curEnv->DeleteLocalRef(varName_);
+        curEnv->DeleteLocalRef(indexes_);
+        curEnv->DeleteLocalRef(polyVarName_);
+        for (int i = 0; i < rows; i++)
+        {
+            curEnv->DeleteLocalRef(curEnv->GetObjectArrayElement(data_, i));
+        }
+        curEnv->DeleteLocalRef(data_);
+        curEnv->DeleteLocalRef(cls);
+        if (curEnv->ExceptionCheck())
+        {
+            throw GiwsException::JniCallMethodException(curEnv);
+        }
+    }
+
+    void ScilabPolynomialToJava::sendPolynomial(JavaVM * jvm_, char * varName, int * indexes, int indexesSize, char * polyVarName, double *** real, double *** img, int rows, int cols, int ** nbCoeff, bool swaped, int handlerId)
+    {
+        JNIEnv * curEnv = 0;
+        jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), 0);
+        jclass cls = curEnv->FindClass(ScilabVariables::className().c_str());
+
+        jmethodID methodId = curEnv->GetStaticMethodID(cls, "sendPolynomial", "(Ljava/lang/String;[ILjava/lang/String;[[[D[[[DZI)V" ) ;
+        if (!methodId)
+        {
+            curEnv->DeleteLocalRef(cls);
+            throw GiwsException::JniMethodNotFoundException(curEnv, "sendPolynomial");
+        }
+
+        jstring varName_ = curEnv->NewStringUTF(varName);
+        if (varName && !varName_)
+        {
+            curEnv->DeleteLocalRef(cls);
+            throw GiwsException::JniBadAllocException(curEnv);
+        }
+
+        jintArray indexes_ = curEnv->NewIntArray(indexesSize) ;
+
+        if (!indexes_)
+        {
+            curEnv->DeleteLocalRef(varName_);
+            curEnv->DeleteLocalRef(cls);
+            throw GiwsException::JniBadAllocException(curEnv);
+        }
+
+        curEnv->SetIntArrayRegion(indexes_, 0, indexesSize, (jint*)(indexes));
+
+        jstring polyVarName_ = curEnv->NewStringUTF(polyVarName);
+        if (polyVarName && !polyVarName_)
+        {
+            curEnv->DeleteLocalRef(varName_);
+            curEnv->DeleteLocalRef(indexes_);
+            curEnv->DeleteLocalRef(cls);
+            throw GiwsException::JniBadAllocException(curEnv);
+        }
+
+        jobjectArray real_ = getJavaArrayFromPolynom(curEnv, real, rows, cols, nbCoeff);
+        if (!real_)
+        {
+            curEnv->DeleteLocalRef(varName_);
+            curEnv->DeleteLocalRef(indexes_);
+            curEnv->DeleteLocalRef(polyVarName_);
+            curEnv->DeleteLocalRef(cls);
+            throw GiwsException::JniBadAllocException(curEnv);
+        }
+
+        jobjectArray img_ = getJavaArrayFromPolynom(curEnv, img, rows, cols, nbCoeff);
+        if (!img_)
+        {
+            curEnv->DeleteLocalRef(varName_);
+            curEnv->DeleteLocalRef(indexes_);
+            curEnv->DeleteLocalRef(polyVarName_);
+            curEnv->DeleteLocalRef(cls);
+            for (int i = 0; i < rows; i++)
+            {
+                curEnv->DeleteLocalRef(curEnv->GetObjectArrayElement(real_, i));
+            }
+            curEnv->DeleteLocalRef(real_);
+            throw GiwsException::JniBadAllocException(curEnv);
+        }
+
+        jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+        curEnv->CallStaticVoidMethod(cls, methodId ,varName_, indexes_, polyVarName_, real_, img_, swaped_, handlerId);
+        curEnv->DeleteLocalRef(varName_);
+        curEnv->DeleteLocalRef(indexes_);
+        curEnv->DeleteLocalRef(polyVarName_);
+        for (int i = 0; i < rows; i++)
+        {
+            curEnv->DeleteLocalRef(curEnv->GetObjectArrayElement(real_, i));
+            curEnv->DeleteLocalRef(curEnv->GetObjectArrayElement(img_, i));
+        }
+        curEnv->DeleteLocalRef(real_);
+        curEnv->DeleteLocalRef(img_);
+        curEnv->DeleteLocalRef(cls);
+        if (curEnv->ExceptionCheck())
+        {
+            throw GiwsException::JniCallMethodException(curEnv);
+        }
+    }
+}
diff --git a/scilab/modules/types/src/jni/ScilabPolynomialToJava.hxx b/scilab/modules/types/src/jni/ScilabPolynomialToJava.hxx
new file mode 100644 (file)
index 0000000..ca5fe6f
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __SCILABPOLYNOMIALTOJAVA_HXX__
+#define __SCILABPOLYNOMIALTOJAVA_HXX__
+
+#include "ScilabVariables.hxx"
+
+extern "C"
+{
+#include "getScilabJavaVM.h"
+}
+
+using namespace org_scilab_modules_types;
+
+namespace org_modules_types
+{
+
+    class ScilabPolynomialToJava
+    {
+
+        static jobjectArray getJavaArrayFromPolynom(JNIEnv * curEnv, double *** data, int rows, int cols, int ** nbCoeff);
+
+    public :
+
+        static void sendPolynomial(JavaVM * jvm_, char * varName, int * indexes, int indexesSize, char * polyVarName, double *** data, int rows, int cols, int ** nbCoeff, bool swaped, int handlerId);
+
+        static void sendPolynomial(JavaVM * jvm_, char * varName, int * indexes, int indexesSize, char * polyVarName, double *** real, double *** img, int rows, int cols, int ** nbCoef, bool swaped, int handlerId);
+    };
+}
+
+#endif
diff --git a/scilab/modules/types/src/jni/ScilabVariables.cpp b/scilab/modules/types/src/jni/ScilabVariables.cpp
new file mode 100644 (file)
index 0000000..bf78aa0
--- /dev/null
@@ -0,0 +1,1239 @@
+#include "ScilabVariables.hxx"
+/* Generated by GIWS (version 1.3.0) */
+/*
+
+Copyright 2007-2008 INRIA
+Copyright 2008-2011 DIGITEO
+
+Author : Sylvestre Ledru & others
+
+This is generated code.
+
+This software is a computer program whose purpose is to hide the complexity
+of accessing Java objects/methods from C++ code.
+
+This software is governed by the CeCILL-B license under French law and
+abiding by the rules of distribution of free software.  You can  use, 
+modify and/ or redistribute the software under the terms of the CeCILL-B
+license as circulated by CEA, CNRS and INRIA at the following URL
+"http://www.cecill.info". 
+
+As a counterpart to the access to the source code and  rights to copy,
+modify and redistribute granted by the license, users are provided only
+with a limited warranty  and the software's author,  the holder of the
+economic rights,  and the successive licensors  have only  limited
+liability. 
+
+In this respect, the user's attention is drawn to the risks associated
+with loading,  using,  modifying and/or developing or reproducing the
+software by the user in light of its specific status of free software,
+that may mean  that it is complicated to manipulate,  and  that  also
+therefore means  that it is reserved for developers  and  experienced
+professionals having in-depth computer knowledge. Users are therefore
+encouraged to load and test the software's suitability as regards their
+requirements in conditions enabling the security of their systems and/or 
+data to be ensured and,  more generally, to use and operate it in the 
+same conditions as regards security. 
+
+The fact that you are presently reading this means that you have had
+knowledge of the CeCILL-B license and that you accept its terms.
+*/
+
+namespace org_scilab_modules_types {
+
+// Returns the current env
+
+JNIEnv * ScilabVariables::getCurrentEnv() {
+JNIEnv * curEnv = NULL;
+jint res=this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+if (res != JNI_OK) {
+throw GiwsException::JniException(getCurrentEnv());
+}
+return curEnv;
+}
+// Destructor
+
+ScilabVariables::~ScilabVariables() {
+JNIEnv * curEnv = NULL;
+this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+
+curEnv->DeleteGlobalRef(this->instance);
+curEnv->DeleteGlobalRef(this->instanceClass);
+curEnv->DeleteGlobalRef(this->stringArrayClass);}
+// Constructors
+ScilabVariables::ScilabVariables(JavaVM * jvm_) {
+jmethodID constructObject = NULL ;
+jobject localInstance ;
+jclass localClass ;
+const std::string construct="<init>";
+const std::string param="()V";
+jvm=jvm_;
+
+JNIEnv * curEnv = getCurrentEnv();
+
+localClass = curEnv->FindClass( this->className().c_str() ) ;
+if (localClass == NULL) {
+  throw GiwsException::JniClassNotFoundException(curEnv, this->className());
+}
+
+this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
+
+/* localClass is not needed anymore */
+curEnv->DeleteLocalRef(localClass);
+
+if (this->instanceClass == NULL) {
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+}
+
+
+constructObject = curEnv->GetMethodID( this->instanceClass, construct.c_str() , param.c_str() ) ;
+if(constructObject == NULL){
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+}
+
+localInstance = curEnv->NewObject( this->instanceClass, constructObject ) ;
+if(localInstance == NULL){
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+}
+this->instance = curEnv->NewGlobalRef(localInstance) ;
+if(this->instance == NULL){
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+}
+/* localInstance not needed anymore */
+curEnv->DeleteLocalRef(localInstance);
+
+                /* Methods ID set to NULL */
+jobjectArray_getAllListenedVariablesID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__doublejbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__doublejobjectArray__doublejbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__bytejbooleanbooleanjintintID=NULL;
+voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__bytejbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__shortjbooleanbooleanjintintID=NULL;
+voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__shortjbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__intjbooleanbooleanjintintID=NULL;
+voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__intjbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__longjbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__booleanjbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__java_lang_StringjbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjcharcharjintintID=NULL;
+voidcloseListjintArray_intjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjdoubleArray_doublejintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjdoubleArray_doublejdoubleArray_doublejintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjintintID=NULL;
+
+
+}
+
+ScilabVariables::ScilabVariables(JavaVM * jvm_, jobject JObj) {
+        jvm=jvm_;
+
+        JNIEnv * curEnv = getCurrentEnv();
+
+jclass localClass = curEnv->GetObjectClass(JObj);
+        this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
+        curEnv->DeleteLocalRef(localClass);
+
+        if (this->instanceClass == NULL) {
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+        }
+
+        this->instance = curEnv->NewGlobalRef(JObj) ;
+        if(this->instance == NULL){
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+        }
+        /* Methods ID set to NULL */
+        jobjectArray_getAllListenedVariablesID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__doublejbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__doublejobjectArray__doublejbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__bytejbooleanbooleanjintintID=NULL;
+voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__bytejbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__shortjbooleanbooleanjintintID=NULL;
+voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__shortjbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__intjbooleanbooleanjintintID=NULL;
+voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__intjbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__longjbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__booleanjbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__java_lang_StringjbooleanbooleanjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjcharcharjintintID=NULL;
+voidcloseListjintArray_intjintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjdoubleArray_doublejintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjdoubleArray_doublejdoubleArray_doublejintintID=NULL;
+voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjintintID=NULL;
+
+
+}
+
+// Generic methods
+
+void ScilabVariables::synchronize() {
+if (getCurrentEnv()->MonitorEnter(instance) != JNI_OK) {
+throw GiwsException::JniMonitorException(getCurrentEnv(), "ScilabVariables");
+}
+}
+
+void ScilabVariables::endSynchronize() {
+if ( getCurrentEnv()->MonitorExit(instance) != JNI_OK) {
+throw GiwsException::JniMonitorException(getCurrentEnv(), "ScilabVariables");
+}
+}
+// Method(s)
+
+char ** ScilabVariables::getAllListenedVariables (JavaVM * jvm_){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID jobjectArray_getAllListenedVariablesID = curEnv->GetStaticMethodID(cls, "getAllListenedVariables", "()[Ljava/lang/String;" ) ;
+if (jobjectArray_getAllListenedVariablesID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "getAllListenedVariables");
+}
+
+                        jobjectArray res =  static_cast<jobjectArray>( curEnv->CallStaticObjectMethod(cls, jobjectArray_getAllListenedVariablesID ));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}int lenRow;
+ lenRow = curEnv->GetArrayLength(res);
+
+char **arrayOfString;
+arrayOfString = new char *[lenRow];
+for (jsize i = 0; i < lenRow; i++){
+jstring resString = reinterpret_cast<jstring>(curEnv->GetObjectArrayElement(res, i));
+const char *tempString = curEnv->GetStringUTFChars(resString, 0);
+arrayOfString[i] = new char[strlen(tempString) + 1];
+
+strcpy(arrayOfString[i], tempString);
+curEnv->ReleaseStringUTFChars(resString, tempString);
+curEnv->DeleteLocalRef(resString);
+}
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+delete[] arrayOfString;
+                                throw GiwsException::JniCallMethodException(curEnv);
+}
+curEnv->DeleteLocalRef(res);
+return arrayOfString;
+
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, double** data, int dataSize, int dataSizeCol, bool swaped, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__doublejbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[I[[DZI)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__doublejbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+ jobjectArray data_ = curEnv->NewObjectArray(dataSize, curEnv->FindClass("[D"),NULL);
+
+if (data_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+ for (int i=0; i<dataSize; i++){
+
+jdoubleArray dataLocal = curEnv->NewDoubleArray( dataSizeCol ) ;
+
+if (dataLocal == NULL)
+{
+// check that allocation succeed
+curEnv->DeleteLocalRef(data_);
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( dataLocal, 0, dataSizeCol, (jdouble*)(data[i]) ) ;
+curEnv->SetObjectArrayElement(data_, i, dataLocal);
+curEnv->DeleteLocalRef(dataLocal);
+}
+
+jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__doublejbooleanbooleanjintintID ,varName_, indexes_, data_, swaped_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(data_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, double** real, int realSize, int realSizeCol, double** img, int imgSize, int imgSizeCol, bool swaped, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__doublejobjectArray__doublejbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[I[[D[[DZI)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__doublejobjectArray__doublejbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+ jobjectArray real_ = curEnv->NewObjectArray(realSize, curEnv->FindClass("[D"),NULL);
+
+if (real_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+ for (int i=0; i<realSize; i++){
+
+jdoubleArray realLocal = curEnv->NewDoubleArray( realSizeCol ) ;
+
+if (realLocal == NULL)
+{
+// check that allocation succeed
+curEnv->DeleteLocalRef(real_);
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( realLocal, 0, realSizeCol, (jdouble*)(real[i]) ) ;
+curEnv->SetObjectArrayElement(real_, i, realLocal);
+curEnv->DeleteLocalRef(realLocal);
+}
+
+ jobjectArray img_ = curEnv->NewObjectArray(imgSize, curEnv->FindClass("[D"),NULL);
+
+if (img_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+ for (int i=0; i<imgSize; i++){
+
+jdoubleArray imgLocal = curEnv->NewDoubleArray( imgSizeCol ) ;
+
+if (imgLocal == NULL)
+{
+// check that allocation succeed
+curEnv->DeleteLocalRef(img_);
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( imgLocal, 0, imgSizeCol, (jdouble*)(img[i]) ) ;
+curEnv->SetObjectArrayElement(img_, i, imgLocal);
+curEnv->DeleteLocalRef(imgLocal);
+}
+
+jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__doublejobjectArray__doublejbooleanbooleanjintintID ,varName_, indexes_, real_, img_, swaped_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(real_);
+curEnv->DeleteLocalRef(img_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, byte** data, int dataSize, int dataSizeCol, bool swaped, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__bytejbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[I[[BZI)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__bytejbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+ jobjectArray data_ = curEnv->NewObjectArray(dataSize, curEnv->FindClass("[B"),NULL);
+
+if (data_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+ for (int i=0; i<dataSize; i++){
+
+jbyteArray dataLocal = curEnv->NewByteArray( dataSizeCol ) ;
+
+if (dataLocal == NULL)
+{
+// check that allocation succeed
+curEnv->DeleteLocalRef(data_);
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetByteArrayRegion( dataLocal, 0, dataSizeCol, (jbyte*)(data[i]) ) ;
+curEnv->SetObjectArrayElement(data_, i, dataLocal);
+curEnv->DeleteLocalRef(dataLocal);
+}
+
+jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__bytejbooleanbooleanjintintID ,varName_, indexes_, data_, swaped_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(data_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendUnsignedData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, byte** data, int dataSize, int dataSizeCol, bool swaped, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__bytejbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "sendUnsignedData", "(Ljava/lang/String;[I[[BZI)V" ) ;
+if (voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__bytejbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendUnsignedData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+ jobjectArray data_ = curEnv->NewObjectArray(dataSize, curEnv->FindClass("[B"),NULL);
+
+if (data_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+ for (int i=0; i<dataSize; i++){
+
+jbyteArray dataLocal = curEnv->NewByteArray( dataSizeCol ) ;
+
+if (dataLocal == NULL)
+{
+// check that allocation succeed
+curEnv->DeleteLocalRef(data_);
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetByteArrayRegion( dataLocal, 0, dataSizeCol, (jbyte*)(data[i]) ) ;
+curEnv->SetObjectArrayElement(data_, i, dataLocal);
+curEnv->DeleteLocalRef(dataLocal);
+}
+
+jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__bytejbooleanbooleanjintintID ,varName_, indexes_, data_, swaped_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(data_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, short** data, int dataSize, int dataSizeCol, bool swaped, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__shortjbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[I[[SZI)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__shortjbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+ jobjectArray data_ = curEnv->NewObjectArray(dataSize, curEnv->FindClass("[S"),NULL);
+
+if (data_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+ for (int i=0; i<dataSize; i++){
+
+jshortArray dataLocal = curEnv->NewShortArray( dataSizeCol ) ;
+
+if (dataLocal == NULL)
+{
+// check that allocation succeed
+curEnv->DeleteLocalRef(data_);
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetShortArrayRegion( dataLocal, 0, dataSizeCol, (jshort*)(data[i]) ) ;
+curEnv->SetObjectArrayElement(data_, i, dataLocal);
+curEnv->DeleteLocalRef(dataLocal);
+}
+
+jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__shortjbooleanbooleanjintintID ,varName_, indexes_, data_, swaped_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(data_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendUnsignedData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, short** data, int dataSize, int dataSizeCol, bool swaped, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__shortjbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "sendUnsignedData", "(Ljava/lang/String;[I[[SZI)V" ) ;
+if (voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__shortjbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendUnsignedData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+ jobjectArray data_ = curEnv->NewObjectArray(dataSize, curEnv->FindClass("[S"),NULL);
+
+if (data_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+ for (int i=0; i<dataSize; i++){
+
+jshortArray dataLocal = curEnv->NewShortArray( dataSizeCol ) ;
+
+if (dataLocal == NULL)
+{
+// check that allocation succeed
+curEnv->DeleteLocalRef(data_);
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetShortArrayRegion( dataLocal, 0, dataSizeCol, (jshort*)(data[i]) ) ;
+curEnv->SetObjectArrayElement(data_, i, dataLocal);
+curEnv->DeleteLocalRef(dataLocal);
+}
+
+jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__shortjbooleanbooleanjintintID ,varName_, indexes_, data_, swaped_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(data_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, int** data, int dataSize, int dataSizeCol, bool swaped, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__intjbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[I[[IZI)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__intjbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+ jobjectArray data_ = curEnv->NewObjectArray(dataSize, curEnv->FindClass("[I"),NULL);
+
+if (data_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+ for (int i=0; i<dataSize; i++){
+
+jintArray dataLocal = curEnv->NewIntArray( dataSizeCol ) ;
+
+if (dataLocal == NULL)
+{
+// check that allocation succeed
+curEnv->DeleteLocalRef(data_);
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( dataLocal, 0, dataSizeCol, (jint*)(data[i]) ) ;
+curEnv->SetObjectArrayElement(data_, i, dataLocal);
+curEnv->DeleteLocalRef(dataLocal);
+}
+
+jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__intjbooleanbooleanjintintID ,varName_, indexes_, data_, swaped_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(data_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendUnsignedData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, int** data, int dataSize, int dataSizeCol, bool swaped, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__intjbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "sendUnsignedData", "(Ljava/lang/String;[I[[IZI)V" ) ;
+if (voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__intjbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendUnsignedData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+ jobjectArray data_ = curEnv->NewObjectArray(dataSize, curEnv->FindClass("[I"),NULL);
+
+if (data_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+ for (int i=0; i<dataSize; i++){
+
+jintArray dataLocal = curEnv->NewIntArray( dataSizeCol ) ;
+
+if (dataLocal == NULL)
+{
+// check that allocation succeed
+curEnv->DeleteLocalRef(data_);
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( dataLocal, 0, dataSizeCol, (jint*)(data[i]) ) ;
+curEnv->SetObjectArrayElement(data_, i, dataLocal);
+curEnv->DeleteLocalRef(dataLocal);
+}
+
+jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendUnsignedDatajstringjava_lang_StringjintArray_intjobjectArray__intjbooleanbooleanjintintID ,varName_, indexes_, data_, swaped_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(data_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, long long** data, int dataSize, int dataSizeCol, bool swaped, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__longjbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[I[[JZI)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__longjbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+ jobjectArray data_ = curEnv->NewObjectArray(dataSize, curEnv->FindClass("[J"),NULL);
+
+if (data_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+ for (int i=0; i<dataSize; i++){
+
+jlongArray dataLocal = curEnv->NewLongArray( dataSizeCol ) ;
+
+if (dataLocal == NULL)
+{
+// check that allocation succeed
+curEnv->DeleteLocalRef(data_);
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetLongArrayRegion( dataLocal, 0, dataSizeCol, (jlong*)(data[i]) ) ;
+curEnv->SetObjectArrayElement(data_, i, dataLocal);
+curEnv->DeleteLocalRef(dataLocal);
+}
+
+jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__longjbooleanbooleanjintintID ,varName_, indexes_, data_, swaped_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(data_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, bool** data, int dataSize, int dataSizeCol, bool swaped, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__booleanjbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[I[[ZZI)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__booleanjbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+jobjectArray data_ = curEnv->NewObjectArray(dataSize, curEnv->FindClass("[Z"),NULL);
+for (int i=0; i<dataSize; i++){
+                        jbooleanArray dataLocal = curEnv->NewBooleanArray( dataSizeCol ) ;
+                        curEnv->SetBooleanArrayRegion( dataLocal, 0, dataSizeCol, (jboolean*)(data[i]) ) ;
+                        curEnv->SetObjectArrayElement(data_, i, dataLocal);
+                        curEnv->DeleteLocalRef(dataLocal);
+                        }
+
+jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__booleanjbooleanbooleanjintintID ,varName_, indexes_, data_, swaped_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(data_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, char *** data, int dataSize, int dataSizeCol, bool swaped, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__java_lang_StringjbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[I[[Ljava/lang/String;ZI)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__java_lang_StringjbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+jclass stringArrayClass = curEnv->FindClass("java/lang/String");
+// create java array of array of strings.
+jobjectArray data_ = curEnv->NewObjectArray( dataSize, curEnv->FindClass("[Ljava/lang/String;"), NULL);
+if (data_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+for ( int i = 0; i < dataSize; i++)
+{
+jobjectArray dataLocal = curEnv->NewObjectArray( dataSizeCol, stringArrayClass, NULL);
+// convert each char * to java strings and fill the java array.
+for ( int j = 0; j < dataSizeCol; j++) {
+jstring TempString = curEnv->NewStringUTF( data[i][j] );
+
+if (TempString == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetObjectArrayElement( dataLocal, j, TempString);
+
+// avoid keeping reference on to many strings
+curEnv->DeleteLocalRef(TempString);
+}
+curEnv->SetObjectArrayElement(data_, i, dataLocal);
+curEnv->DeleteLocalRef(dataLocal);
+
+}
+jboolean swaped_ = (static_cast<bool>(swaped) ? JNI_TRUE : JNI_FALSE);
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjobjectArray__java_lang_StringjbooleanbooleanjintintID ,varName_, indexes_, data_, swaped_, handlerId);
+                        curEnv->DeleteLocalRef(stringArrayClass);
+curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(data_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, unsigned short type, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjcharcharjintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[ICI)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjcharcharjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjcharcharjintintID ,varName_, indexes_, type, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::closeList (JavaVM * jvm_, int* indexes, int indexesSize, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidcloseListjintArray_intjintintID = curEnv->GetStaticMethodID(cls, "closeList", "([II)V" ) ;
+if (voidcloseListjintArray_intjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "closeList");
+}
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+                         curEnv->CallStaticVoidMethod(cls, voidcloseListjintArray_intjintintID ,indexes_, handlerId);
+                        curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, int row, int col, int nbItem, int* nbItemRow, int nbItemRowSize, int* colPos, int colPosSize, double* data, int dataSize, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjdoubleArray_doublejintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[IIII[I[I[DI)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjdoubleArray_doublejintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+jintArray nbItemRow_ = curEnv->NewIntArray( nbItemRowSize ) ;
+
+if (nbItemRow_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( nbItemRow_, 0, nbItemRowSize, (jint*)(nbItemRow) ) ;
+
+
+jintArray colPos_ = curEnv->NewIntArray( colPosSize ) ;
+
+if (colPos_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( colPos_, 0, colPosSize, (jint*)(colPos) ) ;
+
+
+jdoubleArray data_ = curEnv->NewDoubleArray( dataSize ) ;
+
+if (data_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( data_, 0, dataSize, (jdouble*)(data) ) ;
+
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjdoubleArray_doublejintintID ,varName_, indexes_, row, col, nbItem, nbItemRow_, colPos_, data_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(nbItemRow_);
+curEnv->DeleteLocalRef(colPos_);
+curEnv->DeleteLocalRef(data_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, int row, int col, int nbItem, int* nbItemRow, int nbItemRowSize, int* colPos, int colPosSize, double* real, int realSize, double* imag, int imagSize, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjdoubleArray_doublejdoubleArray_doublejintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[IIII[I[I[D[DI)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjdoubleArray_doublejdoubleArray_doublejintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+jintArray nbItemRow_ = curEnv->NewIntArray( nbItemRowSize ) ;
+
+if (nbItemRow_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( nbItemRow_, 0, nbItemRowSize, (jint*)(nbItemRow) ) ;
+
+
+jintArray colPos_ = curEnv->NewIntArray( colPosSize ) ;
+
+if (colPos_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( colPos_, 0, colPosSize, (jint*)(colPos) ) ;
+
+
+jdoubleArray real_ = curEnv->NewDoubleArray( realSize ) ;
+
+if (real_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( real_, 0, realSize, (jdouble*)(real) ) ;
+
+
+jdoubleArray imag_ = curEnv->NewDoubleArray( imagSize ) ;
+
+if (imag_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( imag_, 0, imagSize, (jdouble*)(imag) ) ;
+
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjdoubleArray_doublejdoubleArray_doublejintintID ,varName_, indexes_, row, col, nbItem, nbItemRow_, colPos_, real_, imag_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(nbItemRow_);
+curEnv->DeleteLocalRef(colPos_);
+curEnv->DeleteLocalRef(real_);
+curEnv->DeleteLocalRef(imag_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void ScilabVariables::sendData (JavaVM * jvm_, char * varName, int* indexes, int indexesSize, int row, int col, int nbItem, int* nbItemRow, int nbItemRowSize, int* colPos, int colPosSize, int handlerId){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjintintID = curEnv->GetStaticMethodID(cls, "sendData", "(Ljava/lang/String;[IIII[I[II)V" ) ;
+if (voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "sendData");
+}
+
+jstring varName_ = curEnv->NewStringUTF( varName );
+if (varName != NULL && varName_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jintArray indexes_ = curEnv->NewIntArray( indexesSize ) ;
+
+if (indexes_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( indexes_, 0, indexesSize, (jint*)(indexes) ) ;
+
+
+jintArray nbItemRow_ = curEnv->NewIntArray( nbItemRowSize ) ;
+
+if (nbItemRow_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( nbItemRow_, 0, nbItemRowSize, (jint*)(nbItemRow) ) ;
+
+
+jintArray colPos_ = curEnv->NewIntArray( colPosSize ) ;
+
+if (colPos_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( colPos_, 0, colPosSize, (jint*)(colPos) ) ;
+
+
+                         curEnv->CallStaticVoidMethod(cls, voidsendDatajstringjava_lang_StringjintArray_intjintintjintintjintintjintArray_intjintArray_intjintintID ,varName_, indexes_, row, col, nbItem, nbItemRow_, colPos_, handlerId);
+                        curEnv->DeleteLocalRef(varName_);
+curEnv->DeleteLocalRef(indexes_);
+curEnv->DeleteLocalRef(nbItemRow_);
+curEnv->DeleteLocalRef(colPos_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+}
diff --git a/scilab/modules/types/src/jni/ScilabVariables.giws.xml b/scilab/modules/types/src/jni/ScilabVariables.giws.xml
new file mode 100644 (file)
index 0000000..aacc553
--- /dev/null
@@ -0,0 +1,164 @@
+<package name="org.scilab.modules.types">
+
+  <object name="ScilabVariables">
+    <method name="getAllListenedVariables" returnType="String[]" modifier="static" />
+
+    <!-- double matrix-->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="double[][]" name="data"/>
+      <param type="boolean" name="swaped"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- complex matrix-->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="double[][]" name="real"/>
+      <param type="double[][]" name="img"/>
+      <param type="boolean" name="swaped"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- int8 matrix-->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="byte[][]" name="data"/>
+      <param type="boolean" name="swaped"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- uint8 matrix-->
+    <method name="sendUnsignedData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="byte[][]" name="data"/>
+      <param type="boolean" name="swaped"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- int16 matrix-->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="short[][]" name="data"/>
+      <param type="boolean" name="swaped"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- uint16 matrix-->
+    <method name="sendUnsignedData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="short[][]" name="data"/>
+      <param type="boolean" name="swaped"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- int32 matrix-->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="int[][]" name="data"/>
+      <param type="boolean" name="swaped"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- uint32 matrix-->
+    <method name="sendUnsignedData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="int[][]" name="data"/>
+      <param type="boolean" name="swaped"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- int64, uint64 matrix-->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="long[][]" name="data"/>
+      <param type="boolean" name="swaped"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- boolean matrix-->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="boolean[][]" name="data"/>
+      <param type="boolean" name="swaped"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- String matrix-->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="String[][]" name="data"/>
+      <param type="boolean" name="swaped"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- Lists -->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="char" name="type" />
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <method name="closeList" returnType="void" modifier="static">
+      <param type="int[]" name="indexes" />
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- Sparse matrix-->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="int" name="row"/>
+      <param type="int" name="col"/>
+      <param type="int" name="nbItem"/>
+      <param type="int[]" name="nbItemRow"/>
+      <param type="int[]" name="colPos"/>
+      <param type="double[]" name="data"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- Complex sparse matrix-->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="int" name="row"/>
+      <param type="int" name="col"/>
+      <param type="int" name="nbItem"/>
+      <param type="int[]" name="nbItemRow"/>
+      <param type="int[]" name="colPos"/>
+      <param type="double[]" name="real"/>
+      <param type="double[]" name="imag"/>
+      <param type="int" name="handlerId"/>
+    </method>
+
+    <!-- Boolean sparse matrix-->
+    <method name="sendData" returnType="void" modifier="static">
+      <param type="String" name="varName" />
+      <param type="int[]" name="indexes" />
+      <param type="int" name="row"/>
+      <param type="int" name="col"/>
+      <param type="int" name="nbItem"/>
+      <param type="int[]" name="nbItemRow"/>
+      <param type="int[]" name="colPos"/>
+      <param type="int" name="handlerId"/>
+    </method>
+  </object>
+
+  <object name="ScilabVariablesRefresh">
+    <method name="getAllListenedVariables" returnType="String[]" modifier="static" />
+    <method name="getScilabVariablesRefreshId" returnType="int" modifier="static" />
+  </object>
+
+</package>
\ No newline at end of file
diff --git a/scilab/modules/types/src/jni/ScilabVariables.hxx b/scilab/modules/types/src/jni/ScilabVariables.hxx
new file mode 100644 (file)
index 0000000..30a5378
--- /dev/null
@@ -0,0 +1,203 @@
+/* Generated by GIWS (version 1.3.0) */
+/*
+
+Copyright 2007-2008 INRIA
+Copyright 2008-2011 DIGITEO
+
+Author : Sylvestre Ledru & others
+
+This is generated code.
+
+This software is a computer program whose purpose is to hide the complexity
+of accessing Java objects/methods from C++ code.
+
+This software is governed by the CeCILL-B license under French law and
+abiding by the rules of distribution of free software.  You can  use, 
+modify and/ or redistribute the software under the terms of the CeCILL-B
+license as circulated by CEA, CNRS and INRIA at the following URL
+"http://www.cecill.info". 
+
+As a counterpart to the access to the source code and  rights to copy,
+modify and redistribute granted by the license, users are provided only
+with a limited warranty  and the software's author,  the holder of the
+economic rights,  and the successive licensors  have only  limited
+liability. 
+
+In this respect, the user's attention is drawn to the risks associated
+with loading,  using,  modifying and/or developing or reproducing the
+software&nb