HDF5: read data as Fortran ones 57/12057/5
Calixte DENIZET [Wed, 17 Jul 2013 16:41:52 +0000 (18:41 +0200)]
Test updated (Transpose removed in many cases).

Change-Id: Id3d42da4f0f9a692f952ca95ac0a73734443490a

41 files changed:
scilab/modules/hdf5/Makefile.am
scilab/modules/hdf5/Makefile.in
scilab/modules/hdf5/sci_gateway/cpp/sci_percent_H5Object_e.cpp
scilab/modules/hdf5/src/c/hdf5.vcxproj
scilab/modules/hdf5/src/c/hdf5.vcxproj.filters
scilab/modules/hdf5/src/cpp/H5ArrayData.cpp
scilab/modules/hdf5/src/cpp/H5ArrayData.hxx
scilab/modules/hdf5/src/cpp/H5Attribute.cpp
scilab/modules/hdf5/src/cpp/H5BasicData.hxx
scilab/modules/hdf5/src/cpp/H5CompoundData.cpp
scilab/modules/hdf5/src/cpp/H5CompoundData.hxx
scilab/modules/hdf5/src/cpp/H5Data.hxx
scilab/modules/hdf5/src/cpp/H5DataConverter.hxx
scilab/modules/hdf5/src/cpp/H5Dataset.cpp
scilab/modules/hdf5/src/cpp/H5FloatData.hxx
scilab/modules/hdf5/src/cpp/H5Object.hxx
scilab/modules/hdf5/src/cpp/H5OpaqueData.hxx
scilab/modules/hdf5/src/cpp/H5Options.cpp [new file with mode: 0644]
scilab/modules/hdf5/src/cpp/H5Options.hxx [new file with mode: 0644]
scilab/modules/hdf5/src/cpp/H5ReferenceData.cpp
scilab/modules/hdf5/src/cpp/H5ReferenceData.hxx
scilab/modules/hdf5/src/cpp/H5StringData.cpp
scilab/modules/hdf5/src/cpp/H5StringData.hxx
scilab/modules/hdf5/src/cpp/H5TransformedData.hxx
scilab/modules/hdf5/src/cpp/H5VlenData.cpp
scilab/modules/hdf5/src/cpp/H5VlenData.hxx
scilab/modules/hdf5/src/cpp/HDF5Scilab.cpp
scilab/modules/hdf5/src/cpp/HDF5Scilab.hxx
scilab/modules/hdf5/tests/unit_tests/h5attr.dia.ref
scilab/modules/hdf5/tests/unit_tests/h5attr.tst
scilab/modules/hdf5/tests/unit_tests/h5dataset.dia.ref
scilab/modules/hdf5/tests/unit_tests/h5dataset.tst
scilab/modules/hdf5/tests/unit_tests/h5mount.dia.ref
scilab/modules/hdf5/tests/unit_tests/h5mount.tst
scilab/modules/hdf5/tests/unit_tests/h5mv.dia.ref
scilab/modules/hdf5/tests/unit_tests/h5mv.tst
scilab/modules/hdf5/tests/unit_tests/h5read.dia.ref
scilab/modules/hdf5/tests/unit_tests/h5read.tst
scilab/modules/hdf5/tests/unit_tests/h5umount.dia.ref
scilab/modules/hdf5/tests/unit_tests/h5umount.tst
scilab/modules/hdf5/tests/unit_tests/h5write.dia.ref

index 95e6baa..9662b66 100644 (file)
@@ -42,7 +42,8 @@ HDF5_CXX_SOURCES = src/cpp/H5Attribute.cpp \
                   src/cpp/H5ReferenceData.cpp \
                   src/cpp/H5CompoundData.cpp \
                   src/cpp/H5ArrayData.cpp \
-                  src/cpp/H5VlenData.cpp
+                  src/cpp/H5VlenData.cpp \
+                  src/cpp/H5Options.cpp
 
 GATEWAY_C_SOURCES = sci_gateway/c/gw_hdf5.c
 
index ca73525..7912425 100644 (file)
@@ -162,7 +162,8 @@ am__objects_2 = libscihdf5_algo_la-H5Attribute.lo \
        libscihdf5_algo_la-H5ReferenceData.lo \
        libscihdf5_algo_la-H5CompoundData.lo \
        libscihdf5_algo_la-H5ArrayData.lo \
-       libscihdf5_algo_la-H5VlenData.lo
+       libscihdf5_algo_la-H5VlenData.lo \
+       libscihdf5_algo_la-H5Options.lo
 am_libscihdf5_algo_la_OBJECTS = $(am__objects_1) $(am__objects_2)
 libscihdf5_algo_la_OBJECTS = $(am_libscihdf5_algo_la_OBJECTS)
 libscihdf5_la_DEPENDENCIES = libscihdf5-algo.la
@@ -513,7 +514,8 @@ HDF5_CXX_SOURCES = src/cpp/H5Attribute.cpp \
                   src/cpp/H5ReferenceData.cpp \
                   src/cpp/H5CompoundData.cpp \
                   src/cpp/H5ArrayData.cpp \
-                  src/cpp/H5VlenData.cpp
+                  src/cpp/H5VlenData.cpp \
+                  src/cpp/H5Options.cpp
 
 GATEWAY_C_SOURCES = sci_gateway/c/gw_hdf5.c
 GATEWAY_CXX_SOURCES = sci_gateway/cpp/sci_export_to_hdf5.cpp \
@@ -830,6 +832,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscihdf5_algo_la-H5HardLink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscihdf5_algo_la-H5Link.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscihdf5_algo_la-H5Object.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscihdf5_algo_la-H5Options.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscihdf5_algo_la-H5ReferenceData.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscihdf5_algo_la-H5SoftLink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscihdf5_algo_la-H5StringData.Plo@am__quote@
@@ -1111,6 +1114,13 @@ libscihdf5_algo_la-H5VlenData.lo: src/cpp/H5VlenData.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscihdf5_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscihdf5_algo_la-H5VlenData.lo `test -f 'src/cpp/H5VlenData.cpp' || echo '$(srcdir)/'`src/cpp/H5VlenData.cpp
 
+libscihdf5_algo_la-H5Options.lo: src/cpp/H5Options.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscihdf5_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscihdf5_algo_la-H5Options.lo -MD -MP -MF $(DEPDIR)/libscihdf5_algo_la-H5Options.Tpo -c -o libscihdf5_algo_la-H5Options.lo `test -f 'src/cpp/H5Options.cpp' || echo '$(srcdir)/'`src/cpp/H5Options.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscihdf5_algo_la-H5Options.Tpo $(DEPDIR)/libscihdf5_algo_la-H5Options.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/H5Options.cpp' object='libscihdf5_algo_la-H5Options.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscihdf5_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscihdf5_algo_la-H5Options.lo `test -f 'src/cpp/H5Options.cpp' || echo '$(srcdir)/'`src/cpp/H5Options.cpp
+
 libscihdf5_la-sci_export_to_hdf5.lo: sci_gateway/cpp/sci_export_to_hdf5.cpp
 @am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscihdf5_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscihdf5_la-sci_export_to_hdf5.lo -MD -MP -MF $(DEPDIR)/libscihdf5_la-sci_export_to_hdf5.Tpo -c -o libscihdf5_la-sci_export_to_hdf5.lo `test -f 'sci_gateway/cpp/sci_export_to_hdf5.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_export_to_hdf5.cpp
 @am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscihdf5_la-sci_export_to_hdf5.Tpo $(DEPDIR)/libscihdf5_la-sci_export_to_hdf5.Plo
index c2cc8fa..7222b76 100644 (file)
@@ -151,7 +151,7 @@ int sci_percent_H5Object_e(char * fname, unsigned long fname_len)
         {
             H5Object & robj = obj->getData(nbIn - 1, index);
             //robj.createOnScilabStack(nbIn + 1, pvApiCtx);
-            robj.toScilab(pvApiCtx, nbIn + 1);
+            robj.toScilab(pvApiCtx, nbIn + 1, 0, 0, H5Options::isReadFlip());
         }
         /*        else if (obj->isReference())
                 {
index b2bfcbc..2b5ef43 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup Label="ProjectConfigurations">
     <ProjectConfiguration Include="Debug|Win32">
     <ClCompile Include="..\cpp\H5HardLink.cpp" />
     <ClCompile Include="..\cpp\H5Link.cpp" />
     <ClCompile Include="..\cpp\H5Object.cpp" />
+    <ClCompile Include="..\cpp\H5Options.cpp" />
     <ClCompile Include="..\cpp\H5ReferenceData.cpp" />
     <ClCompile Include="..\cpp\H5SoftLink.cpp" />
     <ClCompile Include="..\cpp\H5StringData.cpp" />
     <ClInclude Include="..\cpp\H5NamedObjectsList.hxx" />
     <ClInclude Include="..\cpp\H5Object.hxx" />
     <ClInclude Include="..\cpp\H5OpaqueData.hxx" />
+    <ClInclude Include="..\cpp\H5Options.hxx" />
     <ClInclude Include="..\cpp\H5ReferenceData.hxx" />
     <ClInclude Include="..\cpp\H5SoftLink.hxx" />
     <ClInclude Include="..\cpp\H5SoftLinksList.hxx" />
index 592f0ec..4beb601 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
     <Filter Include="Source Files">
     <ClCompile Include="..\cpp\H5Object.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\cpp\H5Options.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
     <ClCompile Include="..\cpp\H5ReferenceData.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
     <ClInclude Include="..\..\includes\HDF5Objects.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\cpp\H5Options.hxx">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="core_import.def">
index 5bbdc85..9d4360b 100644 (file)
@@ -117,8 +117,8 @@ void H5ArrayData::printData(std::ostream & os, const unsigned int pos, const uns
     delete &hdata;
 }
 
-void H5ArrayData::toScilab(void * pvApiCtx, const int lhsPosition, int * parentList, const int listPosition) const
+void H5ArrayData::toScilab(void * pvApiCtx, const int lhsPosition, int * parentList, const int listPosition, const bool flip) const
 {
-    H5Object::toScilab(pvApiCtx, lhsPosition, parentList, listPosition);
+    H5Object::toScilab(pvApiCtx, lhsPosition, parentList, listPosition, flip);
 }
 }
index c15ba1e..fb8b91b 100644 (file)
@@ -44,7 +44,7 @@ public:
 
     virtual void printData(std::ostream & os, const unsigned int pos, const unsigned int indentLevel) const;
 
-    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0) const;
+    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0, const bool flip = true) const;
 
     virtual bool mustDelete() const
     {
index 238f090..08156ee 100644 (file)
@@ -10,6 +10,7 @@
  *
  */
 
+#include "H5Options.hxx"
 #include "H5Attribute.hxx"
 #include "H5DataFactory.hxx"
 
@@ -92,7 +93,7 @@ void H5Attribute::getAccessibleAttribute(const std::string & _name, const int po
     else if (lower == "data")
     {
         const H5Data & data = const_cast<H5Attribute *>(this)->getData();
-        data.toScilab(pvApiCtx, pos);
+        data.toScilab(pvApiCtx, pos, 0, 0, H5Options::isReadFlip());
 
         delete &data;
 
index a26bf72..432d513 100644 (file)
@@ -155,7 +155,7 @@ public:
         }
     }
 
-    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0) const
+    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0, const bool flip = true) const
     {
         T * newData = 0;
         hsize_t _ndims = ndims;
@@ -175,14 +175,22 @@ public:
         {
             if (_ndims == 2)
             {
-                alloc(pvApiCtx, lhsPosition, (int)_dims[0], (int)_dims[1], parentList, listPosition, &newData);
-                H5DataConverter::C2FHypermatrix(2, _dims, 0, static_cast<T *>(getData()), newData);
+                if (flip)
+                {
+                    alloc(pvApiCtx, lhsPosition, (int)_dims[1], (int)_dims[0], parentList, listPosition, &newData);
+                }
+                else
+                {
+                    alloc(pvApiCtx, lhsPosition, (int)_dims[0], (int)_dims[1], parentList, listPosition, &newData);
+                }
+
+                H5DataConverter::C2FHypermatrix(2, _dims, 0, static_cast<T *>(getData()), newData, flip);
             }
             else
             {
-                int * list = getHypermatrix(pvApiCtx, lhsPosition, parentList, listPosition);
-                alloc(pvApiCtx, lhsPosition, 1, (int)_totalSize, list, 3, &newData);
-                H5DataConverter::C2FHypermatrix((int)_ndims, _dims, _totalSize, static_cast<T *>(getData()), newData);
+                int * list = getHypermatrix(pvApiCtx, lhsPosition, parentList, listPosition, flip);
+                alloc(pvApiCtx, lhsPosition, (int)_totalSize, 1, list, 3, &newData);
+                H5DataConverter::C2FHypermatrix((int)_ndims, _dims, _totalSize, static_cast<T *>(getData()), newData, flip);
             }
         }
     }
index 0829894..b7dbb90 100644 (file)
@@ -10,6 +10,7 @@
  *
  */
 
+#include "H5Options.hxx"
 #include "H5CompoundData.hxx"
 #include "H5DataFactory.hxx"
 
@@ -49,9 +50,9 @@ H5CompoundData::~H5CompoundData()
     H5Tclose(type);
 }
 
-void H5CompoundData::toScilab(void * pvApiCtx, const int lhsPosition, int * parentList, const int listPosition) const
+void H5CompoundData::toScilab(void * pvApiCtx, const int lhsPosition, int * parentList, const int listPosition, const bool flip) const
 {
-    H5Object::toScilab(pvApiCtx, lhsPosition, parentList, listPosition);
+    H5Object::toScilab(pvApiCtx, lhsPosition, parentList, listPosition, flip);
 }
 
 bool H5CompoundData::isCompound() const
@@ -62,7 +63,7 @@ bool H5CompoundData::isCompound() const
 void H5CompoundData::getAccessibleAttribute(const std::string & _name, const int pos, void * pvApiCtx) const
 {
     H5Data & data = getData(_name);
-    data.toScilab(pvApiCtx, pos);
+    data.toScilab(pvApiCtx, pos, 0, 0, H5Options::isReadFlip());
 
     if (data.mustDelete())
     {
index 07d3c6e..9b62a6d 100644 (file)
@@ -26,7 +26,7 @@ public:
 
     virtual ~H5CompoundData();
 
-    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0) const;
+    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0, const bool flip = true) const;
 
     virtual void getAccessibleAttribute(const std::string & _name, const int pos, void * pvApiCtx) const;
 
index 31443fb..35fb104 100644 (file)
@@ -69,7 +69,7 @@ protected:
         }
     }
 
-    int * getHypermatrix(void * pvApiCtx, const int position, int * parentList = 0, const int listPosition = 0) const
+    int * getHypermatrix(void * pvApiCtx, const int position, int * parentList = 0, const int listPosition = 0, const bool flip = true) const
     {
         static const char * hypermat[3] = {"hm", "dims", "entries"};
 
@@ -95,22 +95,22 @@ protected:
             throw H5Exception(__LINE__, __FILE__, _("Cannot create an hypermatrix on the stack"));
         }
 
-        if (sizeof(int) == sizeof(hsize_t))
+        int * _dims = 0;
+        err = allocMatrixOfInteger32InList(pvApiCtx, position, list, 2, 1, (int)ndims, &_dims);
+        if (err.iErr)
+        {
+            throw H5Exception(__LINE__, __FILE__, _("Cannot create an hypermatrix on the stack"));
+        }
+
+        if (flip)
         {
-            err = createMatrixOfInteger32InList(pvApiCtx, position, list, 2, 1, (int)ndims, (int *)dims);
-            if (err.iErr)
+            for (int i = 0; i < ndims; i++)
             {
-                throw H5Exception(__LINE__, __FILE__, _("Cannot create an hypermatrix on the stack"));
+                _dims[i] = (int)dims[ndims - 1 - i];
             }
         }
         else
         {
-            int * _dims = 0;
-            err = allocMatrixOfInteger32InList(pvApiCtx, position, list, 2, 1, (int)ndims, &_dims);
-            if (err.iErr)
-            {
-                throw H5Exception(__LINE__, __FILE__, _("Cannot create an hypermatrix on the stack"));
-            }
             for (int i = 0; i < ndims; i++)
             {
                 _dims[i] = (int)dims[i];
index 7a45e01..f0a29a8 100644 (file)
@@ -98,33 +98,45 @@ public:
     }
 
     template <typename T>
-    static void C2FHypermatrix(const int ndims, const hsize_t * dims, const hsize_t size, const T * src, T * dest)
+    static void C2FHypermatrix(const int ndims, const hsize_t * dims, const hsize_t size, const T * src, T * dest, const bool flip = true)
     {
-        if (ndims == 2)
+        if (flip)
         {
-            for (int i = 0; i < dims[0]; i++)
+            hsize_t totalSize = 1;
+            for (int i = 0; i < ndims; i++)
             {
-                for (int j = 0; j < dims[1]; j++)
-                {
-                    dest[i + dims[0] * j] = src[j + dims[1] * i];
-                }
+                totalSize *= dims[i];
             }
+            memcpy(static_cast<void *>(dest), static_cast<const void *>(src), totalSize * sizeof(T));
         }
         else
         {
-            hsize_t * cumprod = new hsize_t[ndims];
-            hsize_t * cumdiv = new hsize_t[ndims];
-            cumprod[0] = 1;
-            cumdiv[ndims - 1] = 1;
-            for (int i = 0; i < ndims - 1; i++)
+            if (ndims == 2)
             {
-                cumprod[i + 1] = dims[i] * cumprod[i];
-                cumdiv[i] = size / cumprod[i + 1];
+                for (int i = 0; i < dims[0]; i++)
+                {
+                    for (int j = 0; j < dims[1]; j++)
+                    {
+                        dest[i + dims[0] * j] = src[j + dims[1] * i];
+                    }
+                }
             }
+            else
+            {
+                hsize_t * cumprod = new hsize_t[ndims];
+                hsize_t * cumdiv = new hsize_t[ndims];
+                cumprod[0] = 1;
+                cumdiv[ndims - 1] = 1;
+                for (int i = 0; i < ndims - 1; i++)
+                {
+                    cumprod[i + 1] = dims[i] * cumprod[i];
+                    cumdiv[i] = size / cumprod[i + 1];
+                }
 
-            reorder(ndims, dims, cumprod, cumdiv, src, dest);
-            delete[] cumprod;
-            delete[] cumdiv;
+                reorder(ndims, dims, cumprod, cumdiv, src, dest);
+                delete[] cumprod;
+                delete[] cumdiv;
+            }
         }
     }
 
index 8d69682..13135e1 100644 (file)
@@ -10,6 +10,7 @@
  *
  */
 
+#include "H5Options.hxx"
 #include "H5Dataset.hxx"
 #include "H5DataFactory.hxx"
 #include "H5Attribute.hxx"
@@ -135,7 +136,7 @@ void H5Dataset::getAccessibleAttribute(const std::string & _name, const int pos,
     else if (lower == "data")
     {
         const H5Data & data = const_cast<H5Dataset *>(this)->getData();
-        data.toScilab(pvApiCtx, pos);
+        data.toScilab(pvApiCtx, pos, 0, 0, H5Options::isReadFlip());
 
         if (data.mustDelete())
         {
index 6cd8b1d..7590f3b 100644 (file)
@@ -64,7 +64,7 @@ public:
         os << transformedData[pos];
     }
 
-    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0) const
+    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0, const bool flip = true) const
     {
         SciErr err;
         double * newData = 0;
@@ -77,14 +77,22 @@ public:
         {
             if (ndims == 2)
             {
-                H5BasicData<char>::alloc(pvApiCtx, lhsPosition, dims[0], dims[1], parentList, listPosition, &newData);
-                H5DataConverter::C2FHypermatrix(2, dims, 0, static_cast<double *>(getData()), newData);
+                if (flip)
+                {
+                    H5BasicData<char>::alloc(pvApiCtx, lhsPosition, dims[1], dims[0], parentList, listPosition, &newData);
+                }
+                else
+                {
+                    H5BasicData<char>::alloc(pvApiCtx, lhsPosition, dims[0], dims[1], parentList, listPosition, &newData);
+                }
+
+                H5DataConverter::C2FHypermatrix(2, dims, 0, static_cast<double *>(getData()), newData, flip);
             }
             else
             {
-                int * list = getHypermatrix(pvApiCtx, lhsPosition, parentList, listPosition);
-                H5BasicData<char>::alloc(pvApiCtx, lhsPosition, 1, totalSize, list, 3, &newData);
-                H5DataConverter::C2FHypermatrix(ndims, dims, totalSize, static_cast<double *>(getData()), newData);
+                int * list = getHypermatrix(pvApiCtx, lhsPosition, parentList, listPosition, flip);
+                H5BasicData<char>::alloc(pvApiCtx, lhsPosition, totalSize, 1, list, 3, &newData);
+                H5DataConverter::C2FHypermatrix(ndims, dims, totalSize, static_cast<double *>(getData()), newData, flip);
             }
         }
     }
index 78e9853..e8b2f3d 100644 (file)
@@ -259,7 +259,7 @@ public :
     virtual void createOnScilabStack(int pos, void * pvApiCtx) const;
     virtual void createInScilabList(int * list, int stackPos, int pos, void * pvApiCtx) const;
 
-    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0) const
+    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0, const bool flip = true) const
     {
         if (parentList)
         {
@@ -276,6 +276,14 @@ public :
         return this == &root;
     }
 
+    void unregisterChild(H5Object * child)
+    {
+        if (!locked)
+        {
+            children.erase(child);
+        }
+    }
+
     static std::string getIndentString(const unsigned int indentLevel)
     {
         return std::string((size_t)(__H5_INDENT_LENGTH__ * indentLevel), ' ');
@@ -389,13 +397,6 @@ protected :
             children.insert(child);
         }
     }
-    void unregisterChild(H5Object * child)
-    {
-        if (!locked)
-        {
-            children.erase(child);
-        }
-    }
 
     static void count(const H5Object & obj, OpDataCount & opdata);
     static herr_t countIterator(hid_t g_id, const char * name, const H5L_info_t * info, void * op_data);
index 37cd66b..6d74a70 100644 (file)
@@ -43,7 +43,7 @@ public:
         os << std::hex << std::setfill('0') << std::setw(2) << (int)x[dataSize - 1];
     }
 
-    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0) const
+    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0, const bool flip = true) const
     {
         unsigned char * newData = 0;
 
@@ -59,15 +59,15 @@ public:
         }
         else
         {
-            int * list = getHypermatrix(pvApiCtx, lhsPosition, parentList, listPosition);
+            int * list = getHypermatrix(pvApiCtx, lhsPosition, parentList, listPosition, flip);
             hsize_t * _dims = new hsize_t[ndims + 1];
             memcpy(_dims, dims, ndims * sizeof(hsize_t));
             _dims[ndims] = (hsize_t)dataSize;
 
             try
             {
-                alloc(pvApiCtx, lhsPosition, 1, (int)(totalSize * dataSize), list, 3, &newData);
-                H5DataConverter::C2FHypermatrix((int)ndims + 1, _dims, (int)(totalSize * dataSize), static_cast<unsigned char *>(getData()), newData);
+                alloc(pvApiCtx, lhsPosition, (int)(totalSize * dataSize), 1, list, 3, &newData);
+                H5DataConverter::C2FHypermatrix((int)ndims + 1, _dims, (int)(totalSize * dataSize), static_cast<unsigned char *>(getData()), newData, flip);
             }
             catch (const H5Exception & /*e*/)
             {
diff --git a/scilab/modules/hdf5/src/cpp/H5Options.cpp b/scilab/modules/hdf5/src/cpp/H5Options.cpp
new file mode 100644 (file)
index 0000000..eb8fb05
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2013 - Scilab Enterprises - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "H5Options.hxx"
+
+namespace org_modules_hdf5
+{
+H5Options::RowOrder H5Options::writeStyle = FORTRAN;
+H5Options::RowOrder H5Options::readStyle = FORTRAN;
+}
diff --git a/scilab/modules/hdf5/src/cpp/H5Options.hxx b/scilab/modules/hdf5/src/cpp/H5Options.hxx
new file mode 100644 (file)
index 0000000..a2b376b
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2013 - Scilab Enterprises - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __H5OPTIONS_HXX__
+#define __H5OPTIONS_HXX__
+
+#include <algorithm>
+#include <string>
+
+#include "H5Exception.hxx"
+
+extern "C"
+{
+#include "localization.h"
+}
+
+namespace org_modules_hdf5
+{
+
+class H5Options
+{
+    enum RowOrder {
+        C,
+        FORTRAN
+    };
+
+    static RowOrder writeStyle;
+    static RowOrder readStyle;
+
+public:
+
+    static void setOption(const std::string op, const std::string & style)
+    {
+        std::string upperStyle(style);
+        std::transform(style.begin(), style.end(), upperStyle.begin(), toupper);
+        std::string upperOp(op);
+        std::transform(op.begin(), op.end(), upperOp.begin(), toupper);
+        RowOrder order;
+
+        if (upperStyle == "C")
+        {
+            order = C;
+        }
+        else if (upperStyle == "FORTRAN")
+        {
+            order = FORTRAN;
+        }
+        else
+        {
+            throw H5Exception(__LINE__, __FILE__, _("Invalid option: must be C or FORTRAN."));
+        }
+
+        if (upperOp == "READ")
+        {
+            setWriteStyle(order);
+        }
+        else if (upperOp == "WRITE")
+        {
+            setReadStyle(order);
+        }
+        else
+        {
+            throw H5Exception(__LINE__, __FILE__, _("Invalid option: must be C or FORTRAN."));
+        }
+    }
+
+    static bool isWriteFlip()
+    {
+        return writeStyle == FORTRAN;
+    }
+
+    static bool isReadFlip()
+    {
+        return readStyle == FORTRAN;
+    }
+
+private:
+
+    static void setWriteStyle(const RowOrder order)
+    {
+        writeStyle = order;
+    }
+
+    static void setReadStyle(const RowOrder order)
+    {
+        readStyle = order;
+    }
+};
+}
+
+#endif // __H5OPTIONS_HXX__
index bb62d88..c0cfb1c 100644 (file)
@@ -25,9 +25,9 @@ H5ReferenceData::~H5ReferenceData()
     delete[] cumprod;
 }
 
-void H5ReferenceData::toScilab(void * pvApiCtx, const int lhsPosition, int * parentList, const int listPosition) const
+void H5ReferenceData::toScilab(void * pvApiCtx, const int lhsPosition, int * parentList, const int listPosition, const bool flip) const
 {
-    H5Object::toScilab(pvApiCtx, lhsPosition, parentList, listPosition);
+    H5Object::toScilab(pvApiCtx, lhsPosition, parentList, listPosition, flip);
 }
 
 const char ** H5ReferenceData::getReferencesName() const
index 34a7b3f..14481de 100644 (file)
@@ -34,7 +34,7 @@ public:
 
     virtual ~H5ReferenceData();
 
-    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0) const;
+    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0, const bool flip = true) const;
 
     bool isReference() const
     {
index 3b62cdf..55c0ede 100644 (file)
@@ -94,7 +94,7 @@ void H5StringData::printData(std::ostream & os, const unsigned int pos, const un
     }
 }
 
-void H5StringData::toScilab(void * pvApiCtx, const int lhsPosition, int * parentList, const int listPosition) const
+void H5StringData::toScilab(void * pvApiCtx, const int lhsPosition, int * parentList, const int listPosition, const bool flip) const
 {
     static char EMPTY[] = { '\0' };
 
@@ -121,6 +121,8 @@ void H5StringData::toScilab(void * pvApiCtx, const int lhsPosition, int * parent
         _data = _tdata;
     }
 
+    std::cout << ndims << std::endl;
+
     if (ndims == 0)
     {
         H5BasicData<char *>::create(pvApiCtx, lhsPosition, 1, 1, _data, parentList, listPosition);
@@ -134,14 +136,21 @@ void H5StringData::toScilab(void * pvApiCtx, const int lhsPosition, int * parent
         char ** newData = new char *[totalSize];
         if (ndims == 2)
         {
-            H5DataConverter::C2FHypermatrix(2, dims, 0, _data, newData);
-            H5BasicData<char *>::create(pvApiCtx, lhsPosition, (int)dims[0], (int)dims[1], newData, parentList, listPosition);
+            H5DataConverter::C2FHypermatrix(2, dims, 0, _data, newData, flip);
+            if (flip)
+            {
+                H5BasicData<char *>::create(pvApiCtx, lhsPosition, (int)dims[1], (int)dims[0], newData, parentList, listPosition);
+            }
+            else
+            {
+                H5BasicData<char *>::create(pvApiCtx, lhsPosition, (int)dims[0], (int)dims[1], newData, parentList, listPosition);
+            }
         }
         else
         {
-            int * list = getHypermatrix(pvApiCtx, lhsPosition, parentList, listPosition);
-            H5DataConverter::C2FHypermatrix((int)ndims, dims, totalSize, _data, newData);
-            H5BasicData<char *>::create(pvApiCtx, lhsPosition, 1, (int)totalSize, newData, parentList, listPosition);
+            int * list = getHypermatrix(pvApiCtx, lhsPosition, parentList, listPosition, flip);
+            H5DataConverter::C2FHypermatrix((int)ndims, dims, totalSize, _data, newData, flip);
+            H5BasicData<char *>::create(pvApiCtx, lhsPosition, (int)totalSize, 1, newData, list, 3);
         }
         delete[] newData;
     }
index 0d8ded1..ea60171 100644 (file)
@@ -37,7 +37,7 @@ public:
 
     virtual void printData(std::ostream & os, const unsigned int pos, const unsigned int indentLevel) const;
 
-    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0) const;
+    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0, const bool flip = true) const;
 
     virtual std::string dump(std::map<haddr_t, std::string> & alreadyVisited, const unsigned int indentLevel) const;
 };
index 560fe87..431c86e 100644 (file)
@@ -65,7 +65,7 @@ public:
         os << transformedData[pos];
     }
 
-    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0) const
+    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0, const bool flip = true) const
     {
         U * newData = 0;
 
@@ -82,14 +82,22 @@ public:
         {
             if (ndims == 2)
             {
-                H5BasicData<U>::alloc(pvApiCtx, lhsPosition, (int)dims[0], (int)dims[1], parentList, listPosition, &newData);
+                if (flip)
+                {
+                    H5BasicData<U>::alloc(pvApiCtx, lhsPosition, (int)dims[1], (int)dims[0], parentList, listPosition, &newData);
+                }
+                else
+                {
+                    H5BasicData<U>::alloc(pvApiCtx, lhsPosition, (int)dims[0], (int)dims[1], parentList, listPosition, &newData);
+                }
+
                 H5DataConverter::C2FHypermatrix(2, dims, 0, static_cast<U *>(getData()), newData);
             }
             else
             {
-                int * list = getHypermatrix(pvApiCtx, lhsPosition, parentList, listPosition);
-                H5BasicData<U>::alloc(pvApiCtx, lhsPosition, 1, (int)totalSize, list, 3, &newData);
-                H5DataConverter::C2FHypermatrix((int)ndims, dims, totalSize, static_cast<U *>(getData()), newData);
+                int * list = getHypermatrix(pvApiCtx, lhsPosition, parentList, listPosition, flip);
+                H5BasicData<U>::alloc(pvApiCtx, lhsPosition, (int)totalSize, 1, list, 3, &newData);
+                H5DataConverter::C2FHypermatrix((int)ndims, dims, totalSize, static_cast<U *>(getData()), newData, flip);
             }
         }
     }
index b788d47..1475cca 100644 (file)
@@ -121,8 +121,8 @@ void H5VlenData::printData(std::ostream & os, const unsigned int pos, const unsi
     delete &hdata;
 }
 
-void H5VlenData::toScilab(void * pvApiCtx, const int lhsPosition, int * parentList, const int listPosition) const
+void H5VlenData::toScilab(void * pvApiCtx, const int lhsPosition, int * parentList, const int listPosition, const bool flip) const
 {
-    H5Object::toScilab(pvApiCtx, lhsPosition, parentList, listPosition);
+    H5Object::toScilab(pvApiCtx, lhsPosition, parentList, listPosition, flip);
 }
 }
index 073a4cb..8d5d188 100644 (file)
@@ -41,7 +41,7 @@ public:
 
     virtual void printData(std::ostream & os, const unsigned int pos, const unsigned int indentLevel) const;
 
-    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0) const;
+    virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0, const bool flip = true) const;
 
     virtual bool mustDelete() const
     {
index 6d6790b..2c58a7f 100644 (file)
@@ -136,7 +136,7 @@ void HDF5Scilab::readAttributeData(H5Object & obj, const std::string & path, con
     }
 
     H5Attribute * attr = new H5Attribute(*hobj, attrName);
-    attr->getData().toScilab(pvApiCtx, pos);
+    attr->getData().toScilab(pvApiCtx, pos, 0, 0, H5Options::isReadFlip());
 
     if (path != ".")
     {
@@ -203,7 +203,7 @@ void HDF5Scilab::readData(H5Object & obj, const std::string & name, const unsign
             {
                 dims = space.select(size, start, stride, count, block);
                 data = &dataset->getData(space, dims);
-                data->toScilab(pvApiCtx, pos);
+                data->toScilab(pvApiCtx, pos, 0, 0, H5Options::isReadFlip());
             }
             catch (const H5Exception & /*e*/)
             {
@@ -219,6 +219,10 @@ void HDF5Scilab::readData(H5Object & obj, const std::string & name, const unsign
             {
                 delete data;
             }
+            else if (!H5Object::isEmptyPath(name))
+            {
+                hobj->unregisterChild(data);
+            }
         }
         else
         {
@@ -902,12 +906,6 @@ void HDF5Scilab::getScilabData(hid_t * type, unsigned int * ndims, hsize_t ** di
 {
     SciErr err;
     int * addr = 0;
-    int row;
-    int col;
-    int _type;
-
-    *mustDelete = false;
-    *mustDeleteContent = false;
 
     err = getVarAddressFromPosition(pvApiCtx, rhsPosition, &addr);
     if (err.iErr)
@@ -915,6 +913,19 @@ void HDF5Scilab::getScilabData(hid_t * type, unsigned int * ndims, hsize_t ** di
         throw H5Exception(__LINE__, __FILE__, _("Can not read input argument #%d."), rhsPosition);
     }
 
+    getScilabData(type, ndims, dims, data, mustDelete, mustDeleteContent, flip, addr, rhsPosition, pvApiCtx);
+}
+
+void HDF5Scilab::getScilabData(hid_t * type, unsigned int * ndims, hsize_t ** dims, void ** data, bool * mustDelete, bool * mustDeleteContent, const bool flip, int * addr, int rhsPosition, void * pvApiCtx)
+{
+    SciErr err;
+    int row;
+    int col;
+    int _type;
+
+    *mustDelete = false;
+    *mustDeleteContent = false;
+
     err = getVarType(pvApiCtx, addr, &_type);
     if (err.iErr)
     {
@@ -925,14 +936,40 @@ void HDF5Scilab::getScilabData(hid_t * type, unsigned int * ndims, hsize_t ** di
     {
         case sci_matrix :
         {
-            double * mat = 0;
-
             if (isVarComplex(pvApiCtx, addr))
             {
-                throw H5Exception(__LINE__, __FILE__, _("Complex datatype not handled for now."));
+                doublecomplex * mat = 0;
+                double * re = 0;
+                double * im = 0;
+                hid_t complex_id = H5Tcreate(H5T_COMPOUND, sizeof(doublecomplex));
+                H5Tinsert(complex_id, "real", offsetof(doublecomplex, r), H5T_NATIVE_DOUBLE);
+                H5Tinsert(complex_id, "imag", offsetof(doublecomplex, i), H5T_NATIVE_DOUBLE);
+
+                err = getComplexMatrixOfDouble(pvApiCtx, addr, &row, &col, &re, &im);
+                if (err.iErr)
+                {
+                    H5Tclose(complex_id);
+                    throw H5Exception(__LINE__, __FILE__, _("%s: Can not read input argument #%d."), rhsPosition);
+                }
+
+                mat = new doublecomplex[row * col];
+                for (int i = 0; i < row * col; i++)
+                {
+                    mat[i].r = re[i];
+                    mat[i].i = im[i];
+                }
+
+                *type = complex_id;
+                *ndims = 2;
+                *dims = new hsize_t[*ndims];
+                (*dims)[0] = flip ? col : row;
+                (*dims)[1] = flip ? row : col;
+                *data = mat;
+                *mustDelete = true;
             }
             else
             {
+                double * mat = 0;
                 err = getMatrixOfDouble(pvApiCtx, addr, &row, &col, &mat);
                 if (err.iErr)
                 {
@@ -1070,6 +1107,55 @@ void HDF5Scilab::getScilabData(hid_t * type, unsigned int * ndims, hsize_t ** di
             *data = matB;
             break;
         }
+        case sci_mlist :
+        {
+            if (isHypermatType(pvApiCtx, addr))
+            {
+                int * entries = 0;
+                int * _dims = 0;
+                int _ndims;
+
+                err = getHypermatEntries(pvApiCtx, addr, &entries);
+                if (err.iErr)
+                {
+                    throw H5Exception(__LINE__, __FILE__, _("%s: Can not read input argument #%d."), rhsPosition);
+                }
+
+                getScilabData(type, ndims, dims, data, mustDelete, mustDeleteContent, flip, entries, rhsPosition, pvApiCtx);
+                if (*dims)
+                {
+                    delete[] *dims;
+                }
+
+                err = getHypermatDimensions(pvApiCtx, addr, &_dims, &_ndims);
+                if (err.iErr)
+                {
+                    throw H5Exception(__LINE__, __FILE__, _("%s: Can not read input argument #%d."), rhsPosition);
+                }
+
+                *dims = new hsize_t[_ndims];
+                if (flip)
+                {
+                    for (int i = 0; i < _ndims; i++)
+                    {
+                        (*dims)[i] = _dims[_ndims - 1 - i];
+                    }
+                }
+                else
+                {
+                    for (int i = 0; i < _ndims; i++)
+                    {
+                        (*dims)[i] = _dims[i];
+                    }
+                }
+                *ndims = _ndims;
+            }
+            else
+            {
+                throw H5Exception(__LINE__, __FILE__, _("%s: Datatype not handled for now."));
+            }
+            break;
+        }
         default :
         {
             throw H5Exception(__LINE__, __FILE__, _("%s: Datatype not handled for now."));
index a9d35d8..f95b394 100644 (file)
@@ -16,6 +16,7 @@
 #include <vector>
 #include <map>
 
+#include "H5Options.hxx"
 #include "H5Object.hxx"
 #include "H5File.hxx"
 #include "H5Group.hxx"
@@ -279,6 +280,8 @@ public:
 
     static void getScilabData(hid_t * type, unsigned int * ndims, hsize_t ** dims, void ** data, bool * mustDelete, bool * mustDeleteContent, const bool flip, int rhsPosition, void * pvApiCtx);
 
+    static void getScilabData(hid_t * type, unsigned int * ndims, hsize_t ** dims, void ** data, bool * mustDelete, bool * mustDeleteContent, const bool flip, int * addr, int rhsPosition, void * pvApiCtx);
+
     template <typename T>
     static void createObjectFromStack(const std::string & file, const std::string & location, const std::string & name, const bool flip, void * pvApiCtx, const int rhsPosition, const unsigned int srank, const hsize_t * sdims, const hsize_t * sstart, const hsize_t * sstride, const hsize_t * scount, const hsize_t * sblock, const std::string & targetType, const unsigned int drank, const hsize_t * ddims, const hsize_t * dmaxdims, const hsize_t * dstart, const hsize_t * dstride, const hsize_t * dcount, const hsize_t * dblock)
     {
@@ -380,12 +383,12 @@ public:
 
                 for (unsigned int i = 0; i < total; i++)
                 {
-                    char * name = static_cast<char **>(data)[i];
-                    err = H5Rcreate(newData + i, loc, name, H5R_OBJECT, -1);
+                    char * _name = static_cast<char **>(data)[i];
+                    err = H5Rcreate(newData + i, loc, _name, H5R_OBJECT, -1);
                     if (err < 0)
                     {
                         FREE(newData);
-                        throw H5Exception(__LINE__, __FILE__, _("Invalid path: %s."), name);
+                        throw H5Exception(__LINE__, __FILE__, _("Invalid path: %s."), _name);
                     }
                 }
 
@@ -403,7 +406,7 @@ public:
 
                 data = newData;
                 mustDeleteContent = false;
-                mustDelete = true;
+                mustDelete = false;
 
                 if (sourceType > 0)
                 {
@@ -448,6 +451,11 @@ public:
             throw;
         }
 
+        if (newobj)
+        {
+            delete newobj;
+        }
+
         if (mustDeleteContent)
         {
             for (unsigned int i = 0; i < total; i++)
index 1c17f91..e180f26 100644 (file)
@@ -31,10 +31,10 @@ msgerr = msprintf(gettext("%s: Wrong type for input argument #%d: A string expec
 assert_checkerror("h5attr(a,""."",a.root.Attributes,int8(2))",msgerr,999);
 h5group(a,"Group_1");
 h5attr(a,"/Group_1","New",[5 6]);
-assert_checkequal(a.root.Group_1.New.Data,[5 6]');
+assert_checkequal(a.root.Group_1.New.Data,[5 6]);
 h5write(a,"Group_1/Dset_1",[1 2;3 4]);
 h5attr(a,"Group_1/Dset_1","Second",[7 8]);
-assert_checkequal(a.root.Group_1.Dset_1.Second.Data,[7 8]');
+assert_checkequal(a.root.Group_1.Dset_1.Second.Data,[7 8]);
 msgerr = msprintf(gettext("%s: %s\n"), "h5attr", msprintf(gettext("Invalid hdf5 file: %s."),TMPDIR+"/y.sod"));
 assert_checkerror("h5attr(TMPDIR+""/y.sod"",""."",""New"",int8(16))",msgerr,999);
 h5attr(TMPDIR+"/x.sod", ".", "New", int8(8));
@@ -53,10 +53,10 @@ msgerr = msprintf(gettext("%s: Wrong type for input argument #%d: A string expec
 assert_checkerror("h5writeattr(a,""."",a.root.Attributes,int8(2))",msgerr,999);
 h5group(a,"Group_1");
 h5writeattr(a,"/Group_1","New",[5 6]);
-assert_checkequal(a.root.Group_1.New.Data,[5 6]');
+assert_checkequal(a.root.Group_1.New.Data,[5 6]);
 h5write(a,"Group_1/Dset_1",[1 2;3 4]);
 h5writeattr(a,"Group_1/Dset_1","Second",[7 8]);
-assert_checkequal(a.root.Group_1.Dset_1.Second.Data,[7 8]');
+assert_checkequal(a.root.Group_1.Dset_1.Second.Data,[7 8]);
 msgerr = msprintf(gettext("%s: %s\n"), "h5writeattr", msprintf(gettext("Invalid hdf5 file: %s."), TMPDIR+"/y.sod"));
 assert_checkerror("h5writeattr(TMPDIR+""/y.sod"",""."",""New"",int8(16))",msgerr,999);
 h5attr(TMPDIR+"/x.sod", ".", "New", int8(8));
index b31e3fb..31f4af3 100644 (file)
@@ -37,10 +37,10 @@ assert_checkerror("h5attr(a,""."",a.root.Attributes,int8(2))",msgerr,999);
 
 h5group(a,"Group_1");
 h5attr(a,"/Group_1","New",[5 6]);
-assert_checkequal(a.root.Group_1.New.Data,[5 6]');
+assert_checkequal(a.root.Group_1.New.Data,[5 6]);
 h5write(a,"Group_1/Dset_1",[1 2;3 4]);
 h5attr(a,"Group_1/Dset_1","Second",[7 8]);
-assert_checkequal(a.root.Group_1.Dset_1.Second.Data,[7 8]');
+assert_checkequal(a.root.Group_1.Dset_1.Second.Data,[7 8]);
 
 msgerr = msprintf(gettext("%s: %s\n"), "h5attr", msprintf(gettext("Invalid hdf5 file: %s."),TMPDIR+"/y.sod"));
 assert_checkerror("h5attr(TMPDIR+""/y.sod"",""."",""New"",int8(16))",msgerr,999);
@@ -64,10 +64,10 @@ assert_checkerror("h5writeattr(a,""."",a.root.Attributes,int8(2))",msgerr,999);
 
 h5group(a,"Group_1");
 h5writeattr(a,"/Group_1","New",[5 6]);
-assert_checkequal(a.root.Group_1.New.Data,[5 6]');
+assert_checkequal(a.root.Group_1.New.Data,[5 6]);
 h5write(a,"Group_1/Dset_1",[1 2;3 4]);
 h5writeattr(a,"Group_1/Dset_1","Second",[7 8]);
-assert_checkequal(a.root.Group_1.Dset_1.Second.Data,[7 8]');
+assert_checkequal(a.root.Group_1.Dset_1.Second.Data,[7 8]);
 
 msgerr = msprintf(gettext("%s: %s\n"), "h5writeattr", msprintf(gettext("Invalid hdf5 file: %s."), TMPDIR+"/y.sod"));
 assert_checkerror("h5writeattr(TMPDIR+""/y.sod"",""."",""New"",int8(16))",msgerr,999);
index a16c82f..94897fe 100644 (file)
@@ -28,15 +28,15 @@ x = uint32(1:100);
 y = uint32(matrix(1:100,10,10));
 z = uint32(zeros(7,12));
 h5write(a,"dx",y',[2 1 ],[ 4 1 ],[ 2 1 ],[ 1 9 ]);
-z(3:6,3:11) = a.root.dx.Data';
+z(3:6,3:11) = a.root.dx.Data;
 msgerr = msprintf(gettext("%s: %s\n"), "h5dataset", msprintf(gettext("Cannot create the dataset: %s"), ""));
 assert_checkerror("h5dataset(a, """", [10 10 ; 2 1 ; 4 1 ; 2 1 ; 1 9], x, [7 12 ; 9 14 ; 3 3 ; 1 1 ; 1 1 ; 4 9])",msgerr,999);
 h5dataset(a, "D_set1", [10 10 ; 2 1 ; 4 1 ; 2 1 ; 1 9], x, [7 12 ; 9 14 ; 3 3 ; 1 1 ; 1 1 ; 4 9]);
-assert_checkequal(a.root.D_set1.Data,z);
+assert_checkequal(a.root.D_set1.Data,z');
 z = uint32(zeros(9,12));
 z(1:5,1) = uint32([1;21;41;61;81]);
 h5dataset(a, "D_set2", [5 20 ; 1 1 ; 1 1 ; 1 1 ; 5 1], y, [9 12 ; 9 14 ; 1 1 ; 1 1 ; 1 1 ; 5 1]);
-assert_checkequal(a.root.D_set2.Data,z);
+assert_checkequal(a.root.D_set2.Data,z');
 msgerr = msprintf(gettext("%s: %s\n") + "%s: %s\n", "h5dataset", gettext("Cannot write data in the dataset."), gettext("HDF5 description"), "src and dest data spaces have different sizes.");
 assert_checkerror("h5dataset(a, ""Dset_3"", [10 10 ; 2 1 ; 4 1 ; 2 1 ; 1 9], x, [10 10 ; 11 14 ; 3 3 ; 1 1 ; 1 1 ; 1 1])",msgerr,999);
 msgerr = msprintf(gettext("%s: %s\n"), "h5dataset", gettext("Invalid target dataspace."));
index dcf81ab..177929c 100644 (file)
@@ -33,17 +33,17 @@ y = uint32(matrix(1:100,10,10));
 
 z = uint32(zeros(7,12));
 h5write(a,"dx",y',[2 1 ],[ 4 1 ],[ 2 1 ],[ 1 9 ]);
-z(3:6,3:11) = a.root.dx.Data';
+z(3:6,3:11) = a.root.dx.Data;
 
 msgerr = msprintf(gettext("%s: %s\n"), "h5dataset", msprintf(gettext("Cannot create the dataset: %s"), ""));
 assert_checkerror("h5dataset(a, """", [10 10 ; 2 1 ; 4 1 ; 2 1 ; 1 9], x, [7 12 ; 9 14 ; 3 3 ; 1 1 ; 1 1 ; 4 9])",msgerr,999);
 h5dataset(a, "D_set1", [10 10 ; 2 1 ; 4 1 ; 2 1 ; 1 9], x, [7 12 ; 9 14 ; 3 3 ; 1 1 ; 1 1 ; 4 9]);
-assert_checkequal(a.root.D_set1.Data,z);
+assert_checkequal(a.root.D_set1.Data,z');
 
 z = uint32(zeros(9,12));
 z(1:5,1) = uint32([1;21;41;61;81]);
 h5dataset(a, "D_set2", [5 20 ; 1 1 ; 1 1 ; 1 1 ; 5 1], y, [9 12 ; 9 14 ; 1 1 ; 1 1 ; 1 1 ; 5 1]);
-assert_checkequal(a.root.D_set2.Data,z);
+assert_checkequal(a.root.D_set2.Data,z');
 
 msgerr = msprintf(gettext("%s: %s\n") + "%s: %s\n", "h5dataset", gettext("Cannot write data in the dataset."), gettext("HDF5 description"), "src and dest data spaces have different sizes.");
 assert_checkerror("h5dataset(a, ""Dset_3"", [10 10 ; 2 1 ; 4 1 ; 2 1 ; 1 9], x, [10 10 ; 11 14 ; 3 3 ; 1 1 ; 1 1 ; 1 1])",msgerr,999);
index 8cbc2b9..97964ea 100644 (file)
@@ -39,8 +39,8 @@ assert_checkerror("h5write(a.root.mnt.Group_2, ""Dataset_2"", uint32([10 11;12 1
 h5write(a.root.mnt.Group_2, "Dataset_2", uint32([10 11 2;12 13 9]));
 h5umount(a, "/mnt");
 assert_checkequal(a.root.mnt.Groups,"Group_1");
-assert_checkequal(c.root.Group_2.Dataset_2.data,uint32([10 11 2;12 13 9])');
+assert_checkequal(c.root.Group_2.Dataset_2.data,uint32([10 11 2;12 13 9]));
 h5rm(a, "/mnt")
-assert_checkequal(c.root.Group_2.Dataset_2.data,uint32([10 11 2;12 13 9])');
+assert_checkequal(c.root.Group_2.Dataset_2.data,uint32([10 11 2;12 13 9]));
 h5close(a, b, c)
-assert_checkequal(h5read(TMPDIR+"/test2.h5","/Group_2/Dataset_2"),uint32([10 11 2;12 13 9])');
+assert_checkequal(h5read(TMPDIR+"/test2.h5","/Group_2/Dataset_2"),uint32([10 11 2;12 13 9]));
index 475836b..86d0b11 100644 (file)
@@ -45,9 +45,9 @@ assert_checkerror("h5write(a.root.mnt.Group_2, ""Dataset_2"", uint32([10 11;12 1
 h5write(a.root.mnt.Group_2, "Dataset_2", uint32([10 11 2;12 13 9]));
 h5umount(a, "/mnt");
 assert_checkequal(a.root.mnt.Groups,"Group_1");
-assert_checkequal(c.root.Group_2.Dataset_2.data,uint32([10 11 2;12 13 9])');
+assert_checkequal(c.root.Group_2.Dataset_2.data,uint32([10 11 2;12 13 9]));
 h5rm(a, "/mnt")
-assert_checkequal(c.root.Group_2.Dataset_2.data,uint32([10 11 2;12 13 9])');
+assert_checkequal(c.root.Group_2.Dataset_2.data,uint32([10 11 2;12 13 9]));
 h5close(a, b, c)
-assert_checkequal(h5read(TMPDIR+"/test2.h5","/Group_2/Dataset_2"),uint32([10 11 2;12 13 9])');
+assert_checkequal(h5read(TMPDIR+"/test2.h5","/Group_2/Dataset_2"),uint32([10 11 2;12 13 9]));
 
index 2b1ad92..2d9aea6 100644 (file)
@@ -39,7 +39,7 @@ msgerr = msprintf(gettext("%s: %s\n"), "h5mv", msprintf(gettext("Invalid hdf5 fi
 assert_checkerror("h5mv(a.root.Grp_1,TMPDIR+""/test12.h5"",""/mnt"")",msgerr,999);
 h5mv(a.root.Grp_1, "Dset_1", a, "Dset_2")
 assert_checkequal(a.root.Datasets,"Dset_2");
-assert_checkequal(a.root.Dset_2.data,[1 2;3 4]');
+assert_checkequal(a.root.Dset_2.data,[1 2;3 4]);
 msgerr = msprintf(gettext("%s: %s\n"), "h5mv", gettext("Cannot copy object."));
 msgerr($+1) = gettext("HDF5 description") + ": " + "no destination name specified.";
 assert_checkerror("h5mv(a,a)",msgerr,999);
@@ -54,7 +54,7 @@ assert_checkerror("h5mv(a,c)",msgerr,999);
 msgerr = msprintf(gettext("%s: Invalid number of arguments: more than %d expected.\n"), "h5mv", 2);
 assert_checkerror("h5mv(a,""d"")",msgerr,999);
 h5mv(TMPDIR  +"/test1.h5", "/BGrp/BDset", a.root.Grp_1)
-assert_checkequal(a.root.Grp_1.BDset.data,(11:18)');
+assert_checkequal(a.root.Grp_1.BDset.data,(11:18));
 assert_checkequal(a.root.Datasets,"Dset_2");
 h5close(a);
 h5mv(TMPDIR+"/test.h5","/Grp_1",TMPDIR+"/test1.h5","/grp2");
index 3113371..8d1b019 100644 (file)
@@ -45,7 +45,7 @@ assert_checkerror("h5mv(a.root.Grp_1,TMPDIR+""/test12.h5"",""/mnt"")",msgerr,999
 
 h5mv(a.root.Grp_1, "Dset_1", a, "Dset_2")
 assert_checkequal(a.root.Datasets,"Dset_2");
-assert_checkequal(a.root.Dset_2.data,[1 2;3 4]');
+assert_checkequal(a.root.Dset_2.data,[1 2;3 4]);
 
 msgerr = msprintf(gettext("%s: %s\n"), "h5mv", gettext("Cannot copy object."));
 msgerr($+1) = gettext("HDF5 description") + ": " + "no destination name specified.";
@@ -66,7 +66,7 @@ assert_checkerror("h5mv(a,c)",msgerr,999);
 msgerr = msprintf(gettext("%s: Invalid number of arguments: more than %d expected.\n"), "h5mv", 2);
 assert_checkerror("h5mv(a,""d"")",msgerr,999);
 h5mv(TMPDIR  +"/test1.h5", "/BGrp/BDset", a.root.Grp_1)
-assert_checkequal(a.root.Grp_1.BDset.data,(11:18)');
+assert_checkequal(a.root.Grp_1.BDset.data,(11:18));
 assert_checkequal(a.root.Datasets,"Dset_2");
 h5close(a);
 
index b0f7493..92ceffd 100644 (file)
@@ -16,22 +16,22 @@ assert_checkerror("h5read(42,42)",msgerr,999);
 msgerr = msprintf(gettext("%s: Second argument must be a dataset name.\n"), "h5read");
 assert_checkerror("h5read(""42"",42)",msgerr,999);
 x = int8(matrix(1:80, 10, 8));
-save(TMPDIR + "/x.sod", "x"); // SOD files are HDF5 ones       
+save(TMPDIR + "/x.sod", "x"); // SOD files are HDF5 ones
 y = [1 2;3 4];
 save(TMPDIR + "/y.sod", "y");
 a = h5open(TMPDIR + "/x.sod");
 msgerr = msprintf(gettext("%s: %s\n"), "h5read", gettext("Invalid object: not a dataset."));
 assert_checkerror("h5read(a)",msgerr,999);
-assert_checkequal(h5read(a, "/x"),x');
-assert_checkequal(h5read(a, "/x", [3 4], [5 3]),x(4:6,3:7)');
+assert_checkequal(h5read(a, "/x"),x);
+assert_checkequal(h5read(a, "/x", [3 4], [5 3]),x(4:6,3:7));
 msgerr = msprintf(gettext("%s: %s\n"), "h5read", gettext("Invalid selection."));
 assert_checkerror("h5read(a,""/x"", [7 9], [10 12])",msgerr,999);
 msgerr = msprintf(gettext("%s: %s\n"), "h5read", msprintf(gettext("Invalid name: %s."), "/y"));
 assert_checkerror("h5read(a,""/y"")",msgerr,999);
-assert_checkequal(h5read(a, "/x",[2 3],[3 3],[3 2]),int8([13 15 17;43 45 47;73 75 77]));
+assert_checkequal(h5read(a, "/x",[2 3],[3 3],[3 2]),int8([13 43 73;15 45 75;17 47 77]));
 msgerr = msprintf(gettext("%s: %s\n"), "h5read", gettext("Invalid selection."));
 assert_checkerror("h5read(a,""/x"",[2 3],[3 3],[3 5])",msgerr,999);
 h5close(a);
 msgerr = msprintf(gettext("%s: Can not print H5Object: invalid object.\n"), "h5read");
 assert_checkerror("h5read(a)",msgerr,999);
-assert_checkequal(h5read(TMPDIR+"/y.sod","/y"),[1,2;3,4]');
+assert_checkequal(h5read(TMPDIR+"/y.sod","/y"),[1,2;3,4]);
index 3ee5fae..dd79f65 100644 (file)
@@ -31,7 +31,7 @@ msgerr = msprintf(gettext("%s: %s\n"), "h5read", gettext("Invalid selection."));
 assert_checkerror("h5read(a,""/x"", [7 9], [10 12])",msgerr,999);
 msgerr = msprintf(gettext("%s: %s\n"), "h5read", msprintf(gettext("Invalid name: %s."), "/y"));
 assert_checkerror("h5read(a,""/y"")",msgerr,999);
-assert_checkequal(h5read(a, "/x",[2 3],[3 3],[3 2]),int8([13 15 17;43 45 47;73 75 77]));
+assert_checkequal(h5read(a, "/x",[2 3],[3 3],[3 2]),int8([13 43 73;15 45 75;17 47 77]));
 msgerr = msprintf(gettext("%s: %s\n"), "h5read", gettext("Invalid selection."));
 assert_checkerror("h5read(a,""/x"",[2 3],[3 3],[3 5])",msgerr,999);
 h5close(a);
index 6e7b3db..6ede081 100644 (file)
@@ -25,17 +25,17 @@ b = h5open(TMPDIR + "/test1.h5", "w");
 h5group(b, "Group_1");
 h5write(b, "Group_1/Dataset_1", [1 2;3 4]);
 h5mount(a, "/mnt", b);
-assert_checkequal(a.root.mnt.Group_1.Dataset_1.data,[1 2;3 4]');
+assert_checkequal(a.root.mnt.Group_1.Dataset_1.data,[1 2;3 4]);
 h5write(a.root.mnt.Group_1, "Dataset_1", [10 11;12 13]);
-assert_checkequal(a.root.mnt.Group_1.Dataset_1.data,[10 11;12 13]');
-assert_checkequal(b.root.mnt.Group_1.Dataset_1.data,[10 11;12 13]');
+assert_checkequal(a.root.mnt.Group_1.Dataset_1.data,[10 11;12 13]);
+assert_checkequal(b.root.mnt.Group_1.Dataset_1.data,[10 11;12 13]);
 h5umount(a, "/mnt");
 assert_checkequal(a.root.mnt.Groups,[]);
-assert_checkequal(b.root.Group_1.Dataset_1.data,[10 11;12 13]');
+assert_checkequal(b.root.Group_1.Dataset_1.data,[10 11;12 13]);
 h5rm(a, "/mnt");
 msgerr = msprintf(gettext("%s: Error in retrieving field content:\n%s\n"), "%H5Object_e", msprintf(gettext("Invalid field: %s"), "mnt"));
 assert_checkerror("a.root.mnt",msgerr,999);
-assert_checkequal(b.root.Group_1.Dataset_1.data,[10 11;12 13]');
+assert_checkequal(b.root.Group_1.Dataset_1.data,[10 11;12 13]);
 h5group(a,"/mnt");
 h5mount(a,"/mnt",b);
 h5close(a, b);
index 4112920..c5615b2 100644 (file)
@@ -29,17 +29,17 @@ h5group(b, "Group_1");
 h5write(b, "Group_1/Dataset_1", [1 2;3 4]);
 
 h5mount(a, "/mnt", b);
-assert_checkequal(a.root.mnt.Group_1.Dataset_1.data,[1 2;3 4]');
+assert_checkequal(a.root.mnt.Group_1.Dataset_1.data,[1 2;3 4]);
 h5write(a.root.mnt.Group_1, "Dataset_1", [10 11;12 13]);
-assert_checkequal(a.root.mnt.Group_1.Dataset_1.data,[10 11;12 13]');
-assert_checkequal(b.root.mnt.Group_1.Dataset_1.data,[10 11;12 13]');
+assert_checkequal(a.root.mnt.Group_1.Dataset_1.data,[10 11;12 13]);
+assert_checkequal(b.root.mnt.Group_1.Dataset_1.data,[10 11;12 13]);
 h5umount(a, "/mnt");
 assert_checkequal(a.root.mnt.Groups,[]);
-assert_checkequal(b.root.Group_1.Dataset_1.data,[10 11;12 13]');
+assert_checkequal(b.root.Group_1.Dataset_1.data,[10 11;12 13]);
 h5rm(a, "/mnt");
 msgerr = msprintf(gettext("%s: Error in retrieving field content:\n%s\n"), "%H5Object_e", msprintf(gettext("Invalid field: %s"), "mnt"));
 assert_checkerror("a.root.mnt",msgerr,999);
-assert_checkequal(b.root.Group_1.Dataset_1.data,[10 11;12 13]');
+assert_checkequal(b.root.Group_1.Dataset_1.data,[10 11;12 13]);
 
 h5group(a,"/mnt");
 h5mount(a,"/mnt",b);
index e04e749..8dd9bb2 100644 (file)
@@ -20,15 +20,15 @@ save(TMPDIR + "/x.sod", "x");
 a = h5open(TMPDIR + "/x.sod");
 y = uint32(matrix(10:30, 7, 3));
 h5write(a, "y", y);
-assert_checkequal(a.root.y.Data,y');
+assert_checkequal(a.root.y.Data,y);
 h5write(a, "z", y, "H5T_MIPS_U32");
-assert_checkequal(a.root.z.Data,y');
+assert_checkequal(a.root.z.Data,y);
 x = uint32(matrix(1:(11*17), 11, 17));
 dx = cat(2,cat(1,x(1:3,2:3),x(6:8,2:3)),cat(1,x(1:3,5:6),x(6:8,5:6)),..
            cat(1,x(1:3,8:9),x(6:8,8:9)),cat(1,x(1:3,11:12),x(6:8,11:12)));
 h5write(a, "t", x, [1 2], [2 4], [5 3], [3 2]);
-assert_checkequal(a.root.t.Data,dx');
-dx = x(2:6,4:6)';
+assert_checkequal(a.root.t.Data,dx);
+dx = x(2:6,4:6);
 h5write(a,"t2",x, [2 4],[5 3]);
 assert_checkequal(a.root.t2.data,dx);
 msgerr = msprintf(gettext("%s: %s\n"), "h5write", gettext("Invalid selection."));