Mercurial > forge
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 |