/* FCT (Fast Curvelet Transform) Copyright (C) 2004 Caltech Written by Lexing Ying */ #ifndef _MEXAUX_HPP_ #define _MEXAUX_HPP_ #include "mex.h" #include "matrix.h" #include "fdct3d.hpp" inline void mex2cpp(const mxArray*& md, int& cd); inline void cpp2mex(const int& cd, mxArray*& md); inline void mex2cpp(const mxArray*& md, double& cd); inline void cpp2mex(const double& cd, mxArray*& md); inline void mex2cpp(const mxArray*& md, CpxOffTns& cd); inline void cpp2mex(CpxOffTns& cd, mxArray*& md);//inline void cpp2mex(const CpxOffTns& cd, mxArray*& md); template inline void mex2cpp(const mxArray*& md, vector& cd); template inline void cpp2mex(vector& cd, mxArray*& md);//template inline void cpp2mex(const vector& cd, mxArray*& md); //----------------------int inline void mex2cpp(const mxArray*& md, int& cd) { cd = int(mxGetScalar(md)); return; } inline void cpp2mex(const int& cd, mxArray*& md) { md = mxCreateDoubleScalar(cd); return; } //----------------------double inline void mex2cpp(const mxArray*& md, double& cd) { cd = mxGetScalar(md); return; } inline void cpp2mex(const double& cd, mxArray*& md) { md = mxCreateDoubleScalar(cd); return; } //----------------------cpxofftns inline void mex2cpp(const mxArray*& md, CpxOffTns& cd) { const int* dims = mxGetDimensions(md); int m = dims[0]; int n = dims[1]; int p = dims[2]; double* xr = mxGetPr(md); double* xi = mxGetPi(md); int s = -m/2; int t = -n/2; int u = -p/2; cd.resize(m,n,p); if(xr!=NULL && xi!=NULL) { int cnt = 0; for(int k=u; k template inline void mex2cpp(const mxArray*& md, vector& cd) { int m = mxGetM(md); int n = mxGetN(md); assert(n==1); cd.resize(m*n); for(int ci=0; ci inline void cpp2mex(vector& cd, mxArray*& md) { int n = cd.size(); md = mxCreateCellMatrix(n, 1); for(int ci=0; ci