⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mexaux.hpp

📁 This directory includes matlab interface of the curvelet transform using usfft. Basic functions
💻 HPP
字号:
/*  Copyright (C) 2004 Caltech  Written by Lexing Ying*/#ifndef _MEXAUX_HPP_#define _MEXAUX_HPP_#include "mex.h"#include "matrix.h"#include "fdct_usfft.hpp"FDCT_USFFT_NS_BEGIN_NAMESPACEinline 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, dbl2& cd);inline void cpp2mex(const dbl2& cd, mxArray*& md);inline void mex2cpp(const mxArray*& md, CpxOffMat& cd);inline void cpp2mex(const CpxOffMat& cd, mxArray*& md);template <class T> inline void mex2cpp(const mxArray*& md, vector<T>& cd);template <class T> inline void cpp2mex(const vector<T>& cd, mxArray*& md);//----------------------intinline void mex2cpp(const mxArray*& md, int& cd){  cd = int(mxGetScalar(md));  return;}inline void cpp2mex(const int& cd, mxArray*& md){  md = mxCreateDoubleScalar(cd);  return;}//----------------------doubleinline void mex2cpp(const mxArray*& md, double& cd){  cd = mxGetScalar(md);  return;}inline void cpp2mex(const double& cd, mxArray*& md){  md = mxCreateDoubleScalar(cd);  return;}//----------------------dbl2inline void mex2cpp(const mxArray*& md, dbl2& cd){  double* xr = mxGetPr(md);  cd._x = xr[0];  cd._y = xr[1];  return;}inline void cpp2mex(const dbl2& cd, mxArray*& md){  md = mxCreateDoubleMatrix(1, 2, mxREAL);  double* xr = mxGetPr(md);  xr[0] = cd._x;  xr[1] = cd._y;  return;}//----------------------cpxoffmatinline void mex2cpp(const mxArray*& md, CpxOffMat& cd){  int m = mxGetM(md);  int n = mxGetN(md);  double* xr = mxGetPr(md);  double* xi = mxGetPi(md);  int s = -m/2;  int t = -n/2;  cd.resize(m,n,s,t);  if(xr!=NULL && xi!=NULL) {	 int cnt = 0;	 for(int j=t; j<t+n; j++)		for(int i=s; i<s+m; i++) {		  cd(i,j) = cpx(xr[cnt], xi[cnt]);		  cnt++;		}  } else if(xr!=NULL && xi==NULL) {	 int cnt = 0;	 for(int j=t; j<t+n; j++)		for(int i=s; i<s+m; i++) {		  cd(i,j) = cpx(xr[cnt], 0);		  cnt++;		}  } else if(xr==NULL && xi!=NULL) {	 int cnt = 0;	 for(int j=t; j<t+n; j++)		for(int i=s; i<s+m; i++) {		  cd(i,j) = cpx(0, xi[cnt]);		  cnt++;		}  }  return;}inline void cpp2mex(const CpxOffMat& cd, mxArray*& md){  int m = cd.m();  int n = cd.n();  int s = -m/2;  int t = -n/2;  md = mxCreateDoubleMatrix(m, n, mxCOMPLEX);  double* xr = mxGetPr(md);  double* xi = mxGetPi(md);  int cnt = 0;  for(int j=t; j<t+n; j++)	 for(int i=s; i<s+m; i++) {		xr[cnt] = real(cd(i,j));		xi[cnt] = imag(cd(i,j));		cnt++;	 }  return;}//----------------------vector<...>template <class T> inline void mex2cpp(const mxArray*& md, vector<T>& cd){  int m = mxGetM(md); assert(m==1);  int n = mxGetN(md);  cd.resize(n);  for(int ci=0; ci<n; ci++) {	 const mxArray*tt = mxGetCell(md, ci);	 mex2cpp(tt, cd[ci]);  }  return;}template <class T> inline void cpp2mex(const vector<T>& cd, mxArray*& md){  int n = cd.size();  md = mxCreateCellMatrix(1, n);  for(int ci=0; ci<n; ci++) {	 mxArray* ss;	 cpp2mex(cd[ci], ss);	 mxSetCell(md, ci, ss);  }  return;}FDCT_USFFT_NS_END_NAMESPACE#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -