Xcos MVC: use var2vec and vec2var to encode and decode 'opar' and 'odstate' fields 33/15933/13
Paul Bignier [Tue, 10 Feb 2015 15:40:42 +0000 (16:40 +0100)]
 * Moved var2vec and vec2var code to Scicos sources
   In the process, they now take an std::vector<double>, to reduce copies
 * Fixed vec2var for complex data
 * Fixed their default values to match var2vec's empty list

Change-Id: I714210ad87e27bcddf045bb3ff0bb5ff4d08a93d

21 files changed:
scilab/modules/scicos/Makefile.am
scilab/modules/scicos/Makefile.in
scilab/modules/scicos/sci_gateway/cpp/sci_var2vec.cpp
scilab/modules/scicos/sci_gateway/cpp/sci_vec2var.cpp
scilab/modules/scicos/src/c/scicos.vcxproj
scilab/modules/scicos/src/c/scicos.vcxproj.filters
scilab/modules/scicos/src/cpp/Model_getObjectProperties.cpp
scilab/modules/scicos/src/cpp/Model_setObjectProperties.cpp
scilab/modules/scicos/src/cpp/model/Block.hxx
scilab/modules/scicos/src/cpp/var2vec.cpp [new file with mode: 0644]
scilab/modules/scicos/src/cpp/var2vec.hxx [new file with mode: 0644]
scilab/modules/scicos/src/cpp/vec2var.cpp [new file with mode: 0644]
scilab/modules/scicos/src/cpp/vec2var.hxx [new file with mode: 0644]
scilab/modules/scicos/src/cpp/view_scilab/ModelAdapter.cpp
scilab/modules/scicos/tests/unit_tests/model/Block.dia.ref
scilab/modules/scicos/tests/unit_tests/model/Consecutive_init.dia.ref
scilab/modules/scicos/tests/unit_tests/model/Deep_cloning.dia.ref
scilab/modules/scicos/tests/unit_tests/model/Delete_objects.dia.ref
scilab/modules/scicos/tests/unit_tests/model/Diagram.dia.ref
scilab/modules/scicos/tests/unit_tests/model/SuperBlock.dia.ref
scilab/modules/scicos/tests/unit_tests/model/SuperBlock_in_SuperBlock.dia.ref

index 081ef82..7d1481d 100644 (file)
@@ -16,6 +16,8 @@ DISABLE_HELP_CLEAN=yes
 SCICOS_CXX_SOURCES = \
 src/cpp/il_state.cpp \
 src/cpp/il_sim.cpp \
+src/cpp/var2vec.cpp \
+src/cpp/vec2var.cpp \
 src/cpp/Controller.cpp \
 src/cpp/LoggerView.cpp \
 src/cpp/Model.cpp \
index 508e49e..458ec0f 100644 (file)
@@ -203,7 +203,8 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libsciscicos_algo_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
 am__libsciscicos_algo_la_SOURCES_DIST = src/c/noscicos/noscicos.c \
-       src/cpp/il_state.cpp src/cpp/il_sim.cpp src/cpp/Controller.cpp \
+       src/cpp/il_state.cpp src/cpp/il_sim.cpp src/cpp/var2vec.cpp \
+       src/cpp/vec2var.cpp src/cpp/Controller.cpp \
        src/cpp/LoggerView.cpp src/cpp/Model.cpp \
        src/cpp/Model_getObjectProperties.cpp \
        src/cpp/Model_setObjectProperties.cpp \
@@ -235,6 +236,8 @@ am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_1 = src/c/noscicos/libsciscicos_algo_la-noscicos.lo
 am__objects_2 = src/cpp/libsciscicos_algo_la-il_state.lo \
        src/cpp/libsciscicos_algo_la-il_sim.lo \
+       src/cpp/libsciscicos_algo_la-var2vec.lo \
+       src/cpp/libsciscicos_algo_la-vec2var.lo \
        src/cpp/libsciscicos_algo_la-Controller.lo \
        src/cpp/libsciscicos_algo_la-LoggerView.lo \
        src/cpp/libsciscicos_algo_la-Model.lo \
@@ -941,6 +944,8 @@ DISABLE_HELP_CLEAN = yes
 SCICOS_CXX_SOURCES = \
 src/cpp/il_state.cpp \
 src/cpp/il_sim.cpp \
+src/cpp/var2vec.cpp \
+src/cpp/vec2var.cpp \
 src/cpp/Controller.cpp \
 src/cpp/LoggerView.cpp \
 src/cpp/Model.cpp \
@@ -1463,6 +1468,10 @@ src/cpp/libsciscicos_algo_la-il_state.lo: src/cpp/$(am__dirstamp) \
        src/cpp/$(DEPDIR)/$(am__dirstamp)
 src/cpp/libsciscicos_algo_la-il_sim.lo: src/cpp/$(am__dirstamp) \
        src/cpp/$(DEPDIR)/$(am__dirstamp)
+src/cpp/libsciscicos_algo_la-var2vec.lo: src/cpp/$(am__dirstamp) \
+       src/cpp/$(DEPDIR)/$(am__dirstamp)
+src/cpp/libsciscicos_algo_la-vec2var.lo: src/cpp/$(am__dirstamp) \
+       src/cpp/$(DEPDIR)/$(am__dirstamp)
 src/cpp/libsciscicos_algo_la-Controller.lo: src/cpp/$(am__dirstamp) \
        src/cpp/$(DEPDIR)/$(am__dirstamp)
 src/cpp/libsciscicos_algo_la-LoggerView.lo: src/cpp/$(am__dirstamp) \
@@ -2152,6 +2161,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/$(DEPDIR)/libsciscicos_algo_la-Model_setObjectProperties.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/$(DEPDIR)/libsciscicos_algo_la-il_sim.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/$(DEPDIR)/libsciscicos_algo_la-il_state.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/$(DEPDIR)/libsciscicos_algo_la-var2vec.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/$(DEPDIR)/libsciscicos_algo_la-vec2var.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/view_scilab/$(DEPDIR)/libsciscicos_algo_la-Adapters.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/view_scilab/$(DEPDIR)/libsciscicos_algo_la-BlockAdapter.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/view_scilab/$(DEPDIR)/libsciscicos_algo_la-CprAdapter.Plo@am__quote@
@@ -2841,6 +2852,20 @@ src/cpp/libsciscicos_algo_la-il_sim.lo: src/cpp/il_sim.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciscicos_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/libsciscicos_algo_la-il_sim.lo `test -f 'src/cpp/il_sim.cpp' || echo '$(srcdir)/'`src/cpp/il_sim.cpp
 
+src/cpp/libsciscicos_algo_la-var2vec.lo: src/cpp/var2vec.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciscicos_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/libsciscicos_algo_la-var2vec.lo -MD -MP -MF src/cpp/$(DEPDIR)/libsciscicos_algo_la-var2vec.Tpo -c -o src/cpp/libsciscicos_algo_la-var2vec.lo `test -f 'src/cpp/var2vec.cpp' || echo '$(srcdir)/'`src/cpp/var2vec.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/$(DEPDIR)/libsciscicos_algo_la-var2vec.Tpo src/cpp/$(DEPDIR)/libsciscicos_algo_la-var2vec.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/var2vec.cpp' object='src/cpp/libsciscicos_algo_la-var2vec.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciscicos_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/libsciscicos_algo_la-var2vec.lo `test -f 'src/cpp/var2vec.cpp' || echo '$(srcdir)/'`src/cpp/var2vec.cpp
+
+src/cpp/libsciscicos_algo_la-vec2var.lo: src/cpp/vec2var.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciscicos_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/libsciscicos_algo_la-vec2var.lo -MD -MP -MF src/cpp/$(DEPDIR)/libsciscicos_algo_la-vec2var.Tpo -c -o src/cpp/libsciscicos_algo_la-vec2var.lo `test -f 'src/cpp/vec2var.cpp' || echo '$(srcdir)/'`src/cpp/vec2var.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/$(DEPDIR)/libsciscicos_algo_la-vec2var.Tpo src/cpp/$(DEPDIR)/libsciscicos_algo_la-vec2var.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/vec2var.cpp' object='src/cpp/libsciscicos_algo_la-vec2var.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciscicos_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/libsciscicos_algo_la-vec2var.lo `test -f 'src/cpp/vec2var.cpp' || echo '$(srcdir)/'`src/cpp/vec2var.cpp
+
 src/cpp/libsciscicos_algo_la-Controller.lo: src/cpp/Controller.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciscicos_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/libsciscicos_algo_la-Controller.lo -MD -MP -MF src/cpp/$(DEPDIR)/libsciscicos_algo_la-Controller.Tpo -c -o src/cpp/libsciscicos_algo_la-Controller.lo `test -f 'src/cpp/Controller.cpp' || echo '$(srcdir)/'`src/cpp/Controller.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/$(DEPDIR)/libsciscicos_algo_la-Controller.Tpo src/cpp/$(DEPDIR)/libsciscicos_algo_la-Controller.Plo
index 80133bd..252fa95 100644 (file)
 *
 */
 
+#include <vector>
 #include <string>
 #include <cwchar>
 #include <cstring>
 
 #include "gw_scicos.hxx"
 
+#include "var2vec.hxx"
+
 #include "types.hxx"
 #include "function.hxx"
 #include "internal.hxx"
 #include "double.hxx"
-#include "int.hxx"
-#include "bool.hxx"
-#include "string.hxx"
-#include "list.hxx"
-#include "tlist.hxx"
-#include "mlist.hxx"
 
 extern "C"
 {
@@ -33,260 +30,31 @@ extern "C"
 #include "localization.h"
 }
 
-static void computeDims(types::GenericType* input, int &iDims, int* &pDims, int &iElements, int &totalSize)
-{
-    iDims = input->getDims();
-    pDims = input->getDimsArray();
-    iElements = 1;
-    for (int i = 0; i < iDims; ++i)
-    {
-        iElements *= pDims[i];
-    }
-
-    // Type + number of dimensions + dimensions
-    totalSize = 2 + iDims;
-}
-
-/**
- * Calculate the length increment depending on the type of the Scilab types
- *
- * @param V Scilab type
- * @param T Scilab type
- * @param v the instance on the Scilab type
- * @return the number of V elements used to store the data
- */
-template<typename V, typename T>
-size_t required_length(const V* /*it*/, T* v)
-{
-    const size_t sizeof_ret_value = sizeof(typename V::type);
-    if (sizeof(typename T::type) >= sizeof_ret_value)
-    {
-        return v->getSize() * sizeof(typename T::type) / sizeof_ret_value;
-    }
-    else
-    {
-        // Increase the size to contain enough space, manage the size_t rounding issue
-        return (v->getSize() * sizeof(typename T::type) + (sizeof_ret_value - 1)) / sizeof_ret_value;
-    }
-}
-
-template <typename T>
-void encode(T* input, types::Double* &ret)
-{
-    int iDims, iElements, totalSize;
-    int* pDims;
-    computeDims(input, iDims, pDims, iElements, totalSize);
-
-    int nDoubleNeeded = required_length(ret, input);
-    totalSize += nDoubleNeeded;
-
-    // Allocation for type + number of dimensions + each dimension + each element
-    ret = new types::Double(totalSize, 1);
-
-    ret->set(0, ((types::InternalType*) input)->getType());
-    ret->set(1, iDims);
-    for (int i = 0; i < iDims; ++i)
-    {
-        ret->set(2 + i, pDims[i]);
-    }
-
-    // Using contiguity of the memory, we save the input into 'ret'
-    // Use a buffer to fill the entirety of 'ret'
-    double* buffer = new double[nDoubleNeeded];
-    memcpy(buffer, input->get(), iElements * sizeof(typename T::type));
-    memcpy(ret->get() + 2 + iDims, buffer, nDoubleNeeded * sizeof(double));
-    delete[] buffer;
-}
-
-static void encode(types::Double* input, types::Double* &ret)
-{
-    int iDims, iElements, totalSize;
-    int* pDims;
-    computeDims(input, iDims, pDims, iElements, totalSize);
-
-    int isComplex = (input->isComplex()) ? 1 : 0;
-    totalSize++; // Add the complex boolean
-    totalSize += (isComplex) ? 2 * iElements : iElements; // Size of the required data buffer
-
-    // Allocation for type + number of dimensions + each dimension + complex boolean + each element (doubled if complex)
-    ret = new types::Double(totalSize, 1);
-
-    ret->set(0, types::InternalType::ScilabDouble);
-    ret->set(1, iDims);
-    for (int i = 0; i < iDims; ++i)
-    {
-        ret->set(2 + i, pDims[i]);
-    }
-    ret->set(2 + iDims, isComplex);
-
-    memcpy(ret->get() + 2 + iDims + 1, input->getReal(), iElements * sizeof(double));
-    if (isComplex == true)
-    {
-        memcpy(ret->get() + 2 + iDims + 1 + iElements, input->getImg(), iElements * sizeof(double));
-    }
-    // An empty matrix input will return [12; 2; 0; 0; 0]
-}
-
-static void encode(types::String* input, types::Double* &ret)
-{
-    int iDims, iElements, totalSize;
-    int* pDims;
-    computeDims(input, iDims, pDims, iElements, totalSize);
-
-    totalSize += iElements;
-
-    // Reserve space for the string offsets and contents
-    char** utf8 = new char*[iElements];
-    size_t* pLengths = new size_t[iElements];
-    int* offsets = new int[iElements];
-    int offset_cur = 0, offset_acc = 0;
-    for (int i = 0; i < iElements; ++i)
-    {
-        char* str = wide_string_to_UTF8(input->get(i));
-        utf8[i] = str;
-        // Adding the '\0' byte to the length
-        const size_t len = strlen(str) + 1;
-        pLengths[i] = len;
-
-        offset_cur = (len * sizeof(char) + sizeof(double) - 1) / sizeof(double);
-        totalSize += offset_cur;
-        offset_acc += offset_cur;
-        offsets[i] = offset_acc;
-    }
-
-    // Allocation for type + number of dimensions + each dimension + each element length + each element
-    ret = new types::Double(totalSize, 1);
-
-    ret->set(0, types::InternalType::ScilabString);
-    ret->set(1, iDims);
-    for (int i = 0; i < iDims; ++i)
-    {
-        ret->set(2 + i, pDims[i]);
-    }
-
-    size_t len = pLengths[0];
-    ret->set(2 + iDims, offsets[0]);
-    memcpy(ret->get() + 2 + iDims + iElements, *utf8, len * sizeof(char));
-    for (int i = 1; i < iElements; ++i)
-    {
-        len = pLengths[i];
-        ret->set(2 + iDims + i, offsets[i]);
-        memcpy(ret->get() + 2 + iDims + iElements + offsets[i - 1], *(utf8 + i), len * sizeof(char));
-    }
-
-    // Free all the strings, after being copied
-    for (int i = 0; i < iElements; ++i)
-    {
-        FREE(utf8[i]);
-    }
-    delete[] utf8;
-    delete[] offsets;
-    delete[] pLengths;
-}
-
-template<typename T>
-void encodeList(T* input, types::Double* &ret)
-{
-    int iElements = input->getSize();
-    int totalSize = 2;
-
-    std::vector<types::typed_list> listElements (iElements);
-    for (int i = 0; i < iElements; ++i)
-    {
-        // Recursively call sci_var2vec on each element and extract the obtained results
-        types::typed_list tempIn (1, input->get(i));
-        sci_var2vec(tempIn, 1, listElements[i]);
-
-        types::Double* listElement = listElements[i][0]->getAs<types::Double>();
-        totalSize += listElement->getRows();
-    }
-    // Allocation for type + list length + each list element
-    ret = new types::Double(totalSize, 1);
-
-    ret->set(0, input->getType());
-    ret->set(1, iElements);
-    int offset = 0;
-    for (int i = 0; i < iElements; ++i)
-    {
-        types::Double* listElement = listElements[i][0]->getAs<types::Double>();
-        memcpy(ret->get() + 2 + offset, listElement->get(), listElement->getRows() * sizeof(double));
-        offset += listElement->getRows();
-    }
-    // An empty list input will return [22; 0]
-}
-
-static const std::string funname = "var2vec";
+static const std::string var2vecName = "var2vec";
 
 types::Function::ReturnValue sci_var2vec(types::typed_list &in, int _iRetCount, types::typed_list &out)
 {
     if (in.size() != 1)
     {
-        Scierror(999, _("%s: Wrong number of input arguments: %d expected.\n"), funname.c_str(), 1);
+        Scierror(999, _("%s: Wrong number of input arguments: %d expected.\n"), var2vecName.c_str(), 1);
         return types::Function::Error;
     }
 
     if (_iRetCount != 1)
     {
-        Scierror(999, _("%s: Wrong number of output arguments: %d expected.\n"), funname.c_str(), 1);
+        Scierror(999, _("%s: Wrong number of output arguments: %d expected.\n"), var2vecName.c_str(), 1);
         return types::Function::Error;
     }
 
     // Declare the returned column vector
-    types::Double* ret;
-
-    switch (in[0]->getType())
+    std::vector<double> retData;
+    if (!var2vec(in[0], retData))
     {
-            // Reuse scicos model encoding for 'model.opar' and 'model.odstate' fields
-        case types::InternalType::ScilabDouble :
-            encode(in[0]->getAs<types::Double>(), ret);
-            break;
-
-        case types::InternalType::ScilabInt8   :
-            encode(in[0]->getAs<types::Int8>(), ret);
-            break;
-        case types::InternalType::ScilabUInt8  :
-            encode(in[0]->getAs<types::UInt8>(), ret);
-            break;
-        case types::InternalType::ScilabInt16  :
-            encode(in[0]->getAs<types::Int16>(), ret);
-            break;
-        case types::InternalType::ScilabUInt16 :
-            encode(in[0]->getAs<types::UInt16>(), ret);
-            break;
-        case types::InternalType::ScilabInt32  :
-            encode(in[0]->getAs<types::Int32>(), ret);
-            break;
-        case types::InternalType::ScilabUInt32 :
-            encode(in[0]->getAs<types::UInt32>(), ret);
-            break;
-        case types::InternalType::ScilabInt64  :
-            encode(in[0]->getAs<types::Int64>(), ret);
-            break;
-        case types::InternalType::ScilabUInt64 :
-            encode(in[0]->getAs<types::UInt64>(), ret);
-            break;
-        case types::InternalType::ScilabBool   :
-            encode(in[0]->getAs<types::Bool>(), ret);
-            break;
-
-        case types::InternalType::ScilabString :
-            encode(in[0]->getAs<types::String>(), ret);
-            break;
-
-        case types::InternalType::ScilabList   :
-            encodeList(in[0]->getAs<types::List>(), ret);
-            break;
-        case types::InternalType::ScilabTList  :
-            encodeList(in[0]->getAs<types::TList>(), ret);
-            break;
-        case types::InternalType::ScilabMList  :
-            encodeList(in[0]->getAs<types::MList>(), ret);
-            break;
-
-        default :
-            Scierror(999, _("%s: Wrong type for input argument #%d: %s, %s, %s, %s or %s type.\n"), funname.c_str(), 1, "Double", "Integer", "Boolean", "String", "List");
-            return types::Function::Error;
+        return types::Function::Error;
     }
+    // TODO: avoid retDdata copy by adding a move constructor from std::vector<double> to types::Double*
+    types::Double* ret = new types::Double(static_cast<int>(retData.size()), 1);
+    memcpy(ret->get(), &retData[0], retData.size() * sizeof(double));
 
     out.push_back(ret);
     return types::Function::OK;
index 5d7c66c..01d6ec2 100644 (file)
 *
 */
 
+#include <vector>
 #include <string>
 #include <cwchar>
 #include <cstring>
 
 #include "gw_scicos.hxx"
 
+#include "vec2var.hxx"
+
 #include "types.hxx"
 #include "function.hxx"
 #include "internal.hxx"
 #include "double.hxx"
-#include "int.hxx"
-#include "bool.hxx"
-#include "string.hxx"
-#include "list.hxx"
-#include "tlist.hxx"
-#include "mlist.hxx"
 
 extern "C"
 {
@@ -33,435 +30,43 @@ extern "C"
 #include "localization.h"
 }
 
-static const std::string funname = "vec2var";
-
-/**
- * Calculate the length increment depending on the type of the Scilab type
- *
- * @param T Scilab type
- * @param v the instance on the Scilab type
- * @return the number of double used to store the data
- */
-template<typename T>
-size_t required_length(T* v)
-{
-    const size_t sizeof_double = sizeof(double);
-    if (sizeof(typename T::type) >= sizeof_double)
-    {
-        return v->getSize() * sizeof(typename T::type) / sizeof_double;
-    }
-    else
-    {
-        // Increase the size to contain enough space, manage the size_t rounding issue
-        return (v->getSize() * sizeof(typename T::type) + (sizeof_double - 1)) / sizeof_double;
-    }
-}
-
-static void Error(const int index)
-{
-    Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), funname.c_str(), 1, index, 1);
-}
-
-template<typename T>
-int encode(const double* const tab, const int tabSize, const int iDims, const int offset, T* &res)
-{
-    int  iElements = 1;
-    int* pDims = new int[iDims];
-    for (int i = 0; i < iDims; ++i)
-    {
-        pDims[i] = tab[i];
-        iElements *= pDims[i];
-    }
-
-    res = new T(iDims, pDims);
-    delete[] pDims;
-
-    int numberOfDoubleNeeded = required_length(res);
-    if (tabSize < numberOfDoubleNeeded + 2 + iDims)
-    {
-        // Error case: the input doesn't have enough elements
-        Error(numberOfDoubleNeeded + 2 + iDims + offset);
-        res->killMe();
-        return -1;
-    }
-
-    //Use a buffer to prevent copying only parts of integers
-    double* buffer = new double[numberOfDoubleNeeded];
-    memcpy(buffer, tab + iDims, numberOfDoubleNeeded * sizeof(double));
-    memcpy(res->get(), buffer, iElements * sizeof(typename T::type));
-    delete[] buffer;
-
-    return 2 + iDims + numberOfDoubleNeeded;
-}
-
-template<>
-int encode(const double* const tab, const int tabSize, const int iDims, const int offset, types::Double* &res)
-{
-    int  iElements = 1;
-    int* pDims = new int[iDims];
-    for (int i = 0; i < iDims; ++i)
-    {
-        pDims[i] = tab[i];
-        iElements *= pDims[i];
-    }
-    if (tabSize < iElements + 3 + iDims)
-    {
-        // Error case: the input doesn't have enough elements
-        Error(iElements + 3 + iDims + offset);
-        return -1;
-    }
-    if (iElements == 0)
-    {
-        res = types::Double::Empty();
-        delete[] pDims;
-        return 5;
-    }
-    bool isComplex = (tab[iDims] == 1);
-
-    res = new types::Double(iDims, pDims, isComplex);
-    delete[] pDims;
-
-    res->set(tab + iDims + 1);
-    if (isComplex == true)
-    {
-        res->setImg(tab + iDims + 1 + iElements);
-    }
-
-    return 2 + iDims + 1 + iElements;
-}
-
-template<>
-int encode(const double* const tab, const int tabSize, const int iDims, const int offset, types::String* &res)
-{
-    int  iElements = 1;
-    int* pDims = new int[iDims];
-    for (int i = 0; i < iDims; ++i)
-    {
-        pDims[i] = tab[i];
-        iElements *= pDims[i];
-    }
-    if (tabSize < iElements * 2 + 2 + iDims)
-    {
-        // Error case: the input doesn't have enough elements
-        Error(iElements * 2 + 2 + iDims + offset);
-        return -1;
-    }
-
-    res = new types::String(iDims, pDims);
-    delete[] pDims;
-
-    // Retrieving the first value pointer
-    double* strData = const_cast<double*>(tab + iDims + iElements);
-
-    res->set(0, (char*) & (*strData));
-    strData += static_cast<size_t>(tab[iDims]);
-    int stringOffset = static_cast<size_t>(tab[iDims]);
-    for (int i = 1; i < iElements; i++)
-    {
-        res->set(i, (char*) & (*strData));
-
-        // Increment the value pointer by the number of elements
-        const size_t numberOfElem = static_cast<size_t>(tab[iDims + i]) - static_cast<size_t>(tab[iDims + i - 1]);
-        strData += numberOfElem;
-        stringOffset += static_cast<int>(numberOfElem);
-    }
-
-    return 2 + iDims + iElements + stringOffset;
-}
-
-static bool readElement(const double* const input, int iType, int iDims, int inputRows, int &offset, types::InternalType* &res)
-{
-    switch (iType)
-    {
-        case types::InternalType::ScilabDouble :
-        {
-            if (inputRows < 5)
-            {
-                Error(offset + 5);
-                return false;
-            }
-
-            types::Double* pDouble = nullptr;
-            int resSize = encode<types::Double>(input + 2, inputRows, iDims, offset, pDouble);
-            if (resSize < 0)
-            {
-                return false;
-            }
-            res = pDouble;
-            offset += resSize;
-            break;
-        }
-
-        case types::InternalType::ScilabInt8   :
-        {
-            if (inputRows < 4)
-            {
-                Error(offset + 4);
-                return false;
-            }
-
-            types::Int8* pInt8 = nullptr;
-            int resSize = encode<types::Int8>(input + 2, inputRows, iDims, offset, pInt8);
-            if (resSize < 0)
-            {
-                return false;
-            }
-            res = pInt8;
-            offset += resSize;
-            break;
-        }
-        case types::InternalType::ScilabUInt8  :
-        {
-            if (inputRows < 4)
-            {
-                Error(offset + 4);
-                return false;
-            }
-
-            types::UInt8* pUInt8 = nullptr;
-            int resSize = encode<types::UInt8>(input + 2, inputRows, iDims, offset, pUInt8);
-            if (resSize < 0)
-            {
-                return false;
-            }
-            res = pUInt8;
-            offset += resSize;
-            break;
-        }
-        case types::InternalType::ScilabInt16  :
-        {
-            if (inputRows < 4)
-            {
-                Error(offset + 4);
-                return false;
-            }
-
-            types::Int16* pInt16 = nullptr;
-            int resSize = encode<types::Int16>(input + 2, inputRows, iDims, offset, pInt16);
-            if (resSize < 0)
-            {
-                return false;
-            }
-            res = pInt16;
-            offset += resSize;
-            break;
-        }
-        case types::InternalType::ScilabUInt16 :
-        {
-            if (inputRows < 4)
-            {
-                Error(offset + 4);
-                return false;
-            }
-
-            types::UInt16* pUInt16 = nullptr;
-            int resSize = encode<types::UInt16>(input + 2, inputRows, iDims, offset, pUInt16);
-            if (resSize < 0)
-            {
-                return false;
-            }
-            res = pUInt16;
-            offset += resSize;
-            break;
-        }
-        case types::InternalType::ScilabInt32  :
-        {
-            if (inputRows < 4)
-            {
-                Error(offset + 4);
-                return false;
-            }
-
-            types::Int32* pInt32 = nullptr;
-            int resSize = encode<types::Int32>(input + 2, inputRows, iDims, offset, pInt32);
-            if (resSize < 0)
-            {
-                return false;
-            }
-            res = pInt32;
-            offset += resSize;
-            break;
-        }
-        case types::InternalType::ScilabUInt32 :
-        {
-            if (inputRows < 4)
-            {
-                Error(offset + 4);
-                return false;
-            }
-
-            types::UInt32* pUInt32 = nullptr;
-            int resSize = encode<types::UInt32>(input + 2, inputRows, iDims, offset, pUInt32);
-            if (resSize < 0)
-            {
-                return false;
-            }
-            res = pUInt32;
-            offset += resSize;
-            break;
-        }
-        case types::InternalType::ScilabInt64  :
-        {
-            if (inputRows < 4)
-            {
-                Error(offset + 4);
-                return false;
-            }
-
-            types::Int64* pInt64 = nullptr;
-            int resSize = encode<types::Int64>(input + 2, inputRows, iDims, offset, pInt64);
-            if (resSize < 0)
-            {
-                return false;
-            }
-            res = pInt64;
-            offset += resSize;
-            break;
-        }
-        case types::InternalType::ScilabUInt64 :
-        {
-            if (inputRows < 4)
-            {
-                Error(offset + 4);
-                return false;
-            }
-
-            types::UInt64* pUInt64 = nullptr;
-            int resSize = encode<types::UInt64>(input + 2, inputRows, iDims, offset, pUInt64);
-            if (resSize < 0)
-            {
-                return false;
-            }
-            res = pUInt64;
-            offset += resSize;
-            break;
-        }
-        case types::InternalType::ScilabBool   :
-        {
-            if (inputRows < 4)
-            {
-                Error(offset + 4);
-                return false;
-            }
-
-            types::Bool* pBool = nullptr;
-            int resSize = encode<types::Bool>(input + 2, inputRows, iDims, offset, pBool);
-            if (resSize < 0)
-            {
-                return false;
-            }
-            res = pBool;
-            offset += resSize;
-            break;
-        }
-
-        case types::InternalType::ScilabString :
-        {
-            if (inputRows < 4)
-            {
-                Error(offset + 4);
-                return false;
-            }
-
-            types::String* pString = nullptr;
-            int resSize = encode<types::String>(input + 2, inputRows, iDims, offset, pString);
-            if (resSize < 0)
-            {
-                return false;
-            }
-            res = pString;
-            offset += resSize;
-            break;
-        }
-
-        case types::InternalType::ScilabList   :
-        case types::InternalType::ScilabTList  :
-        case types::InternalType::ScilabMList  :
-        {
-            if (inputRows < 2)
-            {
-                Error(offset + 2);
-                return false;
-            }
-
-            types::List* pList = nullptr;
-            if (iType == types::InternalType::ScilabList)
-            {
-                pList = new types::List();
-            }
-            else if (iType == types::InternalType::ScilabTList)
-            {
-                pList = new types::TList();
-            }
-            else
-            {
-                pList = new types::MList();
-            }
-
-            offset += 2;
-            for (int i = 0; i < iDims; ++i)
-            {
-                // Extract the list elements infos and recursively call readElement
-                int elementType = *(input + offset);
-                int elementDims = *(input + offset + 1);
-                types::InternalType* element;
-                if (!readElement(input + offset, elementType, elementDims, inputRows - offset, offset, element))
-                {
-                    return false;
-                }
-                pList->append(element);
-            }
-            res = pList;
-            break;
-        }
-
-        default :
-            Scierror(999, _("%s: Wrong value for element #%d of input argument #%d: Unknown type.\n"), funname.c_str(), offset + 1, 1);
-            return false;
-    }
-
-    return true;
-}
+static const std::string vec2varName = "vec2var";
 
 types::Function::ReturnValue sci_vec2var(types::typed_list &in, int _iRetCount, types::typed_list &out)
 {
     if (in.size() != 1)
     {
-        Scierror(999, _("%s: Wrong number of input arguments: %d expected.\n"), funname.c_str(), 1);
+        Scierror(999, _("%s: Wrong number of input arguments: %d expected.\n"), vec2varName.c_str(), 1);
         return types::Function::Error;
     }
 
     if (_iRetCount != 1)
     {
-        Scierror(999, _("%s: Wrong number of output arguments: %d expected.\n"), funname.c_str(), 1);
+        Scierror(999, _("%s: Wrong number of output arguments: %d expected.\n"), vec2varName.c_str(), 1);
         return types::Function::Error;
     }
 
     if (!in[0]->isDouble())
     {
-        Scierror(999, _("%s: Wrong type for input argument #%d: A real row vector expected.\n"), funname.c_str(), 1);
+        Scierror(999, _("%s: Wrong type for input argument #%d: A real row vector expected.\n"), vec2varName.c_str(), 1);
         return types::Function::Error;
     }
     types::Double* input = in[0]->getAs<types::Double>();
 
     if (input->getCols() != 1)
     {
-        Scierror(999, _("%s: Wrong size for input argument #%d: A row vector expected.\n"), funname.c_str(), 1);
+        Scierror(999, _("%s: Wrong size for input argument #%d: A row vector expected.\n"), vec2varName.c_str(), 1);
         return types::Function::Error;
     }
     if (input->getRows() < 2)
     {
-        Error(2);
+        Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, 2, 1);
         return types::Function::Error;
     }
 
-    int iType = input->get(0);
-    int iDims = input->get(1);
-    int inputRows = input->getRows();
-
+    std::vector<double> inputVec (input->get(), input->get() + input->getRows());
     types::InternalType* res;
-    int offset = 0;
-    if (!readElement(input->get(), iType, iDims, inputRows, offset, res))
+    if (!vec2var(inputVec, res))
     {
         return types::Function::Error;
     }
index d03f08b..4c0c1fa 100644 (file)
@@ -263,6 +263,8 @@ lib /DEF:"$(ProjectDir)differential_equations_f_Import.def" /SUBSYSTEM:WINDOWS /
     <ClCompile Include="..\..\sci_gateway\cpp\sci_validvar.cpp" />
     <ClCompile Include="..\..\sci_gateway\cpp\sci_var2vec.cpp" />
     <ClCompile Include="..\..\sci_gateway\cpp\sci_vec2var.cpp" />
+    <ClCompile Include="..\cpp\var2vec.cpp" />
+    <ClCompile Include="..\cpp\vec2var.cpp" />
     <ClCompile Include="..\cpp\Controller.cpp" />
     <ClCompile Include="..\cpp\il_sim.cpp" />
     <ClCompile Include="..\cpp\il_state.cpp" />
@@ -332,6 +334,8 @@ lib /DEF:"$(ProjectDir)differential_equations_f_Import.def" /SUBSYSTEM:WINDOWS /
     <ClInclude Include="..\..\includes\View.hxx" />
     <ClInclude Include="..\cpp\il_sim.hxx" />
     <ClInclude Include="..\cpp\il_state.hxx" />
+    <ClInclude Include="..\cpp\var2vec.hxx" />
+    <ClInclude Include="..\cpp\vec2var.hxx" />
     <ClInclude Include="..\cpp\LoggerView.hxx" />
     <ClInclude Include="..\cpp\model\Annotation.hxx" />
     <ClInclude Include="..\cpp\model\Block.hxx" />
index 06ee28b..0867684 100644 (file)
     <ClCompile Include="scilab5_needed_stubs.c">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\cpp\var2vec.cpp">
+      <Filter>Source Files\MVC</Filter>
+    </ClCompile>
+    <ClCompile Include="..\cpp\vec2var.cpp">
+      <Filter>Source Files\MVC</Filter>
+    </ClCompile>
     <ClCompile Include="..\cpp\Controller.cpp">
       <Filter>Source Files\MVC</Filter>
     </ClCompile>
     <ClInclude Include="sciblk4.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\cpp\var2vec.hxx">
+      <Filter>Header Files\MVC</Filter>
+    </ClInclude>
+    <ClInclude Include="..\cpp\vec2var.hxx">
+      <Filter>Header Files\MVC</Filter>
+    </ClInclude>
     <ClInclude Include="..\cpp\LoggerView.hxx">
       <Filter>Header Files\MVC</Filter>
     </ClInclude>
index 87b58ad..b6ee011 100644 (file)
@@ -394,9 +394,15 @@ bool Model::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std
             case DSTATE:
                 o->getDState(v);
                 return true;
+            case ODSTATE:
+                o->getODState(v);
+                return true;
             case RPAR:
                 o->getRpar(v);
                 return true;
+            case OPAR:
+                o->getOpar(v);
+                return true;
             default:
                 break;
         }
@@ -459,9 +465,6 @@ bool Model::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std
             case SIM_DEP_UT:
                 o->getSimDepUT(v);
                 return true;
-            case ODSTATE:
-                o->getODState(v);
-                return true;
             case NZCROSS:
                 o->getNZcross(v);
                 return true;
@@ -471,9 +474,6 @@ bool Model::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std
             case IPAR:
                 o->getIpar(v);
                 return true;
-            case OPAR:
-                o->getOpar(v);
-                return true;
             default:
                 break;
         }
index 204bd6b..bf02353 100644 (file)
@@ -357,8 +357,12 @@ update_status_t Model::setObjectProperty(ScicosID uid, kind_t k, object_properti
                 return o->setState(v);
             case DSTATE:
                 return o->setDState(v);
+            case ODSTATE:
+                return o->setODState(v);
             case RPAR:
                 return o->setRpar(v);
+            case OPAR:
+                return o->setOpar(v);
             default:
                 break;
         }
@@ -416,16 +420,12 @@ update_status_t Model::setObjectProperty(ScicosID uid, kind_t k, object_properti
         {
             case SIM_DEP_UT:
                 return o->setSimDepUT(v);
-            case ODSTATE:
-                return o->setODState(v);
             case NZCROSS:
                 return o->setNZcross(v);
             case NMODE:
                 return o->setNMode(v);
             case IPAR:
                 return o->setIpar(v);
-            case OPAR:
-                return o->setOpar(v);
             default:
                 break;
         }
index d069897..2e4366a 100644 (file)
@@ -28,20 +28,28 @@ struct Parameter
 {
     std::vector<double> rpar;
     std::vector<int> ipar;
-    std::vector<int> opar;
+    std::vector<double> opar;
 
-    // opar default value is an empty list
-    Parameter() : rpar(), ipar(), opar(1, 0) {}
+    // opar default value is an empty list encoded by var2vec()
+    Parameter() : rpar(), ipar(), opar(2)
+    {
+        opar[0] = 22;
+        opar[1] = 0;
+    }
 };
 
 struct State
 {
     std::vector<double> state;
     std::vector<double> dstate;
-    std::vector<int> odstate;
+    std::vector<double> odstate;
 
-    // odstate default value is an empty list
-    State() : state(), dstate(), odstate(1, 0) {}
+    // odstate default value is an empty list encoded by var2vec()
+    State() : state(), dstate(), odstate(2)
+    {
+        odstate[0] = 22;
+        odstate[1] = 0;
+    }
 };
 
 /**
@@ -472,12 +480,12 @@ private:
         return SUCCESS;
     }
 
-    void getOpar(std::vector<int>& data) const
+    void getOpar(std::vector<double>& data) const
     {
         data = m_parameter.opar;
     }
 
-    update_status_t setOpar(const std::vector<int>& data)
+    update_status_t setOpar(const std::vector<double>& data)
     {
         if (data == m_parameter.opar)
         {
@@ -643,12 +651,12 @@ private:
         return SUCCESS;
     }
 
-    void getODState(std::vector<int>& data) const
+    void getODState(std::vector<double>& data) const
     {
         data = m_state.odstate;
     }
 
-    update_status_t setODState(const std::vector<int>& data)
+    update_status_t setODState(const std::vector<double>& data)
     {
         if (data == m_state.odstate)
         {
diff --git a/scilab/modules/scicos/src/cpp/var2vec.cpp b/scilab/modules/scicos/src/cpp/var2vec.cpp
new file mode 100644 (file)
index 0000000..24e7674
--- /dev/null
@@ -0,0 +1,269 @@
+/*
+*  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+*  Copyright (C) 2015 - Scilab Enterprises - Paul Bignier
+*
+*  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 <vector>
+#include <string>
+#include <cwchar>
+#include <cstring>
+
+#include "var2vec.hxx"
+
+#include "types.hxx"
+#include "internal.hxx"
+#include "double.hxx"
+#include "int.hxx"
+#include "bool.hxx"
+#include "string.hxx"
+#include "list.hxx"
+#include "tlist.hxx"
+#include "mlist.hxx"
+
+extern "C"
+{
+#include "Scierror.h"
+#include "localization.h"
+}
+
+static const std::string var2vecName = "var2vec";
+
+static void computeDims(types::GenericType* input, int &iDims, int* &pDims, int &iElements, int &totalSize)
+{
+    iDims = input->getDims();
+    pDims = input->getDimsArray();
+    iElements = 1;
+    for (int i = 0; i < iDims; ++i)
+    {
+        iElements *= pDims[i];
+    }
+
+    // Type + number of dimensions + dimensions
+    totalSize = 2 + iDims;
+}
+
+/**
+ * Calculate the length increment depending on the ::value_type of 'V' and the type of the Scilab type 'T'
+ *
+ * @param V variable that must have a 'value_type' field
+ * @param T Scilab type
+ * @param v the instance of the Scilab type
+ * @return the number of V elements used to store the data
+ */
+template<typename V, typename T>
+size_t required_length(const V /*it*/, T* v)
+{
+    const size_t sizeof_ret_value = sizeof(typename V::value_type);
+    if (sizeof(typename T::type) >= sizeof_ret_value)
+    {
+        return v->getSize() * sizeof(typename T::type) / sizeof_ret_value;
+    }
+    else
+    {
+        // Increase the size to contain enough space, manage the size_t rounding issue
+        return (v->getSize() * sizeof(typename T::type) + (sizeof_ret_value - 1)) / sizeof_ret_value;
+    }
+}
+
+template <typename T>
+void encode(T* input, std::vector<double> &ret)
+{
+    int iDims, iElements, totalSize;
+    int* pDims;
+    computeDims(input, iDims, pDims, iElements, totalSize);
+
+    const int nDoubleNeeded = required_length(ret, input);
+    totalSize += nDoubleNeeded;
+
+    // Allocation for type + number of dimensions + each dimension + each element
+    ret.resize(totalSize);
+
+    ret[0] = ((types::InternalType*) input)->getType();
+    ret[1] = iDims;
+    for (int i = 0; i < iDims; ++i)
+    {
+        ret[2 + i] = pDims[i];
+    }
+
+    // Using contiguity of the memory, we save the input into 'ret'
+    // Use a buffer to fill the entirety of 'ret'
+    memcpy(&ret[2 + iDims], input->get(), iElements * sizeof(typename T::type));
+}
+
+static void encode(types::Double* input, std::vector<double> &ret)
+{
+    int iDims, iElements, totalSize;
+    int* pDims;
+    computeDims(input, iDims, pDims, iElements, totalSize);
+
+    const int isComplex = (input->isComplex()) ? 1 : 0;
+    totalSize++; // Add the complex boolean
+    totalSize += (isComplex + 1) * iElements; // Size of the required data buffer
+
+    // Allocation for type + number of dimensions + each dimension + complex boolean + each element (doubled if complex)
+    ret.resize(totalSize);
+
+    ret[0] = types::InternalType::ScilabDouble;
+    ret[1] = iDims;
+    for (int i = 0; i < iDims; ++i)
+    {
+        ret[2 + i] = pDims[i];
+    }
+    ret[2 + iDims] = isComplex;
+
+    memcpy(&ret[2 + iDims + 1], input->getReal(), iElements * sizeof(double));
+    if (isComplex == 1)
+    {
+        memcpy(&ret[ + 2 + iDims + 1 + iElements], input->getImg(), iElements * sizeof(double));
+    }
+    // An empty matrix input will return [12; 2; 0; 0; 0]
+}
+
+static void encode(types::String* input, std::vector<double> &ret)
+{
+    int iDims, iElements, totalSize;
+    int* pDims;
+    computeDims(input, iDims, pDims, iElements, totalSize);
+
+    totalSize += iElements;
+
+    // Reserve space for the string offsets and contents
+    char** utf8 = new char*[iElements];
+    size_t* pLengths = new size_t[iElements];
+    int* offsets = new int[iElements];
+    int offset_cur = 0, offset_acc = 0;
+    for (int i = 0; i < iElements; ++i)
+    {
+        char* str = wide_string_to_UTF8(input->get(i));
+        utf8[i] = str;
+        // Adding the '\0' byte to the length
+        const size_t len = strlen(str) + 1;
+        pLengths[i] = len;
+
+        offset_cur = (len * sizeof(char) + sizeof(double) - 1) / sizeof(double);
+        totalSize += offset_cur;
+        offset_acc += offset_cur;
+        offsets[i] = offset_acc;
+    }
+
+    // Allocation for type + number of dimensions + each dimension + each element length + each element
+    ret.resize(totalSize);
+
+    ret[0] = types::InternalType::ScilabString;
+    ret[1] = iDims;
+    for (int i = 0; i < iDims; ++i)
+    {
+        ret[2 + i] = pDims[i];
+    }
+
+    size_t len = pLengths[0];
+    ret[2 + iDims] = offsets[0];
+    memcpy(&ret[2 + iDims + iElements], *utf8, len * sizeof(char));
+    for (int i = 1; i < iElements; ++i)
+    {
+        len = pLengths[i];
+        ret[2 + iDims + i] = offsets[i];
+        memcpy(&ret[2 + iDims + iElements + offsets[i - 1]], *(utf8 + i), len * sizeof(char));
+    }
+
+    // Free all the strings, after being copied
+    for (int i = 0; i < iElements; ++i)
+    {
+        FREE(utf8[i]);
+    }
+    delete[] utf8;
+    delete[] offsets;
+    delete[] pLengths;
+}
+
+static void encode(types::List* input, std::vector<double> &ret)
+{
+    const int iElements = input->getSize();
+    int totalSize = 2;
+
+    std::vector<std::vector<double>> listElements (iElements);
+    for (int i = 0; i < iElements; ++i)
+    {
+        // Recursively call var2vec on each element and extract the obtained results
+        var2vec(input->get(i), listElements[i]);
+        totalSize += static_cast<int>(listElements[i].size());
+    }
+    // Allocation for type + list length + each list element
+    ret.resize(totalSize);
+
+    ret[0] = input->getType();
+    ret[1] = iElements;
+    int offset = 0;
+    for (int i = 0; i < iElements; ++i)
+    {
+        memcpy(&ret[2 + offset], &listElements[i][0], listElements[i].size() * sizeof(double));
+        offset += listElements[i].size();
+    }
+    // An empty list input will return [22; 0], a tlist [23; 0] and an mlist [24; 0]
+}
+
+bool var2vec(types::InternalType* in, std::vector<double> &out)
+{
+    switch (in->getType())
+    {
+            // Reuse scicos model encoding for 'model.opar' and 'model.odstate' fields
+        case types::InternalType::ScilabDouble :
+            encode(in->getAs<types::Double>(), out);
+            break;
+
+        case types::InternalType::ScilabInt8   :
+            encode(in->getAs<types::Int8>(), out);
+            break;
+        case types::InternalType::ScilabUInt8  :
+            encode(in->getAs<types::UInt8>(), out);
+            break;
+        case types::InternalType::ScilabInt16  :
+            encode(in->getAs<types::Int16>(), out);
+            break;
+        case types::InternalType::ScilabUInt16 :
+            encode(in->getAs<types::UInt16>(), out);
+            break;
+        case types::InternalType::ScilabInt32  :
+            encode(in->getAs<types::Int32>(), out);
+            break;
+        case types::InternalType::ScilabUInt32 :
+            encode(in->getAs<types::UInt32>(), out);
+            break;
+        case types::InternalType::ScilabInt64  :
+            encode(in->getAs<types::Int64>(), out);
+            break;
+        case types::InternalType::ScilabUInt64 :
+            encode(in->getAs<types::UInt64>(), out);
+            break;
+        case types::InternalType::ScilabBool   :
+            encode(in->getAs<types::Bool>(), out);
+            break;
+
+        case types::InternalType::ScilabString :
+            encode(in->getAs<types::String>(), out);
+            break;
+
+        case types::InternalType::ScilabList   :
+            encode(in->getAs<types::List>(), out);
+            break;
+        case types::InternalType::ScilabTList  :
+            encode(in->getAs<types::List>(), out);
+            break;
+        case types::InternalType::ScilabMList  :
+            encode(in->getAs<types::List>(), out);
+            break;
+
+        default :
+            Scierror(999, _("%s: Wrong type for input argument #%d: %s, %s, %s, %s or %s type.\n"), var2vecName.c_str(), 1, "Double", "Integer", "Boolean", "String", "List");
+            return false;
+    }
+
+    return true;
+}
diff --git a/scilab/modules/scicos/src/cpp/var2vec.hxx b/scilab/modules/scicos/src/cpp/var2vec.hxx
new file mode 100644 (file)
index 0000000..207e19a
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+*  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+*  Copyright (C) 2015 - Scilab Enterprises - Paul Bignier
+*
+*  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 VAR2VEC_HXX_
+#define VAR2VEC_HXX_
+
+#include <vector>
+
+#include "types.hxx"
+#include "internal.hxx"
+#include "double.hxx"
+
+bool var2vec(types::InternalType* in, std::vector<double> &out);
+
+#endif /* VAR2VEC_HXX_ */
diff --git a/scilab/modules/scicos/src/cpp/vec2var.cpp b/scilab/modules/scicos/src/cpp/vec2var.cpp
new file mode 100644 (file)
index 0000000..f457f25
--- /dev/null
@@ -0,0 +1,433 @@
+/*
+*  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+*  Copyright (C) 2015 - Scilab Enterprises - Paul Bignier
+*
+*  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 <vector>
+#include <string>
+#include <cwchar>
+#include <cstring>
+
+#include "vec2var.hxx"
+
+#include "types.hxx"
+#include "internal.hxx"
+#include "double.hxx"
+#include "int.hxx"
+#include "bool.hxx"
+#include "string.hxx"
+#include "list.hxx"
+#include "tlist.hxx"
+#include "mlist.hxx"
+
+static const std::string vec2varName = "vec2var";
+
+/**
+ * Calculate the length increment depending on the type of the Scilab type
+ *
+ * @param T Scilab type
+ * @param v the instance on the Scilab type
+ * @return the number of double used to store the data
+ */
+template<typename T>
+size_t required_length(T* v)
+{
+    const size_t sizeof_double = sizeof(double);
+    if (sizeof(typename T::type) >= sizeof_double)
+    {
+        return v->getSize() * sizeof(typename T::type) / sizeof_double;
+    }
+    else
+    {
+        // Increase the size to contain enough space, manage the size_t rounding issue
+        return (v->getSize() * sizeof(typename T::type) + (sizeof_double - 1)) / sizeof_double;
+    }
+}
+
+template<typename T>
+int decode(const double* const tab, const int tabSize, const int iDims, const int offset, T* &res)
+{
+    int  iElements = 1;
+    int* pDims = new int[iDims];
+    for (int i = 0; i < iDims; ++i)
+    {
+        pDims[i] = tab[i];
+        iElements *= pDims[i];
+    }
+
+    res = new T(iDims, pDims);
+    delete[] pDims;
+
+    const int numberOfDoubleNeeded = required_length(res);
+    if (tabSize < numberOfDoubleNeeded + 2 + iDims)
+    {
+        // Error case: the input doesn't have enough elements
+        Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, numberOfDoubleNeeded + 2 + iDims + offset, 1);
+        res->killMe();
+        return -1;
+    }
+
+    //Use a buffer to prevent copying only parts of integers
+    double* buffer = new double[numberOfDoubleNeeded];
+    memcpy(buffer, tab + iDims, numberOfDoubleNeeded * sizeof(double));
+    memcpy(res->get(), buffer, iElements * sizeof(typename T::type));
+    delete[] buffer;
+
+    return 2 + iDims + numberOfDoubleNeeded;
+}
+
+template<>
+int decode(const double* const tab, const int tabSize, const int iDims, const int offset, types::Double* &res)
+{
+    int  iElements = 1;
+    int* pDims = new int[iDims];
+    for (int i = 0; i < iDims; ++i)
+    {
+        pDims[i] = tab[i];
+        iElements *= pDims[i];
+    }
+    if (tabSize < iElements + 3 + iDims)
+    {
+        // Error case: the input doesn't have enough elements
+        Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, iElements + 3 + iDims + offset, 1);
+        return -1;
+    }
+    if (iElements == 0)
+    {
+        res = types::Double::Empty();
+        delete[] pDims;
+        return 5;
+    }
+    const bool isComplex = (tab[iDims] == 1);
+
+    res = new types::Double(iDims, pDims, isComplex);
+    delete[] pDims;
+
+    res->set(tab + iDims + 1);
+    if (isComplex == true)
+    {
+        res->setImg(tab + iDims + 1 + iElements);
+        iElements *= 2;
+    }
+
+    return 2 + iDims + 1 + iElements;
+}
+
+template<>
+int decode(const double* const tab, const int tabSize, const int iDims, const int offset, types::String* &res)
+{
+    int  iElements = 1;
+    int* pDims = new int[iDims];
+    for (int i = 0; i < iDims; ++i)
+    {
+        pDims[i] = tab[i];
+        iElements *= pDims[i];
+    }
+    if (tabSize < iElements * 2 + 2 + iDims)
+    {
+        // Error case: the input doesn't have enough elements
+        Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, iElements * 2 + 2 + iDims + offset, 1);
+        return -1;
+    }
+
+    res = new types::String(iDims, pDims);
+    delete[] pDims;
+
+    // Retrieving the first value pointer
+    double* strData = const_cast<double*>(tab + iDims + iElements);
+
+    res->set(0, (char*) & (*strData));
+    strData += static_cast<size_t>(tab[iDims]);
+    int stringOffset = static_cast<size_t>(tab[iDims]);
+    for (int i = 1; i < iElements; i++)
+    {
+        res->set(i, (char*) & (*strData));
+
+        // Increment the value pointer by the number of elements
+        const size_t numberOfElem = static_cast<size_t>(tab[iDims + i]) - static_cast<size_t>(tab[iDims + i - 1]);
+        strData += numberOfElem;
+        stringOffset += static_cast<int>(numberOfElem);
+    }
+
+    return 2 + iDims + iElements + stringOffset;
+}
+
+static bool readElement(const double* const input, const int iType, const int iDims, const int inputRows, int &offset, types::InternalType* &res)
+{
+    switch (iType)
+    {
+        case types::InternalType::ScilabDouble :
+        {
+            if (inputRows < 5)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 5, 1);
+                return false;
+            }
+
+            types::Double* pDouble = nullptr;
+            const int resSize = decode<types::Double>(input + 2, inputRows, iDims, offset, pDouble);
+            if (resSize < 0)
+            {
+                return false;
+            }
+            res = pDouble;
+            offset += resSize;
+            break;
+        }
+
+        case types::InternalType::ScilabInt8   :
+        {
+            if (inputRows < 4)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 4, 1);
+                return false;
+            }
+
+            types::Int8* pInt8 = nullptr;
+            const int resSize = decode<types::Int8>(input + 2, inputRows, iDims, offset, pInt8);
+            if (resSize < 0)
+            {
+                return false;
+            }
+            res = pInt8;
+            offset += resSize;
+            break;
+        }
+        case types::InternalType::ScilabUInt8  :
+        {
+            if (inputRows < 4)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 4, 1);
+                return false;
+            }
+
+            types::UInt8* pUInt8 = nullptr;
+            const int resSize = decode<types::UInt8>(input + 2, inputRows, iDims, offset, pUInt8);
+            if (resSize < 0)
+            {
+                return false;
+            }
+            res = pUInt8;
+            offset += resSize;
+            break;
+        }
+        case types::InternalType::ScilabInt16  :
+        {
+            if (inputRows < 4)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 4, 1);
+                return false;
+            }
+
+            types::Int16* pInt16 = nullptr;
+            const int resSize = decode<types::Int16>(input + 2, inputRows, iDims, offset, pInt16);
+            if (resSize < 0)
+            {
+                return false;
+            }
+            res = pInt16;
+            offset += resSize;
+            break;
+        }
+        case types::InternalType::ScilabUInt16 :
+        {
+            if (inputRows < 4)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 4, 1);
+                return false;
+            }
+
+            types::UInt16* pUInt16 = nullptr;
+            const int resSize = decode<types::UInt16>(input + 2, inputRows, iDims, offset, pUInt16);
+            if (resSize < 0)
+            {
+                return false;
+            }
+            res = pUInt16;
+            offset += resSize;
+            break;
+        }
+        case types::InternalType::ScilabInt32  :
+        {
+            if (inputRows < 4)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 4, 1);
+                return false;
+            }
+
+            types::Int32* pInt32 = nullptr;
+            const int resSize = decode<types::Int32>(input + 2, inputRows, iDims, offset, pInt32);
+            if (resSize < 0)
+            {
+                return false;
+            }
+            res = pInt32;
+            offset += resSize;
+            break;
+        }
+        case types::InternalType::ScilabUInt32 :
+        {
+            if (inputRows < 4)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 4, 1);
+                return false;
+            }
+
+            types::UInt32* pUInt32 = nullptr;
+            const int resSize = decode<types::UInt32>(input + 2, inputRows, iDims, offset, pUInt32);
+            if (resSize < 0)
+            {
+                return false;
+            }
+            res = pUInt32;
+            offset += resSize;
+            break;
+        }
+        case types::InternalType::ScilabInt64  :
+        {
+            if (inputRows < 4)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 4, 1);
+                return false;
+            }
+
+            types::Int64* pInt64 = nullptr;
+            const int resSize = decode<types::Int64>(input + 2, inputRows, iDims, offset, pInt64);
+            if (resSize < 0)
+            {
+                return false;
+            }
+            res = pInt64;
+            offset += resSize;
+            break;
+        }
+        case types::InternalType::ScilabUInt64 :
+        {
+            if (inputRows < 4)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 4, 1);
+                return false;
+            }
+
+            types::UInt64* pUInt64 = nullptr;
+            const int resSize = decode<types::UInt64>(input + 2, inputRows, iDims, offset, pUInt64);
+            if (resSize < 0)
+            {
+                return false;
+            }
+            res = pUInt64;
+            offset += resSize;
+            break;
+        }
+        case types::InternalType::ScilabBool   :
+        {
+            if (inputRows < 4)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 4, 1);
+                return false;
+            }
+
+            types::Bool* pBool = nullptr;
+            const int resSize = decode<types::Bool>(input + 2, inputRows, iDims, offset, pBool);
+            if (resSize < 0)
+            {
+                return false;
+            }
+            res = pBool;
+            offset += resSize;
+            break;
+        }
+
+        case types::InternalType::ScilabString :
+        {
+            if (inputRows < 4)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 4, 1);
+                return false;
+            }
+
+            types::String* pString = nullptr;
+            const int resSize = decode<types::String>(input + 2, inputRows, iDims, offset, pString);
+            if (resSize < 0)
+            {
+                return false;
+            }
+            res = pString;
+            offset += resSize;
+            break;
+        }
+
+        case types::InternalType::ScilabList   :
+        case types::InternalType::ScilabTList  :
+        case types::InternalType::ScilabMList  :
+        {
+            if (inputRows < 2)
+            {
+                Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 2, 1);
+                return false;
+            }
+
+            types::List* pList = nullptr;
+            if (iType == types::InternalType::ScilabList)
+            {
+                pList = new types::List();
+            }
+            else if (iType == types::InternalType::ScilabTList)
+            {
+                pList = new types::TList();
+            }
+            else
+            {
+                pList = new types::MList();
+            }
+
+            offset += 2;
+            for (int i = 0; i < iDims; ++i)
+            {
+                if (inputRows < 2 + offset)
+                {
+                    Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, offset + 2, 1);
+                    return false;
+                }
+                // Extract the list elements infos and recursively call readElement
+                const int elementType = *(input + offset);
+                const int elementDims = *(input + offset + 1);
+                types::InternalType* element;
+                if (!readElement(input + offset, elementType, elementDims, inputRows - offset, offset, element))
+                {
+                    return false;
+                }
+                pList->append(element);
+            }
+            res = pList;
+            break;
+        }
+
+        default :
+            Scierror(999, _("%s: Wrong value for element #%d of input argument #%d: Unknown type.\n"), vec2varName.c_str(), offset + 1, 1);
+            return false;
+    }
+
+    return true;
+}
+
+bool vec2var(const std::vector<double> in, types::InternalType* &out)
+{
+    const int iType = in[0];
+    const int iDims = in[1];
+
+    int offset = 0;
+    if (!readElement(&in[0], iType, iDims, static_cast<int>(in.size()), offset, out))
+    {
+        return false;
+    }
+
+    return true;
+}
diff --git a/scilab/modules/scicos/src/cpp/vec2var.hxx b/scilab/modules/scicos/src/cpp/vec2var.hxx
new file mode 100644 (file)
index 0000000..1b45297
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+*  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+*  Copyright (C) 2015 - Scilab Enterprises - Paul Bignier
+*
+*  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 VEC2VAR_HXX_
+#define VEC2VAR_HXX_
+
+#include <vector>
+
+#include "types.hxx"
+#include "internal.hxx"
+
+extern "C"
+{
+#include "Scierror.h"
+#include "localization.h"
+}
+
+bool vec2var(const std::vector<double> in, types::InternalType* &out);
+
+#endif /* VEC2VAR_HXX_ */
index 5cc7bd8..641cae4 100644 (file)
@@ -19,7 +19,6 @@
 #include <sstream>
 #include <memory>
 
-#include "int.hxx"
 #include "bool.hxx"
 #include "double.hxx"
 #include "string.hxx"
@@ -34,6 +33,9 @@
 #include "ports_management.hxx"
 #include "utilities.hxx"
 
+#include "var2vec.hxx"
+#include "vec2var.hxx"
+
 extern "C" {
 #include "sci_malloc.h"
 #include "charEncoding.h"
@@ -368,298 +370,6 @@ struct dstate
     }
 };
 
-void decodeDims(std::vector<int>::iterator& prop_it, std::vector<int>& dims)
-{
-    const int iDims = *prop_it++;
-    dims.resize(iDims);
-
-    memcpy(&dims[0], &(*prop_it), iDims * sizeof(int));
-    prop_it += iDims;
-}
-
-void encodeDims(std::vector<int>& prop_content, types::GenericType* v)
-{
-    const int iDims = v->getDims();
-    prop_content.push_back(iDims);
-
-    const int index = prop_content.size();
-    prop_content.resize(index + iDims);
-
-    memcpy(&prop_content[index], v->getDimsArray(), iDims * sizeof(int));
-}
-
-/**
- * Calculate the length increment depending on the ::value_type of the buffer and the type of the Scilab type
- *
- * @param V buffer type which must have a ::value_type field
- * @param T Scilab type
- * @param v the instance on the Scilab type
- * @return the number of V elements used to store the data
- */
-template<typename V, typename T>
-size_t required_length(const V& /*it*/, T* v)
-{
-    const size_t sizeof_prop_value = sizeof(typename V::value_type);
-    if (sizeof(typename T::type) >= sizeof_prop_value)
-    {
-        return v->getSize() * sizeof(typename T::type) / sizeof_prop_value;
-    }
-    else
-    {
-        // increase the size to contain enough space, manage the size_t rounding issue
-        return v->getSize() * sizeof(typename T::type) + (sizeof_prop_value - 1) / sizeof_prop_value;
-    }
-}
-
-template <typename T>
-T* decode(std::vector<int>::iterator& prop_it)
-{
-    std::vector<int> dims;
-    decodeDims(prop_it, dims);
-
-    T* v = new T(static_cast<int>(dims.size()), &dims[0]);
-    memcpy(v->get(), &(*prop_it), v->getSize() * sizeof(typename T::type));
-
-    prop_it += required_length(prop_it, v);
-    return v;
-}
-
-template <typename T>
-bool encode(std::vector<int>& prop_content, T* v)
-{
-    encodeDims(prop_content, v);
-
-    const int index = prop_content.size();
-    const int len = required_length(prop_content, v);
-    prop_content.resize(index + len);
-
-    // Using contiguity of the memory, we save the input into 'prop_content'
-    memcpy(&prop_content[index], v->get(), v->getSize() * sizeof(typename T::type));
-    return true;
-}
-
-template<>
-types::Double* decode(std::vector<int>::iterator& prop_it)
-{
-    std::vector<int> dims;
-    decodeDims(prop_it, dims);
-
-    bool isComplex = *prop_it++;
-
-    types::Double* v = new types::Double(static_cast<int>(dims.size()), &dims[0], isComplex);
-    memcpy(v->getReal(), &(*prop_it), v->getSize() * sizeof(double));
-
-    if (isComplex)
-    {
-        prop_it += required_length(prop_it, v);
-        memcpy(v->getImg(), &(*prop_it), v->getSize() * sizeof(double));
-    }
-
-    prop_it += required_length(prop_it, v);
-    return v;
-}
-
-bool encode(std::vector<int>& prop_content, types::Double* v)
-{
-    encodeDims(prop_content, v);
-
-    // Flag for complex
-    prop_content.push_back(v->isComplex());
-
-    const int index = prop_content.size();
-    const int len = required_length(prop_content, v);
-    prop_content.resize(index + len);
-
-    // Using contiguity of the memory, we save the input into 'prop_content'
-    memcpy(&prop_content[index], v->get(), v->getSize() * sizeof(double));
-
-    if (v->isComplex())
-    {
-        prop_content.resize(index + 2 * len);
-        // Using contiguity of the memory, we save the input into 'prop_content'
-        memcpy(&prop_content[index + len], v->getImg(), v->getSize() * sizeof(double));
-    }
-
-    return true;
-}
-
-template<>
-types::String* decode(std::vector<int>::iterator& prop_it)
-{
-    std::vector<int> dims;
-    decodeDims(prop_it, dims);
-
-    types::String* v = new types::String(static_cast<int>(dims.size()), &dims[0]);
-    // retrieving the first value iterator
-    std::vector<int>::iterator strData = prop_it + v->getSize();
-
-    v->set(0, (char*) & (*strData));
-    strData += static_cast<size_t>(*prop_it++);
-    for (int i = 1; i < v->getSize(); i++)
-    {
-        v->set(i, (char*) & (*strData));
-
-        // increment the value iterator by the number of element
-        const size_t numberOfElem = static_cast<size_t>(*prop_it) - static_cast<size_t>(*(prop_it - 1)) ;
-        prop_it++;
-        strData += numberOfElem;
-    }
-
-    prop_it = strData;
-    return v;
-}
-
-bool encode(std::vector<int>& prop_content, types::String* v)
-{
-    encodeDims(prop_content, v);
-
-    const int index = prop_content.size();
-
-    std::vector<char*> utf8;
-    utf8.reserve(v->getSize());
-
-    std::vector<size_t> str_len;
-    str_len.reserve(v->getSize());
-
-    int offset = 0;
-    for (int i = 0; i < v->getSize(); i++)
-    {
-        char* str = wide_string_to_UTF8(v->get(i));
-        utf8.push_back(str);
-
-        // adding the '\0' byte to the len
-        const size_t len = strlen(str) + 1;
-        str_len.push_back(len);
-
-        offset += (len * sizeof(char) + sizeof(int) - 1) / sizeof(int);
-        prop_content.push_back(offset);
-    }
-
-    // reserve space for the string offsets and contents
-    prop_content.resize(index + v->getSize() + offset);
-
-    size_t len = str_len[0];
-    memcpy(&prop_content[index + v->getSize()], &(*utf8[0]), len * sizeof(char));
-    for (int i = 1; i < v->getSize(); i++)
-    {
-        len = str_len[i];
-        memcpy(&prop_content[index + v->getSize() + prop_content[index + i - 1]], &(*utf8[i]), len * sizeof(char));
-    }
-
-    // free all the string, after being copied
-    for (std::vector<char*>::iterator it = utf8.begin(); it != utf8.end(); it++)
-    {
-        FREE(*it);
-    }
-
-    return true;
-}
-
-
-template<>
-types::List* decode(std::vector<int>::iterator& prop_it)
-{
-    int length = *prop_it++;
-
-    types::List* list = new types::List();
-    for (int i = 0; i < length; i++)
-    {
-        switch (*prop_it++)
-        {
-            case types::InternalType::ScilabDouble:
-                list->set(i, decode<types::Double>(prop_it));
-                break;
-            case types::InternalType::ScilabInt8:
-                list->set(i, decode<types::Int8>(prop_it));
-                break;
-            case types::InternalType::ScilabUInt8:
-                list->set(i, decode<types::UInt8>(prop_it));
-                break;
-            case types::InternalType::ScilabInt16:
-                list->set(i, decode<types::Int16>(prop_it));
-                break;
-            case types::InternalType::ScilabUInt16:
-                list->set(i, decode<types::UInt16>(prop_it));
-                break;
-            case types::InternalType::ScilabInt32:
-                list->set(i, decode<types::Int32>(prop_it));
-                break;
-            case types::InternalType::ScilabUInt32:
-                list->set(i, decode<types::UInt32>(prop_it));
-                break;
-            case types::InternalType::ScilabInt64:
-                list->set(i, decode<types::Int64>(prop_it));
-                break;
-            case types::InternalType::ScilabUInt64:
-                list->set(i, decode<types::UInt64>(prop_it));
-                break;
-            case types::InternalType::ScilabString:
-                list->set(i, decode<types::String>(prop_it));
-                break;
-            case types::InternalType::ScilabBool:
-                list->set(i, decode<types::Bool>(prop_it));
-                break;
-            case types::InternalType::ScilabList:
-                list->set(i, decode<types::List>(prop_it));
-                break;
-        }
-    }
-    return list;
-}
-
-bool encode(std::vector<int>& prop_content, types::List* list)
-{
-    // Save the number of list elements in the first element
-    prop_content.push_back(list->getSize());
-
-    for (int i = 0; i < list->getSize(); ++i)
-    {
-        // Insert a new element and save its variable type
-        prop_content.push_back(list->get(i)->getType());
-
-        switch (list->get(i)->getType())
-        {
-            case types::InternalType::ScilabDouble:
-                encode(prop_content, list->get(i)->getAs<types::Double>());
-                break;
-            case types::InternalType::ScilabInt8:
-                encode(prop_content, list->get(i)->getAs<types::Int8>());
-                break;
-            case types::InternalType::ScilabUInt8:
-                encode(prop_content, list->get(i)->getAs<types::UInt8>());
-                break;
-            case types::InternalType::ScilabInt16:
-                encode(prop_content, list->get(i)->getAs<types::Int16>());
-                break;
-            case types::InternalType::ScilabUInt16:
-                encode(prop_content, list->get(i)->getAs<types::UInt16>());
-                break;
-            case types::InternalType::ScilabInt32:
-                encode(prop_content, list->get(i)->getAs<types::Int32>());
-                break;
-            case types::InternalType::ScilabUInt32:
-                encode(prop_content, list->get(i)->getAs<types::UInt32>());
-                break;
-            case types::InternalType::ScilabInt64:
-                encode(prop_content, list->get(i)->getAs<types::Int64>());
-                break;
-            case types::InternalType::ScilabUInt64:
-                encode(prop_content, list->get(i)->getAs<types::UInt64>());
-                break;
-            case types::InternalType::ScilabString:
-                encode(prop_content, list->get(i)->getAs<types::String>());
-                break;
-            case types::InternalType::ScilabBool:
-                encode(prop_content, list->get(i)->getAs<types::Bool>());
-                break;
-            default:
-                return false;
-        }
-    }
-
-    return true;
-}
-
 struct odstate
 {
 
@@ -667,24 +377,28 @@ struct odstate
     {
         ScicosID adaptee = adaptor.getAdaptee()->id();
 
-        std::vector<int> prop_content;
+        std::vector<double> prop_content;
         controller.getObjectProperty(adaptee, BLOCK, ODSTATE, prop_content);
 
-        // corner-case, the empty content is an empty double
+        // Corner-case, the empty content is an empty double
         if (prop_content.empty())
         {
             return types::Double::Empty();
         }
 
-        // the returned value is a list
-        std::vector<int>::iterator prop_it = prop_content.begin();
-        return decode<types::List>(prop_it);
+        // The returned value is a list
+        types::InternalType* res;
+        if (!vec2var(prop_content, res))
+        {
+            return 0;
+        }
+
+        return res;
     }
 
     static bool set(ModelAdapter& adaptor, types::InternalType* v, Controller& controller)
     {
         ScicosID adaptee = adaptor.getAdaptee()->id();
-        std::vector<int> prop_content;
 
         // corner-case the empty content is an empty-double
         if (v->getType() == types::InternalType::ScilabDouble)
@@ -695,7 +409,8 @@ struct odstate
                 return false;
             }
 
-            // propr_content is empty
+            // prop_content is empty
+            std::vector<double> prop_content;
             controller.setObjectProperty(adaptee, BLOCK, ODSTATE, prop_content);
             return true;
         }
@@ -705,8 +420,8 @@ struct odstate
             return false;
         }
 
-        types::List* list = v->getAs<types::List>();
-        if (!encode(prop_content, list))
+        std::vector<double> prop_content;
+        if (!var2vec(v->getAs<types::List>(), prop_content))
         {
             return false;
         }
@@ -966,24 +681,28 @@ struct opar
     {
         ScicosID adaptee = adaptor.getAdaptee()->id();
 
-        std::vector<int> prop_content;
+        std::vector<double> prop_content;
         controller.getObjectProperty(adaptee, BLOCK, OPAR, prop_content);
 
-        // corner-case, the empty content is an empty double
+        // Corner-case, the empty content is an empty double
         if (prop_content.empty())
         {
             return types::Double::Empty();
         }
 
-        // the returned value is a list
-        std::vector<int>::iterator prop_it = prop_content.begin();
-        return decode<types::List>(prop_it);
+        // The returned value is a list
+        types::InternalType* res;
+        if (!vec2var(prop_content, res))
+        {
+            return 0;
+        }
+
+        return res;
     }
 
     static bool set(ModelAdapter& adaptor, types::InternalType* v, Controller& controller)
     {
         ScicosID adaptee = adaptor.getAdaptee()->id();
-        std::vector<int> prop_content;
 
         // corner-case the empty content is an empty-double
         if (v->getType() == types::InternalType::ScilabDouble)
@@ -995,6 +714,7 @@ struct opar
             }
 
             // prop_content should be empty
+            std::vector<double> prop_content;
             controller.setObjectProperty(adaptee, BLOCK, OPAR, prop_content);
             return true;
         }
@@ -1004,8 +724,8 @@ struct opar
             return false;
         }
 
-        types::List* list = v->getAs<types::List>();
-        if (!encode(prop_content, list))
+        std::vector<double> prop_content;
+        if (!var2vec(v->getAs<types::List>(), prop_content))
         {
             return false;
         }
index 2057831..5a41ff0 100644 (file)
@@ -174,13 +174,13 @@ propertyUpdated( 5 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 5 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 5 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 5 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 5 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 5 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 5 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -384,13 +384,13 @@ propertyUpdated( 9 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 9 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 9 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 9 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 9 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 9 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 9 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -594,13 +594,13 @@ propertyUpdated( 13 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 13 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 13 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 13 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 13 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 13 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 13 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 13 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 13 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 13 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 13 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 13 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 13 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 13 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 13 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 13 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -808,13 +808,13 @@ propertyUpdated( 18 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 18 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 18 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 18 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 18 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 18 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 18 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 18 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 18 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 18 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 18 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 18 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 18 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 18 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 18 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 18 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -1196,13 +1196,13 @@ propertyUpdated( 28 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 28 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 28 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 28 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 28 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 28 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 28 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 28 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 28 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 28 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 28 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 28 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 28 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 28 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 28 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 28 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -1482,7 +1482,7 @@ propertyUpdated( 31 , BLOCK , DSTATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , ODSTATE ) : SUCCESS
 propertyUpdated( 31 , BLOCK , RPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 31 , BLOCK , OPAR ) : NO_CHANGES
+propertyUpdated( 31 , BLOCK , OPAR ) : SUCCESS
 propertyUpdated( 31 , BLOCK , SIM_BLOCKTYPE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , LABEL ) : NO_CHANGES
@@ -1509,7 +1509,7 @@ propertyUpdated( 34 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 35 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , DSTATE ) : NO_CHANGES
-propertyUpdated( 31 , BLOCK , ODSTATE ) : NO_CHANGES
+propertyUpdated( 31 , BLOCK , ODSTATE ) : SUCCESS
 propertyUpdated( 31 , BLOCK , RPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , IPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , OPAR ) : SUCCESS
@@ -1537,7 +1537,7 @@ propertyUpdated( 34 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 35 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , DSTATE ) : NO_CHANGES
-propertyUpdated( 31 , BLOCK , ODSTATE ) : NO_CHANGES
+propertyUpdated( 31 , BLOCK , ODSTATE ) : SUCCESS
 propertyUpdated( 31 , BLOCK , RPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , IPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , OPAR ) : SUCCESS
@@ -1565,7 +1565,7 @@ propertyUpdated( 34 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 35 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , DSTATE ) : NO_CHANGES
-propertyUpdated( 31 , BLOCK , ODSTATE ) : NO_CHANGES
+propertyUpdated( 31 , BLOCK , ODSTATE ) : SUCCESS
 propertyUpdated( 31 , BLOCK , RPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , IPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , OPAR ) : SUCCESS
@@ -1593,7 +1593,7 @@ propertyUpdated( 34 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 35 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , DSTATE ) : NO_CHANGES
-propertyUpdated( 31 , BLOCK , ODSTATE ) : NO_CHANGES
+propertyUpdated( 31 , BLOCK , ODSTATE ) : SUCCESS
 propertyUpdated( 31 , BLOCK , RPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , IPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , OPAR ) : SUCCESS
@@ -1649,7 +1649,7 @@ propertyUpdated( 34 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 35 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , DSTATE ) : NO_CHANGES
-propertyUpdated( 31 , BLOCK , ODSTATE ) : NO_CHANGES
+propertyUpdated( 31 , BLOCK , ODSTATE ) : SUCCESS
 propertyUpdated( 31 , BLOCK , RPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , IPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , OPAR ) : SUCCESS
@@ -1677,7 +1677,7 @@ propertyUpdated( 34 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 35 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , DSTATE ) : NO_CHANGES
-propertyUpdated( 31 , BLOCK , ODSTATE ) : NO_CHANGES
+propertyUpdated( 31 , BLOCK , ODSTATE ) : SUCCESS
 propertyUpdated( 31 , BLOCK , RPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , IPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , OPAR ) : SUCCESS
@@ -1705,7 +1705,7 @@ propertyUpdated( 34 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 35 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , DSTATE ) : NO_CHANGES
-propertyUpdated( 31 , BLOCK , ODSTATE ) : NO_CHANGES
+propertyUpdated( 31 , BLOCK , ODSTATE ) : SUCCESS
 propertyUpdated( 31 , BLOCK , RPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , IPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , OPAR ) : SUCCESS
@@ -1733,7 +1733,7 @@ propertyUpdated( 34 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 35 , PORT , DATATYPE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , DSTATE ) : NO_CHANGES
-propertyUpdated( 31 , BLOCK , ODSTATE ) : NO_CHANGES
+propertyUpdated( 31 , BLOCK , ODSTATE ) : SUCCESS
 propertyUpdated( 31 , BLOCK , RPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , IPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , OPAR ) : SUCCESS
index 2d6063a..6266f4f 100644 (file)
@@ -78,13 +78,13 @@ propertyUpdated( 4 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 4 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 4 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 4 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 4 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 4 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 4 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 4 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 4 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 4 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 4 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 4 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 4 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 4 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -156,13 +156,13 @@ propertyUpdated( 6 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 6 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 6 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -189,13 +189,13 @@ propertyUpdated( 8 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 8 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 8 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -224,13 +224,13 @@ propertyUpdated( 9 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 9 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 9 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 9 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 9 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 9 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -257,13 +257,13 @@ propertyUpdated( 11 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 11 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 11 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 11 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 11 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 11 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 11 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 11 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 11 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 11 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 11 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 11 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 11 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 11 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 11 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 11 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
index 80c56f4..ba6adf7 100644 (file)
@@ -90,13 +90,13 @@ propertyUpdated( 5 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 5 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 5 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 5 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 5 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -179,13 +179,13 @@ propertyUpdated( 10 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 10 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 10 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 10 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 10 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 10 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 10 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 10 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 10 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 10 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 10 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 10 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 10 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 10 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -212,13 +212,13 @@ propertyUpdated( 12 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 12 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 12 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 12 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 12 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -354,13 +354,13 @@ propertyUpdated( 17 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 17 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 17 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 17 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 17 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 17 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 17 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 17 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 17 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 17 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 17 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 17 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 17 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 17 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 17 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 17 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -387,13 +387,13 @@ propertyUpdated( 19 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 19 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 19 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 19 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 19 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 19 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 19 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 19 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 19 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 19 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 19 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 19 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 19 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 19 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 19 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 19 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -682,13 +682,13 @@ propertyUpdated( 34 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 34 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 34 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 34 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 34 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 34 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 34 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 34 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 34 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 34 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 34 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 34 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 34 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 34 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 34 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 34 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -740,13 +740,13 @@ propertyUpdated( 38 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 38 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 38 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 38 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 38 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 38 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 38 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 38 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 38 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 38 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 38 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 38 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 38 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 38 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 38 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 38 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -847,13 +847,13 @@ propertyUpdated( 44 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 44 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 44 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 44 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 44 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 44 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 44 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 44 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 44 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 44 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 44 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 44 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 44 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 44 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 44 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 44 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -880,13 +880,13 @@ propertyUpdated( 46 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 46 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 46 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 46 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 46 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 46 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 46 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 46 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 46 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 46 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 46 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 46 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 46 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 46 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 46 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 46 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -944,13 +944,13 @@ propertyUpdated( 52 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 52 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 52 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 52 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 52 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 52 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 52 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 52 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 52 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 52 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 52 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 52 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 52 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 52 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 52 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 52 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -1132,13 +1132,13 @@ propertyUpdated( 56 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 56 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 56 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 56 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 56 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 56 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 56 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 56 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 56 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 56 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 56 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 56 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 56 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 56 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 56 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 56 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -1165,13 +1165,13 @@ propertyUpdated( 58 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 58 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 58 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 58 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 58 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 58 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 58 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 58 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 58 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 58 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 58 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 58 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 58 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 58 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 58 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 58 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -1229,13 +1229,13 @@ propertyUpdated( 64 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 64 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 64 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 64 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 64 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 64 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 64 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 64 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 64 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 64 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 64 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 64 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 64 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 64 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 64 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 64 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -1423,13 +1423,13 @@ propertyUpdated( 68 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 68 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 68 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 68 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 68 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 68 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 68 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 68 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 68 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 68 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 68 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 68 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 68 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 68 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 68 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 68 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -1456,13 +1456,13 @@ propertyUpdated( 70 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 70 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 70 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 70 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 70 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 70 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 70 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 70 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 70 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 70 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 70 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 70 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 70 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 70 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 70 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 70 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -1520,13 +1520,13 @@ propertyUpdated( 76 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 76 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 76 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 76 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 76 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 76 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 76 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 76 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 76 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 76 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 76 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 76 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 76 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 76 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 76 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 76 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -1878,13 +1878,13 @@ propertyUpdated( 84 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 84 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 84 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 84 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 84 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 84 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 84 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 84 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 84 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 84 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 84 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 84 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 84 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 84 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 84 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 84 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -1917,13 +1917,13 @@ propertyUpdated( 86 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 86 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 86 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 86 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 86 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 86 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 86 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 86 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 86 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 86 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 86 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 86 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 86 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 86 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 86 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 86 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -2023,13 +2023,13 @@ propertyUpdated( 92 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 92 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 92 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 92 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 92 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 92 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 92 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 92 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 92 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 92 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 92 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 92 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 92 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 92 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 92 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 92 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -2074,13 +2074,13 @@ propertyUpdated( 96 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 96 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 96 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 96 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 96 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 96 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 96 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 96 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 96 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 96 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 96 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 96 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 96 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 96 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 96 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 96 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -2111,13 +2111,13 @@ propertyUpdated( 98 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 98 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 98 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 98 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 98 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 98 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 98 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 98 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 98 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 98 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 98 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 98 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 98 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 98 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 98 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 98 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -2159,13 +2159,13 @@ propertyUpdated( 101 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 101 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 101 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 101 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 101 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 101 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 101 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 101 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 101 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 101 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 101 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 101 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 101 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 101 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 101 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 101 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -2210,13 +2210,13 @@ propertyUpdated( 105 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 105 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 105 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 105 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 105 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 105 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 105 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 105 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 105 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 105 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 105 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 105 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 105 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 105 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 105 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 105 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
@@ -2247,13 +2247,13 @@ propertyUpdated( 107 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 107 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 107 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 107 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 107 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 107 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 107 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 107 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 107 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 107 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 107 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 107 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 107 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 107 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 107 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 107 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
index 17ff57e..660d585 100644 (file)
@@ -140,13 +140,13 @@ propertyUpdated( 12 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 12 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 12 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 12 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 12 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 12 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 12 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 12 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -198,13 +198,13 @@ propertyUpdated( 16 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 16 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 16 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 16 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 16 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 16 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 16 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 16 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 16 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 16 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 16 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 16 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 16 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 16 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 16 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
index 49bbaef..9d0f366 100644 (file)
@@ -892,13 +892,13 @@ propertyUpdated( 27 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 27 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 27 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 27 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 27 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 27 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 27 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 27 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 27 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 27 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 27 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 27 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 27 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 27 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 27 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 27 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -954,13 +954,13 @@ propertyUpdated( 31 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 31 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 31 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 31 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 31 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 31 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 31 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 31 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -1019,13 +1019,13 @@ propertyUpdated( 37 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 37 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 37 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 37 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 37 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 37 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 37 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 37 , BLOCK , SIM_DEP_UT ) : SUCCESS
-propertyUpdated( 37 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 37 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 37 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 37 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 37 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 37 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 37 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 37 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
index 5b63618..631ee7d 100644 (file)
@@ -140,13 +140,13 @@ propertyUpdated( 6 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 6 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 6 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 6 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 6 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 6 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -179,13 +179,13 @@ propertyUpdated( 8 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 8 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 8 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 8 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 8 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 8 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -843,13 +843,13 @@ propertyUpdated( 23 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 23 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 23 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 23 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 23 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 23 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 23 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 23 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 23 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 23 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 23 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 23 , BLOCK , IPAR ) : SUCCESS
-propertyUpdated( 23 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 23 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 23 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 23 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -882,13 +882,13 @@ propertyUpdated( 25 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 25 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 25 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 25 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 25 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 25 , BLOCK , RPAR ) : SUCCESS
+propertyUpdated( 25 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 25 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 25 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 25 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 25 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 25 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 25 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 25 , BLOCK , EXPRS ) : SUCCESS
 propertyUpdated( 25 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 25 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
@@ -957,13 +957,13 @@ propertyUpdated( 30 , BLOCK , GEOMETRY ) : SUCCESS
 propertyUpdated( 30 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 30 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 30 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 30 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 30 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 30 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 30 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 30 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 30 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 30 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 30 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 30 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 30 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 30 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 30 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
index b39a972..f08368e 100644 (file)
@@ -75,13 +75,13 @@ propertyUpdated( 5 , BLOCK , GEOMETRY ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , ANGLE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , STATE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 5 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 5 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
-propertyUpdated( 5 , BLOCK , ODSTATE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , NZCROSS ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , NMODE ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , IPAR ) : NO_CHANGES
-propertyUpdated( 5 , BLOCK , OPAR ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , EXPRS ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , EQUATIONS ) : NO_CHANGES
 propertyUpdated( 5 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES