/* \file MatlabNArrayToNArray.cpp * \brief: convert a sparse or dense matlab n-dimensional array to cpp n-dimensional array */ #ifdef HAVE_CONFIG_H #include #else #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!" #endif #include "../../shared/shared.h" #include "../../include/include.h" #include /*FUNCTION MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/ int MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){ int i,j,rows,cols; int numel,ndims; int *size,*dims; double* mxmatrix_ptr=NULL; const mwSize* ipt=NULL; /*output: */ double* matrix=NULL; /*matlab indices: */ mwIndex* ir=NULL; mwIndex* jc=NULL; double* pr=NULL; int count; int nnz; int nz; /*get Matlab matrix information: */ numel=mxGetNumberOfElements(mxmatrix); ndims=mxGetNumberOfDimensions(mxmatrix); ipt =mxGetDimensions(mxmatrix); size =xNew(ndims); for (i=0;i(rows*cols,0.0); /*Now, get ir,jc and pr: */ ir=mxGetIr(mxmatrix); jc=mxGetJc(mxmatrix); pr=mxGetPr(mxmatrix); /*Now, start inserting data into double* matrix: */ count=0; for(i=0;i(numel,0.0); dims=xNew(ndims); for(i=0;i(dims); } /*Assign output pointer: */ *pmatrix=matrix; *pmatrix_numel=numel; *pmatrix_ndims=ndims; *pmatrix_size=size; return 1; } /*}}}*/ /*FUNCTION MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/ int MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){ int i,j,rows,cols; int numel,ndims; int *size,*dims; bool* mxmatrix_ptr=NULL; const mwSize* ipt=NULL; /*output: */ bool* matrix=NULL; /*matlab indices: */ mwIndex* ir=NULL; mwIndex* jc=NULL; bool* pm=NULL; int count; int nnz; int nz; /*get Matlab matrix information: */ numel=mxGetNumberOfElements(mxmatrix); ndims=mxGetNumberOfDimensions(mxmatrix); ipt =mxGetDimensions(mxmatrix); size =xNew(ndims); for (i=0;i(rows*cols,false); /*Now, get ir,jc and pm: */ ir=mxGetIr(mxmatrix); jc=mxGetJc(mxmatrix); pm=(bool*)mxGetData(mxmatrix); /*Now, start inserting data into bool* matrix: */ count=0; for(i=0;i(numel); dims=xNew(ndims); for(i=0;i(dims); } /*Assign output pointer: */ *pmatrix=matrix; *pmatrix_numel=numel; *pmatrix_ndims=ndims; *pmatrix_size=size; return 1; } /*}}}*/ /*FUNCTION MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/ int MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){ int i,j,rows,cols; int numel,ndims; int *size,*dims; mxChar* mxmatrix_ptr=NULL; const mwSize* ipt=NULL; /*output: */ char* matrix=NULL; /*matlab indices: */ mwIndex* ir=NULL; mwIndex* jc=NULL; char* pm=NULL; int count; int nnz; int nz; /*get Matlab matrix information: */ numel=mxGetNumberOfElements(mxmatrix); ndims=mxGetNumberOfDimensions(mxmatrix); ipt =mxGetDimensions(mxmatrix); size =xNew(ndims); for (i=0;i(rows*cols); /*Now, get ir,jc and pm: */ ir=mxGetIr(mxmatrix); jc=mxGetJc(mxmatrix); pm=(char*)mxGetData(mxmatrix); /*Now, start inserting data into char* matrix: */ count=0; for(i=0;i(numel+1); /*looping code adapted from Matlab example explore.c: */ int elements_per_page = size[0] * size[1]; /* total_number_of_pages = size[2] x size[3] x ... x size[N-1] */ int total_number_of_pages = 1; for (i=2; i