Changeset 41341 for trunk/Ohana/src/libfits/table/F_set_column.c
- Timestamp:
- Apr 16, 2020, 2:04:27 PM (6 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/libfits/table/F_set_column.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/libfits/table/F_set_column.c
r41340 r41341 253 253 /***********************/ 254 254 // convert the input data array (of the specified intype) to the desired table data type. swap unless nativeOrder is requested 255 int gfits_set_bintable_column_reformat (Header *header, FTable *table, char *label, char *intype, void *data, off_t Nrow, char nativeOrder) {255 int gfits_set_bintable_column_reformat (Header *header, FTable *table, char *label, char *intype, void *data, off_t Nrow, int element, char nativeOrder) { 256 256 257 257 off_t Nx, Ny; … … 288 288 289 289 if (!gfits_bintable_format (format, outtype, &Nval, &NbytesOut)) return (FALSE); 290 if (element >= Nval) { 291 fprintf (stderr, "programming error: element >= Nval for field %s, format %s\n", label, format); 292 return FALSE; 293 } 290 294 291 295 /* check existing table dimensions */ … … 307 311 } 308 312 313 // NOTE: we are inserting a single column into the output 314 // table. If the output field is multi-value, the resulting 315 // array is inserted into the appropriate bytes in that output field 316 309 317 /* make duplicate of data with correct type 310 318 byte swap and Bzero/Bscale */ 311 ALLOCATE (array, char, NbytesOut*N val*Nrow);319 ALLOCATE (array, char, NbytesOut*Nrow); 312 320 Pin = data; 313 Pout = array; 321 Pout = array; // 314 322 315 323 // # define ASSIGN_DATA(ITYPE,INAME,ISIZE,OTYPE,ONAME) … … 321 329 if (!strcmp (outtype, OUTNAME) && !strcmp (intype, INNAME)) { \ 322 330 int NbytesIn = NBYTES_IN; \ 323 for (i = 0; i < N val*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) { \331 for (i = 0; i < Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) { \ 324 332 if (directCopy) { \ 325 333 *(OUTTYPE *)Pout = *(INTYPE *)Pin; \ … … 385 393 SET_VALUES("double", double, "double", double, SWAP_DBLE, 8); 386 394 387 # if (0)388 /** input == char **/389 if (!strcmp (outtype, "char") && !strcmp (intype, "char")) {390 int NbytesIn = 1;391 for (i = 0; i < Nval*Nrow; i++, Pin+=NbytesIn, Pout+=NbytesOut) {392 if (directCopy) { *(char *)Pout = *(char *)Pin; } else {393 *(char *)Pout = (*(char *)Pin - Bzero) / Bscale;394 }395 }396 }397 if (!strcmp (outtype, "byte") && !strcmp (intype, "char")) {398 int NbytesIn = 1;399 for (i = 0; i < Nval*Nrow; i++, Pin+=NbytesIn, Pout+=NbytesOut) {400 if (directCopy) { *(char *)Pout = *(char *)Pin; } else {401 *(char *)Pout = (*(char *)Pin - Bzero) / Bscale;402 }403 }404 }405 if (!strcmp (outtype, "short") && !strcmp (intype, "char")) {406 int NbytesIn = 1;407 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {408 if (directCopy) { *(short *)Pout = *(char *)Pin; } else {409 *(short *)Pout = (*(char *)Pin - Bzero) / Bscale;410 }411 # ifdef BYTE_SWAP412 if (!nativeOrder) { SWAP_BYTE; }413 # endif414 }415 }416 if (!strcmp (outtype, "int") && !strcmp (intype, "char")) {417 int NbytesIn = 1;418 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {419 *(int *)Pout = (*(char *)Pin - Bzero) / Bscale;420 # ifdef BYTE_SWAP421 if (!nativeOrder) { SWAP_WORD; }422 # endif423 }424 }425 if (!strcmp (outtype, "int64_t") && !strcmp (intype, "char")) {426 int NbytesIn = 1;427 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {428 *(int64_t *)Pout = (*(char *)Pin - Bzero) / Bscale;429 # ifdef BYTE_SWAP430 if (!nativeOrder) { SWAP_DBLE; }431 # endif432 }433 }434 if (!strcmp (outtype, "float") && !strcmp (intype, "char")) {435 int NbytesIn = 1;436 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {437 *(float *)Pout = (*(char *)Pin - Bzero) / Bscale;438 # ifdef BYTE_SWAP439 if (!nativeOrder) { SWAP_WORD; }440 # endif441 }442 }443 if (!strcmp (outtype, "double") && !strcmp (intype, "char")) {444 int NbytesIn = 1;445 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {446 *(double *)Pout = (*(char *)Pin - Bzero) / Bscale;447 # ifdef BYTE_SWAP448 if (!nativeOrder) { SWAP_DBLE; }449 # endif450 }451 }452 453 /** input == byte **/454 if (!strcmp (outtype, "char") && !strcmp (intype, "byte")) {455 int NbytesIn = 1;456 for (i = 0; i < Nval*Nrow; i++, Pin+=NbytesIn, Pout+=NbytesOut) {457 *(char *)Pout = (*(char *)Pin - Bzero) / Bscale;458 }459 }460 if (!strcmp (outtype, "byte") && !strcmp (intype, "byte")) {461 int NbytesIn = 1;462 for (i = 0; i < Nval*Nrow; i++, Pin+=NbytesIn, Pout+=NbytesOut) {463 *(char *)Pout = (*(char *)Pin - Bzero) / Bscale;464 }465 }466 if (!strcmp (outtype, "short") && !strcmp (intype, "byte")) {467 int NbytesIn = 1;468 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {469 *(short *)Pout = (*(char *)Pin - Bzero) / Bscale;470 # ifdef BYTE_SWAP471 if (!nativeOrder) { SWAP_BYTE; }472 # endif473 }474 }475 if (!strcmp (outtype, "int") && !strcmp (intype, "byte")) {476 int NbytesIn = 1;477 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {478 *(int *)Pout = (*(char *)Pin - Bzero) / Bscale;479 # ifdef BYTE_SWAP480 if (!nativeOrder) { SWAP_WORD; }481 # endif482 }483 }484 if (!strcmp (outtype, "int64_t") && !strcmp (intype, "byte")) {485 int NbytesIn = 1;486 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {487 *(int64_t *)Pout = (*(char *)Pin - Bzero) / Bscale;488 # ifdef BYTE_SWAP489 if (!nativeOrder) { SWAP_DBLE; }490 # endif491 }492 }493 if (!strcmp (outtype, "float") && !strcmp (intype, "byte")) {494 int NbytesIn = 1;495 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {496 *(float *)Pout = (*(char *)Pin - Bzero) / Bscale;497 # ifdef BYTE_SWAP498 if (!nativeOrder) { SWAP_WORD; }499 # endif500 }501 }502 if (!strcmp (outtype, "double") && !strcmp (intype, "byte")) {503 int NbytesIn = 1;504 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {505 *(double *)Pout = (*(char *)Pin - Bzero) / Bscale;506 # ifdef BYTE_SWAP507 if (!nativeOrder) { SWAP_DBLE; }508 # endif509 }510 }511 512 /** input == short **/513 if (!strcmp (outtype, "char") && !strcmp (intype, "short")) {514 int NbytesIn = 2;515 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {516 *(char *)Pout = (*(short *)Pin - Bzero) / Bscale;517 }518 }519 if (!strcmp (outtype, "byte") && !strcmp (intype, "short")) {520 int NbytesIn = 2;521 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {522 *(char *)Pout = (*(short *)Pin - Bzero) / Bscale;523 }524 }525 if (!strcmp (outtype, "short") && !strcmp (intype, "short")) {526 int NbytesIn = 2;527 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {528 *(short *)Pout = (*(short *)Pin - Bzero) / Bscale;529 # ifdef BYTE_SWAP530 if (!nativeOrder) { SWAP_BYTE; }531 # endif532 }533 }534 if (!strcmp (outtype, "int") && !strcmp (intype, "short")) {535 int NbytesIn = 2;536 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {537 *(int *)Pout = (*(short *)Pin - Bzero) / Bscale;538 # ifdef BYTE_SWAP539 if (!nativeOrder) { SWAP_WORD; }540 # endif541 }542 }543 if (!strcmp (outtype, "int64_t") && !strcmp (intype, "short")) {544 int NbytesIn = 2;545 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {546 *(int64_t *)Pout = (*(short *)Pin - Bzero) / Bscale;547 # ifdef BYTE_SWAP548 if (!nativeOrder) { SWAP_DBLE; }549 # endif550 }551 }552 if (!strcmp (outtype, "float") && !strcmp (intype, "short")) {553 int NbytesIn = 2;554 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {555 *(float *)Pout = (*(short *)Pin - Bzero) / Bscale;556 # ifdef BYTE_SWAP557 if (!nativeOrder) { SWAP_WORD; }558 # endif559 }560 }561 if (!strcmp (outtype, "double") && !strcmp (intype, "short")) {562 int NbytesIn = 2;563 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {564 *(double *)Pout = (*(short *)Pin - Bzero) / Bscale;565 # ifdef BYTE_SWAP566 if (!nativeOrder) { SWAP_DBLE; }567 # endif568 }569 }570 571 /** input == int **/572 if (!strcmp (outtype, "char") && !strcmp (intype, "int")) {573 int NbytesIn = 4;574 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {575 *(char *)Pout = (*(int *)Pin - Bzero) / Bscale;576 }577 }578 if (!strcmp (outtype, "byte") && !strcmp (intype, "int")) {579 int NbytesIn = 4;580 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {581 *(char *)Pout = (*(int *)Pin - Bzero) / Bscale;582 }583 }584 if (!strcmp (outtype, "short") && !strcmp (intype, "int")) {585 int NbytesIn = 4;586 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {587 *(short *)Pout = (*(int *)Pin - Bzero) / Bscale;588 # ifdef BYTE_SWAP589 if (!nativeOrder) { SWAP_BYTE; }590 # endif591 }592 }593 if (!strcmp (outtype, "int") && !strcmp (intype, "int")) {594 int NbytesIn = 4;595 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {596 *(int *)Pout = (*(int *)Pin - Bzero) / Bscale;597 # ifdef BYTE_SWAP598 if (!nativeOrder) { SWAP_WORD; }599 # endif600 }601 }602 if (!strcmp (outtype, "int64_t") && !strcmp (intype, "int")) {603 int NbytesIn = 4;604 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {605 *(int64_t *)Pout = (*(int *)Pin - Bzero) / Bscale;606 # ifdef BYTE_SWAP607 if (!nativeOrder) { SWAP_DBLE; }608 # endif609 }610 }611 if (!strcmp (outtype, "float") && !strcmp (intype, "int")) {612 int NbytesIn = 4;613 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {614 *(float *)Pout = (*(int *)Pin - Bzero) / Bscale;615 # ifdef BYTE_SWAP616 if (!nativeOrder) { SWAP_WORD; }617 # endif618 }619 }620 if (!strcmp (outtype, "double") && !strcmp (intype, "int")) {621 int NbytesIn = 4;622 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {623 *(double *)Pout = (*(int *)Pin - Bzero) / Bscale;624 # ifdef BYTE_SWAP625 if (!nativeOrder) { SWAP_DBLE; }626 # endif627 }628 }629 630 /** input == int64_t **/631 if (!strcmp (outtype, "char") && !strcmp (intype, "int64_t")) {632 int NbytesIn = 8;633 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {634 *(char *)Pout = (*(int64_t *)Pin - Bzero) / Bscale;635 }636 }637 if (!strcmp (outtype, "byte") && !strcmp (intype, "int64_t")) {638 int NbytesIn = 8;639 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {640 *(char *)Pout = (*(int64_t *)Pin - Bzero) / Bscale;641 }642 }643 if (!strcmp (outtype, "short") && !strcmp (intype, "int64_t")) {644 int NbytesIn = 8;645 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {646 *(short *)Pout = (*(int64_t *)Pin - Bzero) / Bscale;647 # ifdef BYTE_SWAP648 if (!nativeOrder) { SWAP_BYTE; }649 # endif650 }651 }652 if (!strcmp (outtype, "int") && !strcmp (intype, "int64_t")) {653 int NbytesIn = 8;654 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {655 *(int *)Pout = (*(int64_t *)Pin - Bzero) / Bscale;656 # ifdef BYTE_SWAP657 if (!nativeOrder) { SWAP_WORD; }658 # endif659 }660 }661 if (!strcmp (outtype, "int64_t") && !strcmp (intype, "int64_t")) {662 int NbytesIn = 8;663 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {664 *(int64_t *)Pout = (*(int64_t *)Pin - Bzero) / Bscale;665 # ifdef BYTE_SWAP666 if (!nativeOrder) { SWAP_DBLE; }667 # endif668 }669 }670 if (!strcmp (outtype, "float") && !strcmp (intype, "int64_t")) {671 int NbytesIn = 8;672 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {673 *(float *)Pout = (*(int64_t *)Pin - Bzero) / Bscale;674 # ifdef BYTE_SWAP675 if (!nativeOrder) { SWAP_WORD; }676 # endif677 }678 }679 if (!strcmp (outtype, "double") && !strcmp (intype, "int64_t")) {680 int NbytesIn = 8;681 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {682 *(double *)Pout = (*(int64_t *)Pin - Bzero) / Bscale;683 # ifdef BYTE_SWAP684 if (!nativeOrder) { SWAP_DBLE; }685 # endif686 }687 }688 689 /** input == float **/690 if (!strcmp (outtype, "char") && !strcmp (intype, "float")) {691 int NbytesIn = 4;692 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {693 *(char *)Pout = (*(float *)Pin - Bzero) / Bscale;694 }695 }696 if (!strcmp (outtype, "byte") && !strcmp (intype, "float")) {697 int NbytesIn = 4;698 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {699 *(char *)Pout = (*(float *)Pin - Bzero) / Bscale;700 }701 }702 if (!strcmp (outtype, "short") && !strcmp (intype, "float")) {703 int NbytesIn = 4;704 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {705 *(short *)Pout = (*(float *)Pin - Bzero) / Bscale;706 # ifdef BYTE_SWAP707 if (!nativeOrder) { SWAP_BYTE; }708 # endif709 }710 }711 if (!strcmp (outtype, "int") && !strcmp (intype, "float")) {712 int NbytesIn = 4;713 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {714 *(int *)Pout = (*(float *)Pin - Bzero) / Bscale;715 # ifdef BYTE_SWAP716 if (!nativeOrder) { SWAP_WORD; }717 # endif718 }719 }720 if (!strcmp (outtype, "int64_t") && !strcmp (intype, "float")) {721 int NbytesIn = 4;722 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {723 *(int64_t *)Pout = (*(float *)Pin - Bzero) / Bscale;724 # ifdef BYTE_SWAP725 if (!nativeOrder) { SWAP_DBLE; }726 # endif727 }728 }729 if (!strcmp (outtype, "float") && !strcmp (intype, "float")) {730 int NbytesIn = 4;731 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {732 *(float *)Pout = (*(float *)Pin - Bzero) / Bscale;733 # ifdef BYTE_SWAP734 if (!nativeOrder) { SWAP_WORD; }735 # endif736 }737 }738 if (!strcmp (outtype, "double") && !strcmp (intype, "float")) {739 int NbytesIn = 4;740 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {741 *(double *)Pout = (*(float *)Pin - Bzero) / Bscale;742 # ifdef BYTE_SWAP743 if (!nativeOrder) { SWAP_DBLE; }744 # endif745 }746 }747 748 /** input == double **/749 if (!strcmp (outtype, "char") && !strcmp (intype, "double")) {750 int NbytesIn = 8;751 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {752 *(char *)Pout = (*(double *)Pin - Bzero) / Bscale;753 }754 }755 if (!strcmp (outtype, "byte") && !strcmp (intype, "double")) {756 int NbytesIn = 8;757 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {758 *(char *)Pout = (*(double *)Pin - Bzero) / Bscale;759 }760 }761 if (!strcmp (outtype, "short") && !strcmp (intype, "double")) {762 int NbytesIn = 8;763 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {764 *(short *)Pout = (*(double *)Pin - Bzero) / Bscale;765 # ifdef BYTE_SWAP766 if (!nativeOrder) { SWAP_BYTE; }767 # endif768 }769 }770 if (!strcmp (outtype, "int") && !strcmp (intype, "double")) {771 int NbytesIn = 8;772 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {773 *(int *)Pout = (*(double *)Pin - Bzero) / Bscale;774 # ifdef BYTE_SWAP775 if (!nativeOrder) { SWAP_WORD; }776 # endif777 }778 }779 if (!strcmp (outtype, "int64_t") && !strcmp (intype, "double")) {780 int NbytesIn = 8;781 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {782 *(int64_t *)Pout = (*(double *)Pin - Bzero) / Bscale;783 # ifdef BYTE_SWAP784 if (!nativeOrder) { SWAP_DBLE; }785 # endif786 }787 }788 if (!strcmp (outtype, "float") && !strcmp (intype, "double")) {789 int NbytesIn = 8;790 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {791 *(float *)Pout = (*(double *)Pin - Bzero) / Bscale;792 # ifdef BYTE_SWAP793 if (!nativeOrder) { SWAP_WORD; }794 # endif795 }796 }797 if (!strcmp (outtype, "double") && !strcmp (intype, "double")) {798 int NbytesIn = 8;799 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) {800 *(double *)Pout = (*(double *)Pin - Bzero) / Bscale;801 # ifdef BYTE_SWAP802 if (!nativeOrder) { SWAP_DBLE; }803 # endif804 }805 }806 # endif807 808 395 /* check array space */ 809 396 if (Nx*Ny < Nx*(Nrow - 1) + Nstart + Nval*NbytesOut) { … … 813 400 814 401 /* insert bytes from array into appropriate section of buffer */ 815 Pout = table[0].buffer + Nstart ;402 Pout = table[0].buffer + Nstart + element*NbytesOut; 816 403 Pin = array; 817 for (i = 0; i < Nrow; i++, Pout += Nx, Pin += N val*NbytesOut) {818 memcpy (Pout, Pin, N val*NbytesOut);404 for (i = 0; i < Nrow; i++, Pout += Nx, Pin += NbytesOut) { 405 memcpy (Pout, Pin, NbytesOut); 819 406 } 820 407
Note:
See TracChangeset
for help on using the changeset viewer.
