From 53709a32145f43a31fa13cd9d20637ef16dd8463 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien.villemot@ens.fr>
Date: Tue, 7 Aug 2012 14:43:32 +0200
Subject: [PATCH] Ensure compatibility with matio 1.5

Closes: #275
---
 mex/sources/estimation/logMHMCMCposterior.cc | 24 ++++++++++++--------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/mex/sources/estimation/logMHMCMCposterior.cc b/mex/sources/estimation/logMHMCMCposterior.cc
index c388767af8..a9308c0d47 100644
--- a/mex/sources/estimation/logMHMCMCposterior.cc
+++ b/mex/sources/estimation/logMHMCMCposterior.cc
@@ -130,7 +130,13 @@ sampleMHMC(LogPosteriorDensity &lpd, RandomWalkMetropolisHastings &rwmh,
   MATFile *drawmat; // MCMC draws output file pointer
   int matfStatus;
 #else   //  OCTAVE_MEX_FILE e.t.c.
+# if MATIO_MAJOR_VERSION > 1 || (MATIO_MAJOR_VERSION == 1 && MATIO_MINOR_VERSION >= 5)
+  size_t dims[2];
+  const matio_compression compression = MAT_COMPRESSION_NONE;
+# else
   int dims[2];
+  const int compression = COMPRESSION_NONE;
+# endif
   mat_t *drawmat;
   matvar_t *matvar;
   int matfStatus;
@@ -304,7 +310,7 @@ sampleMHMC(LogPosteriorDensity &lpd, RandomWalkMetropolisHastings &rwmh,
             }
           else
             {
-              int start[2] = {0, 0}, edge[2] = {2, 2}, stride[2] = {1, 1}, err = 0;
+              int start[2] = {0, 0}, edge[2], stride[2] = {1, 1}, err = 0;
               mexPrintf("MHMCMC: Using interim partial draws file %s \n", mhFName.c_str());
               //              matvar = Mat_VarReadInfo(drawmat, "x2");
               matvar = Mat_VarReadInfo(drawmat, (char *) "x2");
@@ -317,9 +323,9 @@ sampleMHMC(LogPosteriorDensity &lpd, RandomWalkMetropolisHastings &rwmh,
               else
                 {
                   // GetVariable(drawmat, "x2");
-                  dims[0] = matvar->dims[0]-1;
-                  dims[1] = matvar->dims[1]-1;
-                  err = Mat_VarReadData(drawmat, matvar, mxGetPr(mxMhParamDrawsPtr), start, stride, matvar->dims);
+                  edge[0] = matvar->dims[0];
+                  edge[1] = matvar->dims[1];
+                  err = Mat_VarReadData(drawmat, matvar, mxGetPr(mxMhParamDrawsPtr), start, stride, edge);
                   if (err)
                     {
                       fline(b) = 1;
@@ -339,9 +345,9 @@ sampleMHMC(LogPosteriorDensity &lpd, RandomWalkMetropolisHastings &rwmh,
               else
                 {
                   // GetVariable(drawmat, "x2");
-                  dims[0] = matvar->dims[0]-1;
-                  dims[1] = matvar->dims[1]-1;
-                  err = Mat_VarReadData(drawmat, matvar, mxGetPr(mxMhLogPostDensPtr), start, stride, matvar->dims);
+                  edge[0] = matvar->dims[0];
+                  edge[1] = matvar->dims[1];
+                  err = Mat_VarReadData(drawmat, matvar, mxGetPr(mxMhLogPostDensPtr), start, stride, edge);
                   if (err)
                     {
                       fline(b) = 1;
@@ -513,7 +519,7 @@ sampleMHMC(LogPosteriorDensity &lpd, RandomWalkMetropolisHastings &rwmh,
           dims[0] = currInitSizeArray;
           dims[1] = npar;
           matvar = Mat_VarCreate("x2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, mxGetPr(mxMhParamDrawsPtr), 0);
-          matfStatus = Mat_VarWrite(drawmat, matvar, 0);
+          matfStatus = Mat_VarWrite(drawmat, matvar, compression);
           Mat_VarFree(matvar);
           if (matfStatus)
             {
@@ -523,7 +529,7 @@ sampleMHMC(LogPosteriorDensity &lpd, RandomWalkMetropolisHastings &rwmh,
           //matfStatus = matPutVariable(drawmat, "logpo2", mxMhLogPostDensPtr);
           dims[1] = 1;
           matvar = Mat_VarCreate("logpo2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, mxGetPr(mxMhLogPostDensPtr), 0);
-          matfStatus = Mat_VarWrite(drawmat, matvar, 0);
+          matfStatus = Mat_VarWrite(drawmat, matvar, compression);
           Mat_VarFree(matvar);
           if (matfStatus)
             {
-- 
GitLab