00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
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
00039
00040 #endif
00041
00042 #ifdef ARRAY_ACCESS_INLINING
00043 #define INLINE " (inlined)"
00044 #else
00045 #define INLINE
00046 #endif
00047
00048 static const char *version = VERSION INLINE;
00049
00050 #ifdef __cplusplus
00051 extern "C" {
00052 #endif
00053
00054 const char *mexVersion () {
00055
00056 return version;
00057 }
00058
00059 #endif //DOXYGEN_SHOULD_SKIP_THIS
00060
00061 #ifdef __cplusplus
00062 }
00063 #endif
00064
00065
00066
00067
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
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
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
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
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
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