Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

spucmex.h

Go to the documentation of this file.
00001 // SPUC - Signal processing using C++ - A DSP library
00002 /*---------------------------------------------------------------------------*
00003  *                                   IT++                                    *
00004  *---------------------------------------------------------------------------*
00005  * Copyright (c) 1995-2001 by Tony Ottosson, Thomas Eriksson, Pål Frenger,   *
00006  * Tobias Ringström, and Jonas Samuelsson.                                   *
00007  *                                                                           *
00008  * Permission to use, copy, modify, and distribute this software and its     *
00009  * documentation under the terms of the GNU General Public License is hereby *
00010  * granted. No representations are made about the suitability of this        *
00011  * software for any purpose. It is provided "as is" without expressed or     *
00012  * implied warranty. See the GNU General Public License for more details.    *
00013  *---------------------------------------------------------------------------*/
00014 
00024 #ifndef __itmex_h
00025 #define __itmex_h
00026 
00027 #include <mex.h>
00028 #include "mbase.h"
00029 
00030 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00031 
00032 #ifndef VERSION
00033 
00034 #ifdef V4_COMPAT
00035 #define VERSION "MATLAB 4 compatible"
00036 #else
00037 #define VERSION "MATLAB R11 native"
00038 #endif /* V4_COMPAT */
00039 
00040 #endif /* VERSION */
00041 
00042 #ifdef ARRAY_ACCESS_INLINING
00043 #define INLINE " (inlined)"
00044 #else
00045 #define INLINE
00046 #endif /* ARRAY_ACCESS_INLINING */
00047 
00048 static const char *version = VERSION INLINE;
00049 
00050 #ifdef __cplusplus
00051 extern "C" {
00052 #endif
00053 
00054 const char *mexVersion () {
00055 /* mex version information */
00056 return version;
00057 }
00058 
00059 #endif //DOXYGEN_SHOULD_SKIP_THIS
00060 
00061 #ifdef __cplusplus
00062 }
00063 #endif
00064 
00065 
00066 //--------------------------------------------------------
00067 // mex -> it++
00068 //--------------------------------------------------------
00069 
00108 
00109 
00110 
00112 bin mxArray2bin(const mxArray *in);
00114 short mxArray2short(const mxArray *in);
00116 int mxArray2int(const mxArray *in);
00118 double mxArray2double(const mxArray *in);
00120 double_complex mxArray2double_complex(const mxArray *in);
00121 //string mxArray2string(const mxArray *in);
00122 
00124 bvec mxArray2bvec(const mxArray *in);
00126 svec mxArray2svec(const mxArray *in);
00128 ivec mxArray2ivec(const mxArray *in);
00130 vec mxArray2vec(const mxArray *in);
00132 cvec mxArray2cvec(const mxArray *in);
00133 
00135 bmat mxArray2bmat(const mxArray *in);
00137 smat mxArray2smat(const mxArray *in);
00139 imat mxArray2imat(const mxArray *in);
00141 mat mxArray2mat(const mxArray *in);
00143 cmat mxArray2cmat(const mxArray *in);
00144 
00145 //--------------------------------------------------------
00146 // it++ -> mex
00147 //--------------------------------------------------------
00149 void bin2mxArray(const bin &in, mxArray *out);
00151 void short2mxArray(const short &in, mxArray *out);
00153 void int2mxArray(const int &in, mxArray *out);
00155 void double2mxArray(const double &in, mxArray *out);
00157 void double_complex2mxArray(const double_complex &in, mxArray *out);
00158 //void string2mxArray(const string &in, mxArray *out);
00159 
00161 void bvec2mxArray(const bvec &in, mxArray *out);
00163 void svec2mxArray(const svec &in, mxArray *out);
00165 void ivec2mxArray(const ivec &in, mxArray *out);
00167 void vec2mxArray(const vec &in, mxArray *out);
00169 void cvec2mxArray(const cvec &in, mxArray *out);
00170 
00172 void bmat2mxArray(const bmat &in, mxArray *out);
00174 void smat2mxArray(const smat &in, mxArray *out);
00176 void imat2mxArray(const imat &in, mxArray *out);
00178 void mat2mxArray(const mat &in, mxArray *out);
00180 void cmat2mxArray(const cmat &in, mxArray *out);
00181 
00182 //--------------------------------------------------------
00183 // mex -> C
00184 //--------------------------------------------------------
00186 void mxArray2Csvec(const mxArray *in, short *out);
00188 void mxArray2Civec(const mxArray *in, int *out);
00190 void mxArray2Cvec(const mxArray *in, double *out);
00192 void mxArray2Ccvec(const mxArray *in, double *out_real, double *out_imag);
00193 
00195 void mxArray2Csmat(const mxArray *in, short **out);
00197 void mxArray2Cimat(const mxArray *in, int **out);
00199 void mxArray2Cmat(const mxArray *in, double **out);
00201 void mxArray2Ccmat(const mxArray *in, double **out_real, double **out_imag);
00202 
00203 //--------------------------------------------------------
00204 // C -> mex
00205 //--------------------------------------------------------
00207 void Csvec2mxArray(short *in, mxArray *out);
00209 void Civec2mxArray(int *in, mxArray *out);
00211 void Cvec2mxArray(double *in, mxArray *out);
00213 void Ccvec2mxArray(double *in_real, double *in_imag, mxArray *out);
00214 
00216 void Csmat2mxArray(short **in, mxArray *out);
00218 void Cimat2mxArray(int **in, mxArray *out);
00220 void Cmat2mxArray(double **in, mxArray *out);
00222 void Ccmat2mxArray(double **in_real, double **in_imag, mxArray *out);
00223 
00225 
00226 //---------------------------------------------------------------
00227 bin mxArray2bin(const mxArray *in)
00228 {
00229   int size;
00230   double* temp = (double*) mxGetPr(in);
00231   if (temp==0) mexErrMsgTxt("mxArray2bin: Pointer to data is NULL");
00232   size = mxGetNumberOfElements(in);
00233   if (size!=1) mexErrMsgTxt("mxArray2bin: Size of data is not equal to one");
00234 
00235   return ( ( (*temp) > 0.0 ) ? bin(1) : bin(0) );
00236 }
00237 
00238 short mxArray2short(const mxArray *in)
00239 {
00240   int size;
00241   double* temp = (double*) mxGetPr(in);
00242   if (temp==0) mexErrMsgTxt("mxArray2short: Pointer to data is NULL");
00243   size = mxGetNumberOfElements(in);
00244   if (size!=1) mexErrMsgTxt("mxArray2short: Size of data is not equal to one");
00245 
00246   return (short) (*temp);
00247 }
00248 
00249 int mxArray2int(const mxArray *in)
00250 {
00251   int size;
00252   double* temp = (double*) mxGetPr(in);
00253   if (temp==0) mexErrMsgTxt("mxArray2int: Pointer to data is NULL");
00254   size = mxGetNumberOfElements(in);
00255   if (size!=1) mexErrMsgTxt("mxArray2int: Size of data is not equal to one");
00256 
00257   return (int) (*temp);
00258 }
00259 
00260 double mxArray2double(const mxArray *in)
00261 {
00262   int size;
00263   double* temp = (double*) mxGetPr(in);
00264   if (temp==0) mexErrMsgTxt("mxArray2double: Pointer to data is NULL");
00265   size = mxGetNumberOfElements(in);
00266   if (size!=1) mexErrMsgTxt("mxArray2double: Size of data is not equal to one");
00267 
00268   return (*temp);
00269 }
00270 
00271 double_complex mxArray2double_complex(const mxArray *in)
00272 {
00273   int size;
00274   double* tempR = (double*) mxGetPr(in);
00275   double* tempI = (double*) mxGetPi(in);
00276 
00277   if ((tempR==0)&&(tempI==0)) mexErrMsgTxt("mxArray2double_complex: Pointer to data is NULL");
00278 
00279   size = mxGetNumberOfElements(in);
00280   if (size!=1) mexErrMsgTxt("mxArray2double_complex: Size of data is not equal to one");
00281 
00282   if (tempR==0) {
00283     return double_complex( 0.0 , (*tempI) );
00284   } else if (tempI==0) {
00285     return double_complex( (*tempR), 0.0 );
00286   } else {
00287     return double_complex( (*tempR), (*tempI) );
00288   }
00289 
00290 }
00291 
00292 bvec mxArray2bvec(const mxArray *in)
00293 {
00294   bvec out;
00295   int i, size;
00296   double* temp = (double*) mxGetPr(in);
00297   if (temp==0) mexErrMsgTxt("mxArray2bvec: Pointer to data is NULL");
00298 
00299   size = mxGetNumberOfElements(in);
00300   if (size==0) mexErrMsgTxt("mxArray2bvec: Size of data is zero");
00301 
00302   out.set_size(size,false);
00303 
00304   for (i=0; i<size; i++) {
00305     out(i) = ( ((*temp++)>1e-5) ? bin(1) : bin(0) );
00306   }
00307 
00308   return out;
00309 
00310 }
00311 
00312 svec mxArray2svec(const mxArray *in)
00313 {
00314   svec out;
00315   int i, size;
00316   double* temp = (double*) mxGetPr(in);
00317   if (temp==0) mexErrMsgTxt("mxArray2svec: Pointer to data is NULL");
00318 
00319   size = mxGetNumberOfElements(in);
00320   if (size==0) mexErrMsgTxt("mxArray2svec: Size of data is zero");
00321 
00322   out.set_size(size,false);
00323 
00324   for (i=0; i<size; i++) {
00325     out(i) = (short) (*temp++);    
00326   }
00327 
00328   return out;
00329 
00330 }
00331 
00332 ivec mxArray2ivec(const mxArray *in)
00333 {
00334   ivec out;
00335   int i, size;
00336   double* temp = (double*) mxGetPr(in);
00337   if (temp==0) mexErrMsgTxt("mxArray2ivec: Pointer to data is NULL");
00338 
00339   size = mxGetNumberOfElements(in);
00340   if (size==0) mexErrMsgTxt("mxArray2ivec: Size of data is zero");
00341 
00342   out.set_size(size,false);
00343 
00344   for (i=0; i<size; i++) {
00345     out(i) = (int) (*temp++);    
00346   }
00347 
00348   return out;
00349 
00350 }
00351 
00352 vec mxArray2vec(const mxArray *in)
00353 {
00354   vec out;
00355   int i, size;
00356   double* temp = (double*) mxGetPr(in);
00357   if (temp==0) mexErrMsgTxt("mxArray2vec: Pointer to data is NULL");
00358 
00359   size = mxGetNumberOfElements(in);
00360   if (size==0) mexErrMsgTxt("mxArray2vec: Size of data is zero");
00361 
00362   out.set_size(size,false);
00363 
00364   for (i=0; i<size; i++) {
00365     out(i) = (*temp++);    
00366   }
00367 
00368   return out;
00369 
00370 }
00371 
00372 cvec mxArray2cvec(const mxArray *in)
00373 {
00374   cvec out;
00375   int i, size;
00376   double* tempR = (double*) mxGetPr(in);
00377   double* tempI = (double*) mxGetPi(in);
00378 
00379   if ((tempR==0)&&(tempI==0)) mexErrMsgTxt("mxArray2cvec: Pointer data is NULL");
00380 
00381   size = mxGetNumberOfElements(in);
00382   if (size==0) mexErrMsgTxt("mxArray2cvec: Size of data is zero");
00383 
00384   out.set_size(size,false);
00385 
00386   if (tempR==0) {
00387     for (i=0; i<size; i++) { out(i) = double_complex( 0.0, (*tempI++)); }
00388   } else if (tempI==0) {
00389     for (i=0; i<size; i++) { out(i) = double_complex((*tempR++), 0.0 ); }
00390   } else {
00391     for (i=0; i<size; i++) { out(i) = double_complex((*tempR++), (*tempI++)); }
00392   }
00393 
00394   return out;
00395 
00396 }
00397 
00398 bmat mxArray2bmat(const mxArray *in)
00399 {
00400   bmat out;
00401   int r, c, rows, cols;
00402   double* temp = (double*) mxGetPr(in);
00403   if (temp==0) mexErrMsgTxt("mxArray2bmat: Pointer to data is NULL");
00404 
00405   rows = mxGetM(in);
00406   if (rows==0) mexErrMsgTxt("mxArray2bmat: Data has zero rows");
00407   cols = mxGetN(in);
00408   if (cols==0) mexErrMsgTxt("mxArray2bmat: Data has zero columns");
00409 
00410   out.set_size(rows,cols,false);
00411 
00412   for (c=0; c<cols; c++) {
00413     for (r=0; r<rows; r++) {
00414       out(r,c) = ( ((*temp++) > 0.0) ? bin(1) : bin(0) );
00415     }
00416   }
00417 
00418   return out;
00419 
00420 }
00421 
00422 smat mxArray2smat(const mxArray *in)
00423 {
00424   smat out;
00425   int r, c, rows, cols;
00426   double* temp = (double*) mxGetPr(in);
00427   if (temp==0) mexErrMsgTxt("mxArray2smat: Pointer to data is NULL");
00428 
00429   rows = mxGetM(in);
00430   if (rows==0) mexErrMsgTxt("mxArray2smat: Data has zero rows");
00431   cols = mxGetN(in);
00432   if (cols==0) mexErrMsgTxt("mxArray2smat: Data has zero columns");
00433 
00434   out.set_size(rows,cols,false);
00435 
00436   for (c=0; c<cols; c++) {
00437     for (r=0; r<rows; r++) {
00438       out(r,c) = (short) (*temp++);    
00439     }
00440   }
00441 
00442   return out;
00443 
00444 }
00445 
00446 imat mxArray2imat(const mxArray *in)
00447 {
00448   imat out;
00449   int r, c, rows, cols;
00450   double* temp = (double*) mxGetPr(in);
00451   if (temp==0) mexErrMsgTxt("mxArray2imat: Pointer to data is NULL");
00452 
00453   rows = mxGetM(in);
00454   if (rows==0) mexErrMsgTxt("mxArray2imat: Data has zero rows");
00455   cols = mxGetN(in);
00456   if (cols==0) mexErrMsgTxt("mxArray2imat: Data has zero columns");
00457   out.set_size(rows,cols,false);
00458 
00459   for (c=0; c<cols; c++) {
00460     for (r=0; r<rows; r++) {
00461       out(r,c) = (int) (*temp++);    
00462     }
00463   }
00464 
00465   return out;
00466 
00467 }
00468 
00469 mat mxArray2mat(const mxArray *in)
00470 {
00471   mat out;
00472   int r, c, rows, cols;
00473   double* temp = (double*) mxGetPr(in);
00474   if (temp==0) mexErrMsgTxt("mxArray2mat: Pointer to data is NULL");
00475 
00476   rows = mxGetM(in);
00477   if (rows==0) mexErrMsgTxt("mxArray2mat: Data has zero rows");
00478   cols = mxGetN(in);
00479   if (cols==0) mexErrMsgTxt("mxArray2mat: Data has zero columns");
00480   out.set_size(rows,cols,false);
00481 
00482   for (c=0; c<cols; c++) {
00483     for (r=0; r<rows; r++) {
00484       out(r,c) = (*temp++);    
00485     }
00486   }
00487 
00488   return out;
00489 
00490 }
00491 
00492 cmat mxArray2cmat(const mxArray *in)
00493 {
00494   cmat out;
00495   int r, c, rows, cols;
00496   double* tempR = (double*) mxGetPr(in);
00497   double* tempI = (double*) mxGetPi(in);
00498 
00499   if ((tempR==0)&&(tempI==0)) mexErrMsgTxt("mxArray2cmat: Pointer to data is NULL");
00500 
00501   rows = mxGetM(in);
00502   if (rows==0) mexErrMsgTxt("mxArray2cmat: Data has zero rows");
00503   cols = mxGetN(in);
00504   if (cols==0) mexErrMsgTxt("mxArray2cmat: Data has zero columns");
00505   out.set_size(rows,cols,false);
00506 
00507   if (tempR==0) {
00508     for (c=0; c<cols; c++) { for (r=0; r<rows; r++) { out(r,c) = double_complex( 0.0 ,(*tempI++) ); } }
00509   } else if (tempI==0) {
00510     for (c=0; c<cols; c++) { for (r=0; r<rows; r++) { out(r,c) = double_complex( (*tempR++), 0.0 ); } }
00511   } else {
00512     for (c=0; c<cols; c++) { for (r=0; r<rows; r++) { out(r,c) = double_complex( (*tempR++),(*tempI++) ); } }
00513   }
00514 
00515   return out;
00516 
00517 }
00518 
00519 void bvec2mxArray(const bvec &in, mxArray *out)
00520 {
00521   double* temp = (double *) mxGetPr(out);
00522   if (temp==0) mexErrMsgTxt("bvec2mxArray: Pointer to data is NULL");
00523   if (in.size()==0) mexErrMsgTxt("bvec2mxArray: Size of data is zero");
00524   for(int i=0; i<in.size(); i++) {
00525     if(in(i))
00526       *temp++= 1.0;
00527     else
00528       *temp++= 0.0;
00529   }
00530 }
00531 
00532 void ivec2mxArray(const ivec &in, mxArray *out)
00533 {
00534   double* temp = (double *) mxGetPr(out);
00535   if (temp==0) mexErrMsgTxt("ivec2mxArray: Pointer to data is NULL");
00536   if (in.size()==0) mexErrMsgTxt("ivec2mxArray: Size of data is zero");
00537 
00538   for(int i=0; i<in.size(); i++) {
00539     *temp++= (double) in(i);
00540   }
00541 }
00542 
00543 void vec2mxArray(const vec &in, mxArray *out)
00544 {
00545   double* temp = (double *) mxGetPr(out);
00546   if (temp==0) mexErrMsgTxt("vec2mxArray: Pointer to data is NULL");
00547   if (in.size()==0) mexErrMsgTxt("vec2mxArray: Size of data is zero");
00548 
00549   for(int i=0; i<in.size(); i++) {
00550     *temp++= (double) in(i);
00551   }
00552 }
00553 
00554 void cvec2mxArray(const cvec &in, mxArray *out)
00555 {
00556   double* tempR = (double *) mxGetPr(out);
00557   double* tempI = (double *) mxGetPi(out);
00558   if (tempR==0) mexErrMsgTxt("cvec2mxArray: Pointer to real valued part is NULL");
00559   if (tempI==0) mexErrMsgTxt("cvec2mxArray: Pointer to imaginary valued part is NULL");
00560   if (in.size()==0) mexErrMsgTxt("cvec2mxArray: Size of data is zero");
00561 
00562   for(int i=0; i<in.size(); i++) {
00563     *tempR++= (double) in(i).real();
00564     *tempI++= (double) in(i).imag();
00565   }
00566 }
00567 
00568 void bmat2mxArray(const bmat &in, mxArray *out)
00569 {
00570   int rows, cols, r, c;
00571 
00572   double* temp = (double *) mxGetPr(out);
00573   if (temp==0) mexErrMsgTxt("bmat2mxArray: Pointer to data is NULL");
00574 
00575   rows = in.rows();
00576   cols = in.cols();
00577   if (rows==0) mexErrMsgTxt("bmat2mxArray: Data has zero rows");
00578   if (cols==0) mexErrMsgTxt("bmat2mxArray: Data has zero columns");
00579 
00580   for(c=0; c<cols; c++) {
00581     for(r=0; r<rows; r++) {
00582       if(in(r,c))
00583         *temp++= 1.0;
00584       else
00585         *temp++= 0.0;    
00586     }
00587   }
00588 
00589 }
00590 
00591 void smat2mxArray(const smat &in, mxArray *out)
00592 {
00593   int rows, cols, r, c;
00594 
00595   double* temp = (double *) mxGetPr(out);
00596   if (temp==0) mexErrMsgTxt("smat2mxArray: Pointer to data is NULL");
00597 
00598   rows = in.rows();
00599   cols = in.cols();
00600   if (rows==0) mexErrMsgTxt("smat2mxArray: Data has zero rows");
00601   if (cols==0) mexErrMsgTxt("smat2mxArray: Data has zero columns");
00602 
00603   for(c=0; c<cols; c++) {
00604     for(r=0; r<rows; r++) {
00605       *temp++= (double) in(r,c);
00606     }
00607   }
00608 
00609 }
00610 
00611 void imat2mxArray(const imat &in, mxArray *out)
00612 {
00613   int rows, cols, r, c;
00614 
00615   double* temp = (double *) mxGetPr(out);
00616   if (temp==0) mexErrMsgTxt("imat2mxArray: Pointer to data is NULL");
00617 
00618   rows = in.rows();
00619   cols = in.cols();
00620   if (rows==0) mexErrMsgTxt("imat2mxArray: Data has zero rows");
00621   if (cols==0) mexErrMsgTxt("imat2mxArray: Data has zero columns");
00622 
00623   for(c=0; c<cols; c++) {
00624     for(r=0; r<rows; r++) {
00625       *temp++= (double) in(r,c);
00626     }
00627   }
00628 
00629 }
00630 
00631 void mat2mxArray(const mat &in, mxArray *out)
00632 {
00633   int rows, cols, r, c;
00634 
00635   double* temp = (double *) mxGetPr(out);
00636   if (temp==0) mexErrMsgTxt("mat2mxArray: Pointer to data is NULL");
00637 
00638   rows = in.rows();
00639   cols = in.cols();
00640   if (rows==0) mexErrMsgTxt("mat2mxArray: Data has zero rows");
00641   if (cols==0) mexErrMsgTxt("mat2mxArray: Data has zero columns");
00642 
00643   for(c=0; c<cols; c++) {
00644     for(r=0; r<rows; r++) {
00645       *temp++= in(r,c);
00646     }
00647   }
00648 
00649 }
00650 
00651 void cmat2mxArray(const cmat &in, mxArray *out)
00652 {
00653   int rows, cols, r, c;
00654 
00655   double* tempR = (double *) mxGetPr(out);
00656   double* tempI = (double *) mxGetPi(out);
00657   if (tempR==0) mexErrMsgTxt("cvec2mxArray: Pointer to real valued part is NULL");
00658   if (tempI==0) mexErrMsgTxt("cvec2mxArray: Pointer to imaginary valued part is NULL");
00659 
00660   rows = in.rows();
00661   cols = in.cols();
00662   if (rows==0) mexErrMsgTxt("cvec2mxArray: Data has zero rows");
00663   if (cols==0) mexErrMsgTxt("cvec2mxArray: Data has zero columns");
00664 
00665   for(c=0; c<cols; c++) {
00666     for(r=0; r<rows; r++) {
00667       *tempR++= (double) in(r,c).real();
00668       *tempI++= (double) in(r,c).imag();
00669     }
00670   }
00671 
00672 }
00673 
00674 void mxArray2Csvec(const mxArray *in, short *out)
00675 {
00676   double* temp = (double*) mxGetPr(in);
00677   if (temp==0) mexErrMsgTxt("mxArray2Csvec: Pointer to data is NULL");
00678   int size = mxGetNumberOfElements(in);
00679   if (size==0) mexErrMsgTxt("mxArray2Csvec: Size of data is zero");
00680   for (int i=0; i<size; i++) { out[i] = (short) (*temp++); }
00681 }
00682 
00683 void mxArray2Civec(const mxArray *in, int *out)
00684 {
00685   double* temp = (double*) mxGetPr(in);
00686   if (temp==0) mexErrMsgTxt("mxArray2Civec: Pointer to data is NULL");
00687   int size = mxGetNumberOfElements(in);
00688   if (size==0) mexErrMsgTxt("mxArray2Civec: Size of data is zero");
00689   for (int i=0; i<size; i++) { out[i] = (int) (*temp++); }
00690 }
00691 
00692 void mxArray2Cvec(const mxArray *in, double *out)
00693 {
00694   double* temp = (double*) mxGetPr(in);
00695   if (temp==0) mexErrMsgTxt("mxArray2Cvec: Pointer to data is NULL");
00696   int size = mxGetNumberOfElements(in);
00697   if (size==0) mexErrMsgTxt("mxArray2Cvec: Size of data is zero");
00698   for (int i=0; i<size; i++) { out[i] = (*temp++); }
00699 }
00700 
00701 void mxArray2Ccvec(const mxArray *in, double *out_real, double *out_imag)
00702 {
00703   double* tempR = (double*) mxGetPr(in);
00704   double* tempI = (double*) mxGetPi(in);
00705   if (tempR==0) mexErrMsgTxt("mxArray2Ccvec: Pointer to real valued part is NULL");
00706   if (tempI==0) mexErrMsgTxt("mxArray2Ccvec: Pointer to imaginary valued part is NULL");
00707   int size = mxGetNumberOfElements(in);
00708   if (size==0) mexErrMsgTxt("mxArray2Ccvec: Size of data is zero");
00709   for (int i=0; i<size; i++) { out_real[i] = (*tempR++); out_imag[i] = (*tempI++); }
00710 }
00711 
00712 void mxArray2Csmat(const mxArray *in, short **out)
00713 {
00714   int r, c;
00715   double* temp = (double*) mxGetPr(in);
00716   if (temp==0) mexErrMsgTxt("mxArray2Csmat: Pointer to data is NULL");
00717   int rows = mxGetM(in);
00718   if (rows==0) mexErrMsgTxt("mxArray2Csmat: Data has zero rows");
00719   int cols = mxGetN(in);
00720   if (cols==0) mexErrMsgTxt("mxArray2Csmat: Data has zero columns");
00721   for (c=0; c<cols; c++) {
00722     for (r=0; r<rows; r++) {
00723       out[r][c] = (short) (*temp++);    
00724     }
00725   }
00726 }
00727 
00728 void mxArray2Cimat(const mxArray *in, int **out)
00729 {
00730   int r, c;
00731   double* temp = (double*) mxGetPr(in);
00732   if (temp==0) mexErrMsgTxt("mxArray2Cimat: Pointer to data is NULL");
00733   int rows = mxGetM(in);
00734   if (rows==0) mexErrMsgTxt("mxArray2Cimat: Data has zero rows");
00735   int cols = mxGetN(in);
00736   if (cols==0) mexErrMsgTxt("mxArray2Cimat: Data has zero columns");
00737   for (c=0; c<cols; c++) {
00738     for (r=0; r<rows; r++) {
00739       out[r][c] = (int) (*temp++);    
00740     }
00741   }
00742 }
00743 
00744 void mxArray2Cmat(const mxArray *in, double **out)
00745 {
00746   int r, c;
00747   double* temp = (double*) mxGetPr(in);
00748   if (temp==0) mexErrMsgTxt("mxArray2Cmat: Pointer to data is NULL");
00749   int rows = mxGetM(in);
00750   if (rows==0) mexErrMsgTxt("mxArray2Cmat: Data has zero rows");
00751   int cols = mxGetN(in);
00752   if (cols==0) mexErrMsgTxt("mxArray2Cmat: Data has zero columns");
00753   for (c=0; c<cols; c++) {
00754     for (r=0; r<rows; r++) {
00755       out[r][c] = (*temp++);    
00756     }
00757   }
00758 }
00759 
00760 void mxArray2Ccmat(const mxArray *in, double **out_real, double **out_imag)
00761 {
00762   int r, c;
00763   double* tempR = (double*) mxGetPr(in);
00764   double* tempI = (double*) mxGetPi(in);
00765   if (tempR==0) mexErrMsgTxt("mxArray2Cmat: Pointer to real valued part is NULL");
00766   if (tempI==0) mexErrMsgTxt("mxArray2Cmat: Pointer to imaginary valued part is NULL");
00767   int rows = mxGetM(in);
00768   if (rows==0) mexErrMsgTxt("mxArray2Cmat: Data has zero rows");
00769   int cols = mxGetN(in);
00770   if (cols==0) mexErrMsgTxt("mxArray2Cmat: Data has zero columns");
00771   for (c=0; c<cols; c++) {
00772     for (r=0; r<rows; r++) {
00773       out_real[r][c] = (*tempR++);    
00774       out_imag[r][c] = (*tempI++);    
00775     }
00776   }
00777 }
00778 
00779 void Csvec2mxArray(short *in, mxArray *out)
00780 {
00781   double* temp = (double *) mxGetPr(out);
00782   if (temp==0) mexErrMsgTxt("Csvec2mxArray: Pointer to data is NULL");
00783   int size = mxGetNumberOfElements(out);
00784   if (size==0) mexErrMsgTxt("Csvec2mxArray: Size of data is zero");
00785   for(int i=0; i<size; i++) { *temp++= (double) in[i]; }
00786 }
00787 
00788 void Civec2mxArray(int *in, mxArray *out)
00789 {
00790   double* temp = (double *) mxGetPr(out);
00791   if (temp==0) mexErrMsgTxt("Civec2mxArray: Pointer to data is NULL");
00792   int size = mxGetNumberOfElements(out);
00793   if (size==0) mexErrMsgTxt("Civec2mxArray: Size of data is zero");
00794   for(int i=0; i<size; i++) { *temp++= (double) in[i]; }
00795 }
00796 
00797 void Cvec2mxArray(double *in, mxArray *out)
00798 {
00799   double* temp = (double *) mxGetPr(out);
00800   if (temp==0) mexErrMsgTxt("Cvec2mxArray: Pointer to data is NULL");
00801   int size = mxGetNumberOfElements(out);
00802   if (size==0) mexErrMsgTxt("Cvec2mxArray: Size of data is zero");
00803   for(int i=0; i<size; i++) { *temp++= in[i]; }
00804 }
00805 
00806 void Ccvec2mxArray(double *in_real, double *in_imag, mxArray *out)
00807 {
00808   double* tempR = (double *) mxGetPr(out);
00809   double* tempI = (double *) mxGetPi(out);
00810   if (tempR==0) mexErrMsgTxt("Ccvec2mxArray: Pointer to real valued part is NULL");
00811   if (tempI==0) mexErrMsgTxt("Ccvec2mxArray: Pointer to imaginary valued part is NULL");
00812   int size = mxGetNumberOfElements(out);
00813   if (size==0) mexErrMsgTxt("Ccvec2mxArray: Size of data is zero");
00814   for(int i=0; i<size; i++) { *tempR++= in_real[i]; *tempI++= in_imag[i]; }
00815 }
00816 
00817 void Csmat2mxArray(short **in, mxArray *out)
00818 {
00819   int r, c;
00820   double* temp = (double *) mxGetPr(out);
00821   if (temp==0) mexErrMsgTxt("Csmat2mxArray: Pointer to data is NULL");
00822   int rows = mxGetM(out);
00823   if (rows==0) mexErrMsgTxt("Csmat2mxArray: Data has zero rows");
00824   int cols = mxGetN(out);
00825   if (cols==0) mexErrMsgTxt("Csmat2mxArray: Data has zero columns");
00826   for(c=0; c<cols; c++) {
00827     for(r=0; r<rows; r++) {
00828       *temp++= (short) in[r][c];
00829     }
00830   }
00831 }
00832 
00833 void Cimat2mxArray(int **in, mxArray *out)
00834 {
00835   int r, c;
00836   double* temp = (double *) mxGetPr(out);
00837   if (temp==0) mexErrMsgTxt("Cimat2mxArray: Pointer to data is NULL");
00838   int rows = mxGetM(out);
00839   if (rows==0) mexErrMsgTxt("Cimat2mxArray: Data has zero rows");
00840   int cols = mxGetN(out);
00841   if (cols==0) mexErrMsgTxt("Cimat2mxArray: Data has zero columns");
00842   for(c=0; c<cols; c++) {
00843     for(r=0; r<rows; r++) {
00844       *temp++= (int) in[r][c];
00845     }
00846   }
00847 }
00848 
00849 void Cmat2mxArray(double **in, mxArray *out)
00850 {
00851   int r, c;
00852   double* temp = (double *) mxGetPr(out);
00853   if (temp==0) mexErrMsgTxt("Cmat2mxArray: Pointer to data is NULL");
00854   int rows = mxGetM(out);
00855   if (rows==0) mexErrMsgTxt("Cmat2mxArray: Data has zero rows");
00856   int cols = mxGetN(out);
00857   if (cols==0) mexErrMsgTxt("Cmat2mxArray: Data has zero columns");
00858   for(c=0; c<cols; c++) {
00859     for(r=0; r<rows; r++) {
00860       *temp++= in[r][c];
00861     }
00862   }
00863 }
00864 
00865 void Ccmat2mxArray(double **in_real, double **in_imag, mxArray *out)
00866 {
00867   int r, c;
00868   double* tempR = (double *) mxGetPr(out);
00869   double* tempI = (double *) mxGetPi(out);
00870   if (tempR==0) mexErrMsgTxt("Ccmat2mxArray: Pointer to real valued part is NULL");
00871   if (tempI==0) mexErrMsgTxt("Ccmat2mxArray: Pointer to imaginary valued part is NULL");
00872   int rows = mxGetM(out);
00873   if (rows==0) mexErrMsgTxt("Ccmat2mxArray: Data has zero rows");
00874   int cols = mxGetN(out);
00875   if (cols==0) mexErrMsgTxt("Ccmat2mxArray: Data has zero columns");
00876   for(c=0; c<cols; c++) {
00877     for(r=0; r<rows; r++) {
00878       *tempR++= in_real[r][c];
00879       *tempI++= in_imag[r][c];
00880     }
00881   }
00882 }
00883 
00884 #endif //__itmex_h

Generated on Fri Sep 16 11:02:30 2005 for spuc by  doxygen 1.4.4