Changeset 41340 for trunk/Ohana/src/libfits/table/F_set_column.c
- Timestamp:
- Apr 16, 2020, 1:54:47 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
r41176 r41340 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, int element,char nativeOrder) {255 int gfits_set_bintable_column_reformat (Header *header, FTable *table, char *label, char *intype, void *data, off_t Nrow, 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 }294 290 295 291 /* check existing table dimensions */ … … 311 307 } 312 308 313 // NOTE: we are inserting a single column into the output314 // table. If the output field is multi-value, the resulting315 // array is inserted into the appropriate bytes in that output field316 317 309 /* make duplicate of data with correct type 318 310 byte swap and Bzero/Bscale */ 319 ALLOCATE (array, char, NbytesOut*N row);311 ALLOCATE (array, char, NbytesOut*Nval*Nrow); 320 312 Pin = data; 321 Pout = array; //313 Pout = array; 322 314 323 315 // # define ASSIGN_DATA(ITYPE,INAME,ISIZE,OTYPE,ONAME) … … 329 321 if (!strcmp (outtype, OUTNAME) && !strcmp (intype, INNAME)) { \ 330 322 int NbytesIn = NBYTES_IN; \ 331 for (i = 0; i < N row; i++, Pin += NbytesIn, Pout += NbytesOut) { \323 for (i = 0; i < Nval*Nrow; i++, Pin += NbytesIn, Pout += NbytesOut) { \ 332 324 if (directCopy) { \ 333 325 *(OUTTYPE *)Pout = *(INTYPE *)Pin; \ … … 393 385 SET_VALUES("double", double, "double", double, SWAP_DBLE, 8); 394 386 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_SWAP 412 if (!nativeOrder) { SWAP_BYTE; } 413 # endif 414 } 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_SWAP 421 if (!nativeOrder) { SWAP_WORD; } 422 # endif 423 } 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_SWAP 430 if (!nativeOrder) { SWAP_DBLE; } 431 # endif 432 } 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_SWAP 439 if (!nativeOrder) { SWAP_WORD; } 440 # endif 441 } 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_SWAP 448 if (!nativeOrder) { SWAP_DBLE; } 449 # endif 450 } 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_SWAP 471 if (!nativeOrder) { SWAP_BYTE; } 472 # endif 473 } 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_SWAP 480 if (!nativeOrder) { SWAP_WORD; } 481 # endif 482 } 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_SWAP 489 if (!nativeOrder) { SWAP_DBLE; } 490 # endif 491 } 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_SWAP 498 if (!nativeOrder) { SWAP_WORD; } 499 # endif 500 } 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_SWAP 507 if (!nativeOrder) { SWAP_DBLE; } 508 # endif 509 } 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_SWAP 530 if (!nativeOrder) { SWAP_BYTE; } 531 # endif 532 } 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_SWAP 539 if (!nativeOrder) { SWAP_WORD; } 540 # endif 541 } 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_SWAP 548 if (!nativeOrder) { SWAP_DBLE; } 549 # endif 550 } 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_SWAP 557 if (!nativeOrder) { SWAP_WORD; } 558 # endif 559 } 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_SWAP 566 if (!nativeOrder) { SWAP_DBLE; } 567 # endif 568 } 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_SWAP 589 if (!nativeOrder) { SWAP_BYTE; } 590 # endif 591 } 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_SWAP 598 if (!nativeOrder) { SWAP_WORD; } 599 # endif 600 } 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_SWAP 607 if (!nativeOrder) { SWAP_DBLE; } 608 # endif 609 } 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_SWAP 616 if (!nativeOrder) { SWAP_WORD; } 617 # endif 618 } 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_SWAP 625 if (!nativeOrder) { SWAP_DBLE; } 626 # endif 627 } 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_SWAP 648 if (!nativeOrder) { SWAP_BYTE; } 649 # endif 650 } 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_SWAP 657 if (!nativeOrder) { SWAP_WORD; } 658 # endif 659 } 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_SWAP 666 if (!nativeOrder) { SWAP_DBLE; } 667 # endif 668 } 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_SWAP 675 if (!nativeOrder) { SWAP_WORD; } 676 # endif 677 } 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_SWAP 684 if (!nativeOrder) { SWAP_DBLE; } 685 # endif 686 } 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_SWAP 707 if (!nativeOrder) { SWAP_BYTE; } 708 # endif 709 } 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_SWAP 716 if (!nativeOrder) { SWAP_WORD; } 717 # endif 718 } 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_SWAP 725 if (!nativeOrder) { SWAP_DBLE; } 726 # endif 727 } 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_SWAP 734 if (!nativeOrder) { SWAP_WORD; } 735 # endif 736 } 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_SWAP 743 if (!nativeOrder) { SWAP_DBLE; } 744 # endif 745 } 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_SWAP 766 if (!nativeOrder) { SWAP_BYTE; } 767 # endif 768 } 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_SWAP 775 if (!nativeOrder) { SWAP_WORD; } 776 # endif 777 } 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_SWAP 784 if (!nativeOrder) { SWAP_DBLE; } 785 # endif 786 } 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_SWAP 793 if (!nativeOrder) { SWAP_WORD; } 794 # endif 795 } 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_SWAP 802 if (!nativeOrder) { SWAP_DBLE; } 803 # endif 804 } 805 } 806 # endif 807 395 808 /* check array space */ 396 809 if (Nx*Ny < Nx*(Nrow - 1) + Nstart + Nval*NbytesOut) { … … 400 813 401 814 /* insert bytes from array into appropriate section of buffer */ 402 Pout = table[0].buffer + Nstart + element*NbytesOut;815 Pout = table[0].buffer + Nstart; 403 816 Pin = array; 404 for (i = 0; i < Nrow; i++, Pout += Nx, Pin += N bytesOut) {405 memcpy (Pout, Pin, N bytesOut);817 for (i = 0; i < Nrow; i++, Pout += Nx, Pin += Nval*NbytesOut) { 818 memcpy (Pout, Pin, Nval*NbytesOut); 406 819 } 407 820
Note:
See TracChangeset
for help on using the changeset viewer.
