comparison extra/NaN/src/xptopen.cpp @ 12694:49e9ace39874 octave-forge

use of typeof() for autotyping
author schloegl
date Sat, 12 Sep 2015 19:21:36 +0000
parents 13815b367946
children 29b7963bf748
comparison
equal deleted inserted replaced
12693:c76411f5c22e 12694:49e9ace39874
508 char *f = (char*)malloc(bi[NS]+1); 508 char *f = (char*)malloc(bi[NS]+1);
509 for (size_t k = 0; k < NS; k++) { 509 for (size_t k = 0; k < NS; k++) {
510 switch (typlist[k]) { 510 switch (typlist[k]) {
511 case 0xfb: 511 case 0xfb:
512 R[k] = mxCreateDoubleMatrix(M, 1, mxREAL); 512 R[k] = mxCreateDoubleMatrix(M, 1, mxREAL);
513 for (size_t m = 0; m < M; m++) { 513 for (typeof(M) m = 0; m < M; m++) {
514 int8_t d = *(int8_t*)(data+bi[k]+m*bi[NS]); 514 int8_t d = *(int8_t*)(data+bi[k]+m*bi[NS]);
515 ((double*)mxGetData(R[k]))[m] = (d>100) ? NaN : d; 515 ((double*)mxGetData(R[k]))[m] = (d>100) ? NaN : d;
516 } 516 }
517 break; 517 break;
518 case 0xfc: 518 case 0xfc:
519 R[k] = mxCreateDoubleMatrix(M, 1, mxREAL); 519 R[k] = mxCreateDoubleMatrix(M, 1, mxREAL);
520 if (flagSWAP) for (size_t m = 0; m < M; m++) { 520 if (flagSWAP) for (size_t m = 0; m < M; m++) {
521 int16_t d = (int16_t) bswap_16(*(uint16_t*)(data+bi[k]+m*bi[NS])); 521 int16_t d = (int16_t) bswap_16(*(uint16_t*)(data+bi[k]+m*bi[NS]));
522 ((double*)mxGetData(R[k]))[m] = (d>32740) ? NaN : d; 522 ((double*)mxGetData(R[k]))[m] = (d>32740) ? NaN : d;
523 } 523 }
524 else for (size_t m = 0; m < M; m++) { 524 else for (typeof(M) m = 0; m < M; m++) {
525 int16_t d = *(int16_t*)(data+bi[k]+m*bi[NS]); 525 int16_t d = *(int16_t*)(data+bi[k]+m*bi[NS]);
526 ((double*)mxGetData(R[k]))[m] = (d>32740) ? NaN : d; 526 ((double*)mxGetData(R[k]))[m] = (d>32740) ? NaN : d;
527 } 527 }
528 break; 528 break;
529 case 0xfd: 529 case 0xfd:
530 R[k] = mxCreateDoubleMatrix(M, 1, mxREAL); 530 R[k] = mxCreateDoubleMatrix(M, 1, mxREAL);
531 if (flagSWAP) for (size_t m = 0; m < M; m++) { 531 if (flagSWAP) for (size_t m = 0; m < M; m++) {
532 int32_t d = (int32_t)bswap_32(*(uint32_t*)(data+bi[k]+m*bi[NS])); 532 int32_t d = (int32_t)bswap_32(*(uint32_t*)(data+bi[k]+m*bi[NS]));
533 ((double*)mxGetData(R[k]))[m] = (d>2147483620) ? NaN : d; 533 ((double*)mxGetData(R[k]))[m] = (d>2147483620) ? NaN : d;
534 } 534 }
535 else for (size_t m = 0; m < M; m++) { 535 else for (typeof(M) m = 0; m < M; m++) {
536 int32_t d = *(int32_t*)(data+bi[k]+m*bi[NS]); 536 int32_t d = *(int32_t*)(data+bi[k]+m*bi[NS]);
537 ((double*)mxGetData(R[k]))[m] = (d>2147483620) ? NaN : d; 537 ((double*)mxGetData(R[k]))[m] = (d>2147483620) ? NaN : d;
538 } 538 }
539 break; 539 break;
540 case 0xfe: 540 case 0xfe:
546 ((uint32_t*)mxGetData(R[k]))[m] = *(uint32_t*)(data+bi[k]+m*bi[NS]); 546 ((uint32_t*)mxGetData(R[k]))[m] = *(uint32_t*)(data+bi[k]+m*bi[NS]);
547 } 547 }
548 break; 548 break;
549 case 0xff: 549 case 0xff:
550 R[k] = mxCreateDoubleMatrix(M, 1, mxREAL); 550 R[k] = mxCreateDoubleMatrix(M, 1, mxREAL);
551 if (flagSWAP) for (size_t m = 0; m < M; m++) { 551 if (flagSWAP) for (typeof(M) m = 0; m < M; m++) {
552 ((uint64_t*)mxGetData(R[k]))[m] = bswap_64(*(uint64_t*)(data+bi[k]+m*bi[NS])); 552 ((uint64_t*)mxGetData(R[k]))[m] = bswap_64(*(uint64_t*)(data+bi[k]+m*bi[NS]));
553 } 553 }
554 else for (size_t m = 0; m < M; m++) { 554 else for (typeof(M) m = 0; m < M; m++) {
555 ((uint64_t*)mxGetData(R[k]))[m] = *(uint64_t*)(data+bi[k]+m*bi[NS]); 555 ((uint64_t*)mxGetData(R[k]))[m] = *(uint64_t*)(data+bi[k]+m*bi[NS]);
556 } 556 }
557 break; 557 break;
558 default: 558 default:
559 R[k] = mxCreateCellMatrix(M, 1); 559 R[k] = mxCreateCellMatrix(M, 1);
560 size_t sz = typlist[k]; 560 size_t sz = typlist[k];
561 for (size_t m = 0; m < M; m++) { 561 for (typeof(M) m = 0; m < M; m++) {
562 memcpy(f, data+bi[k]+m*bi[NS], sz); 562 memcpy(f, data+bi[k]+m*bi[NS], sz);
563 f[sz] = 0; 563 f[sz] = 0;
564 mxSetCell(R[k], m, mxCreateString(f)); 564 mxSetCell(R[k], m, mxCreateString(f));
565 } 565 }
566 } 566 }