comparison extra/NaN/src/histo_mex.cpp @ 12685:f26b1170ea90 octave-forge

resulting values should be really converted to output data type
author schloegl
date Sat, 12 Sep 2015 07:15:01 +0000
parents 218b5b97d888
children 13815b367946
comparison
equal deleted inserted replaced
12684:29631e455f62 12685:f26b1170ea90
159 f2 = ((uint8_t*)Sort.Table)[ix2]; 159 f2 = ((uint8_t*)Sort.Table)[ix2];
160 if (f1<f2) z = -1; 160 if (f1<f2) z = -1;
161 else if (f1>f2) z = 1; 161 else if (f1>f2) z = 1;
162 break; 162 break;
163 } 163 }
164 default:
165 mexErrMsgTxt("unsupported input type");
164 } 166 }
165 i++; 167 i++;
166 ix1 += Sort.Stride; 168 ix1 += Sort.Stride;
167 ix2 += Sort.Stride; 169 ix2 += Sort.Stride;
168 } 170 }
232 234
233 if (ND>2) 235 if (ND>2)
234 mexErrMsgTxt("Error HISTO.MEX: input must be vector or matrix (no more than two dimensions)"); 236 mexErrMsgTxt("Error HISTO.MEX: input must be vector or matrix (no more than two dimensions)");
235 237
236 size_t n = SZ[0]; 238 size_t n = SZ[0];
237 size_t sz = 1;
238 char flag = 0;
239 239
240 const char *fnames[] = {"datatype","X","H"}; 240 const char *fnames[] = {"datatype","X","H"};
241 mxArray *HIS = mxCreateStructMatrix(1, 1, 3, fnames); 241 mxArray *HIS = mxCreateStructMatrix(1, 1, 3, fnames);
242 mxSetField(HIS,0,"datatype",mxCreateString("HISTOGRAM")); 242 mxSetField(HIS,0,"datatype",mxCreateString("HISTOGRAM"));
243 243
333 mxSetField(HIS,0,"X",X); 333 mxSetField(HIS,0,"X",X);
334 334
335 int8_t *x; 335 int8_t *x;
336 x = (int8_t*)mxGetData(X); 336 x = (int8_t*)mxGetData(X);
337 for (k=0; k<0x0100; k++) 337 for (k=0; k<0x0100; k++)
338 x[k]=k-128; 338 x[k]=(int8_t)(k-128);
339 339
340 x = (int8_t*)mxGetData(PInputs[0]); 340 x = (int8_t*)mxGetData(PInputs[0]);
341 double *h = (double*)mxGetData(H); 341 double *h = (double*)mxGetData(H);
342 for (k=0; k<SZ[0]*SZ[1]; k++) 342 for (k=0; k<SZ[0]*SZ[1]; k++)
343 h[x[k]+128+(k/SZ[0]<<8)] += (w!=NULL ? w[k%SZ[0]] : 1.0); 343 h[x[k]+128+(k/SZ[0]<<8)] += (w!=NULL ? w[k%SZ[0]] : 1.0);
351 mxArray *X = mxCreateNumericMatrix(256, 1, mxUINT8_CLASS,mxREAL); 351 mxArray *X = mxCreateNumericMatrix(256, 1, mxUINT8_CLASS,mxREAL);
352 mxSetField(HIS,0,"H",H); 352 mxSetField(HIS,0,"H",H);
353 mxSetField(HIS,0,"X",X); 353 mxSetField(HIS,0,"X",X);
354 354
355 uint8_t *x = (uint8_t*)mxGetData(X); 355 uint8_t *x = (uint8_t*)mxGetData(X);
356 for (k=0; k<0x0100; k++) x[k]=k; 356 for (k=0; k<0x0100; k++) x[k]=(uint8_t)k;
357 357
358 x = (uint8_t*)mxGetData(PInputs[0]); 358 x = (uint8_t*)mxGetData(PInputs[0]);
359 double *h = (double*)mxGetData(H); 359 double *h = (double*)mxGetData(H);
360 for (k=0; k<SZ[0]*SZ[1]; k++) 360 for (k=0; k<SZ[0]*SZ[1]; k++)
361 h[x[k]+(k/SZ[0]<<8)] += (w!=NULL ? w[k%SZ[0]] : 1.0); 361 h[x[k]+(k/SZ[0]<<8)] += (w!=NULL ? w[k%SZ[0]] : 1.0);
371 mxSetField(HIS,0,"X",X); 371 mxSetField(HIS,0,"X",X);
372 372
373 double *h = (double*)mxGetData(H); 373 double *h = (double*)mxGetData(H);
374 int16_t *x = (int16_t*)mxGetData(X); 374 int16_t *x = (int16_t*)mxGetData(X);
375 for (k=0; k<0x10000; k++) 375 for (k=0; k<0x10000; k++)
376 x[k]=k-0x8000; 376 x[k]=(int16_t)(k-0x8000);
377 377
378 x = (int16_t*)mxGetData(PInputs[0]); 378 x = (int16_t*)mxGetData(PInputs[0]);
379 for (k=0; k<SZ[0]*SZ[1]; k++) 379 for (k=0; k<SZ[0]*SZ[1]; k++)
380 h[x[k]+0x8000+(k/SZ[0]<<16)] += (w!=NULL ? w[k%SZ[0]] : 1.0); 380 h[x[k]+0x8000+(k/SZ[0]<<16)] += (w!=NULL ? w[k%SZ[0]] : 1.0);
381 381
390 mxSetField(HIS,0,"X",X); 390 mxSetField(HIS,0,"X",X);
391 391
392 double *h = (double*)mxGetData(H); 392 double *h = (double*)mxGetData(H);
393 int16_t *x = (int16_t*)mxGetData(X); 393 int16_t *x = (int16_t*)mxGetData(X);
394 for (k=0; k<0x10000; k++) 394 for (k=0; k<0x10000; k++)
395 x[k]=k-0x8000; 395 x[k]=(uint16_t)(k-0x8000);
396 396
397 uint16_t *x16 = (uint16_t*)mxGetData(PInputs[0]); 397 uint16_t *x16 = (uint16_t*)mxGetData(PInputs[0]);
398 for (k=0; k<SZ[0]*SZ[1]; k++) 398 for (k=0; k<SZ[0]*SZ[1]; k++)
399 h[x16[k]+(k/SZ[0]<<16)] += (w!=NULL ? w[k%SZ[0]] : 1.0); 399 h[x16[k]+(k/SZ[0]<<16)] += (w!=NULL ? w[k%SZ[0]] : 1.0);
400 done = 1; 400 done = 1;
408 mxArray *H = mxCreateNumericMatrix(0x10000, SZ[1], mxDOUBLE_CLASS,mxREAL); 408 mxArray *H = mxCreateNumericMatrix(0x10000, SZ[1], mxDOUBLE_CLASS,mxREAL);
409 mxArray *X = mxCreateNumericMatrix(0x10000, SZ[1], mxGetClassID(PInputs[0]),mxREAL); 409 mxArray *X = mxCreateNumericMatrix(0x10000, SZ[1], mxGetClassID(PInputs[0]),mxREAL);
410 mxSetField(HIS,0,"H",H); 410 mxSetField(HIS,0,"H",H);
411 mxSetField(HIS,0,"X",X); 411 mxSetField(HIS,0,"X",X);
412 412
413 /*
413 double *h = (double*)mxGetData(H); 414 double *h = (double*)mxGetData(H);
414 int16_t *x = (int16_t*)mxGetData(X); 415 int16_t *x = (int16_t*)mxGetData(X);
415 416
416 for (n=0; n<SZ[1]; n++) { 417 for (n=0; n<SZ[1]; n++) {
417 } 418 }
418 419 */
419 } 420 }
420 } // end switch 421 } // end switch
421 } 422 }
422 423
423 424