Changeset 369 for XIOS/trunk/src/generate_interface_impl.hpp
- Timestamp:
- 10/16/12 13:04:44 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/generate_interface_impl.hpp
r354 r369 6 6 #include "type_util.hpp" 7 7 #include "indent.hpp" 8 #include "array.hpp" 8 #include "enum.hpp" 9 #include "array_new.hpp" 9 10 10 11 namespace xios … … 83 84 } 84 85 86 template<> 87 void CInterface::AttributeCInterface<CEnumBase>(ostream& oss, const string& className,const string& name) 88 { 89 oss<<"void cxios_set_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, const char * "<<name<<", int "<<name<<"_size)"<<iendl ; 90 oss<<"{"<<iendl ; 91 oss<<" std::string "<<name<<"_str;"<<iendl; 92 oss<<" if(!cstr2string("<<name<<", "<<name<<"_size, "<<name<<"_str)) return;"<<iendl ; 93 oss<<" CTimer::get(\"XIOS\").resume();"<<iendl ; 94 oss<<" "<<className<<"_hdl->"<<name<<".fromString("<<name<<"_str);"<<iendl ; 95 oss<<" "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ; 96 oss<<" CTimer::get(\"XIOS\").suspend();"<<iendl ; 97 oss<<"}"<<iendl ; 98 99 oss<<iendl ; 100 101 oss<<"void cxios_get_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, char * "<<name<<", int "<<name<<"_size)"<<iendl ; 102 oss<<"{"<<iendl ; 103 oss<<" CTimer::get(\"XIOS\").resume();"<<iendl ; 104 oss<<" if(!string_copy("<<className<<"_hdl->"<<name<<".getStringValue(),"<<name<<" , "<<name<<"_size))"<<iendl ; 105 oss<<" ERROR(\"void cxios_get_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, char * "<<name<<", int " 106 <<name<<"_size)\", <<\"Input string is to short\");"<<iendl ; 107 oss<<" CTimer::get(\"XIOS\").suspend();"<<iendl ; 108 oss<<"}"<<iendl ; 109 110 } 85 111 // if (!array_copy(domain_hdl->mask.getValue(), mask, extent1, extent2)) 86 112 // ERROR("cxios_get_domain_mask(XDomainPtr domain_hdl, bool * mask, int extent1, int extent2)",<<"Output array size is not conform to array size attribut") ; 87 113 88 114 /* 89 115 #define macro(T) \ 90 116 template <>\ … … 160 186 macro(double) 161 187 macro(int) 188 */ 162 189 163 190 #undef macro … … 206 233 207 234 } 208 235 236 /* 209 237 #define macro(T)\ 210 238 template <>\ … … 280 308 macro(double) 281 309 macro(int) 282 310 283 311 #undef macro 284 312 */ 285 313 template <class T> 286 314 void CInterface::AttributeFortranInterfaceDeclaration(ostream& oss,const string& className,const string& name) … … 309 337 } 310 338 339 /* 311 340 #define macro(T)\ 312 341 template <> \ … … 356 385 357 386 #undef macro 358 387 */ 359 388 360 389 template <class T> … … 404 433 } 405 434 406 435 /* 407 436 #define macro(T) \ 408 437 template <> \ … … 459 488 460 489 #undef macro 461 490 */ 491 492 /* 462 493 #define macro(T) \ 463 494 template <> \ … … 514 545 515 546 #undef macro 547 */ 548 549 // declaration for CArray 550 551 552 553 554 #define macro(T) \ 555 template <>\ 556 void CInterface::AttributeCInterface<CArray<T,1> >(ostream& oss, const string& className,const string& name)\ 557 {\ 558 string typeName=getStrType<T>() ;\ 559 \ 560 oss<<"void cxios_set_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, "<< typeName<<"* "<<name<<", int extent1)"<<iendl ;\ 561 oss<<"{"<<iendl ;\ 562 oss<<" CTimer::get(\"XIOS\").resume();"<<iendl ; \ 563 oss<<" CArray<"<<typeName<<",1> tmp("<<name<<",shape(extent1),neverDeleteData) ;"<<iendl ;\ 564 oss<<" "<<className<<"_hdl->"<<name<<".reference(tmp.copy());"<<iendl ;\ 565 oss<<" "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 566 oss<<"}"<<iendl ;\ 567 oss<<iendl; \ 568 oss<<"void cxios_get_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, "<< typeName<<"* "<<name<<", int extent1)"<<iendl ;\ 569 oss<<"{"<<iendl; \ 570 oss<<" CArray<"<<typeName<<",1> tmp("<<name<<",shape(extent1),neverDeleteData) ;"<<iendl ;\ 571 oss<<" tmp="<<className<<"_hdl->"<<name<<" ;"<<iendl ;\ 572 oss<<" CTimer::get(\"XIOS\").suspend();"<<iendl ;\ 573 oss<<"}"<<iendl ;\ 574 }\ 575 \ 576 template <> \ 577 void CInterface::AttributeCInterface<CArray<T,2> >(ostream& oss, const string& className,const string& name)\ 578 {\ 579 string typeName=getStrType<T>() ;\ 580 \ 581 oss<<"void cxios_set_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, "<< typeName<<"* "<<name<<", int extent1, int extent2)"<<iendl ;\ 582 oss<<"{"<<iendl ;\ 583 oss<<" CTimer::get(\"XIOS\").resume();"<<iendl ; \ 584 oss<<" CArray<"<<typeName<<",2> tmp("<<name<<",shape(extent1,extent2),neverDeleteData) ;"<<iendl ;\ 585 oss<<" "<<className<<"_hdl->"<<name<<".reference(tmp.copy());"<<iendl ;\ 586 oss<<" "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 587 oss<<"}"<<iendl ;\ 588 oss<<iendl; \ 589 oss<<"void cxios_get_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, "<< typeName<<"* "<<name<<", int extent1, int extent2)"<<iendl ;\ 590 oss<<"{"<<iendl; \ 591 oss<<" CArray<"<<typeName<<",2> tmp("<<name<<",shape(extent1,extent2),neverDeleteData) ;"<<iendl ;\ 592 oss<<" tmp="<<className<<"_hdl->"<<name<<" ;"<<iendl ;\ 593 oss<<" CTimer::get(\"XIOS\").suspend();"<<iendl ;\ 594 oss<<"}"<<iendl ;\ 595 }\ 596 \ 597 template <>\ 598 void CInterface::AttributeCInterface<CArray<T,3> >(ostream& oss, const string& className,const string& name)\ 599 {\ 600 string typeName=getStrType<T>() ;\ 601 \ 602 oss<<"void cxios_set_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, "<< typeName<<"* "<<name<<", int extent1, int extent2, int extent3)"<<iendl ;\ 603 oss<<"{"<<iendl ;\ 604 oss<<" CTimer::get(\"XIOS\").resume();"<<iendl ; \ 605 oss<<" CArray<"<<typeName<<",2> tmp("<<name<<",shape(extent1,extent2,extent3),neverDeleteData) ;"<<iendl ;\ 606 oss<<" "<<className<<"_hdl->"<<name<<".reference(tmp.copy());"<<iendl ;\ 607 oss<<" "<<className<<"_hdl->sendAttributToServer("<<className<<"_hdl->"<<name<<");"<<iendl ;\ 608 oss<<"}"<<iendl ;\ 609 oss<<iendl; \ 610 oss<<"void cxios_get_"<<className<<"_"<<name<<"("<<className<<"_Ptr "<<className<<"_hdl, "<< typeName<<"* "<<name<<", int extent1, int extent2, int extent3)"<<iendl ;\ 611 oss<<"{"<<iendl; \ 612 oss<<" CArray<"<<typeName<<",2> tmp("<<name<<",shape(extent1,extent2,extent3),neverDeleteData) ;"<<iendl ;\ 613 oss<<" tmp="<<className<<"_hdl->"<<name<<" ;"<<iendl ;\ 614 oss<<" CTimer::get(\"XIOS\").suspend();"<<iendl ;\ 615 oss<<"}"<<iendl ;\ 616 } 617 618 macro(bool) 619 macro(double) 620 macro(int) 621 622 #undef macro 623 624 // ///////////////////////////////////////////////// 625 // // Fortran 2003 Interface // 626 // ///////////////////////////////////////////////// 627 628 629 630 #define macro(T)\ 631 template <>\ 632 void CInterface::AttributeFortran2003Interface<CArray<T,1> >(ostream& oss,const string& className,const string& name) \ 633 { \ 634 string fortranType=getStrFortranType<T>() ; \ 635 string fortranKindC=getStrFortranKindC<T>() ; \ 636 \ 637 oss<<"SUBROUTINE cxios_set_"<<className<<"_"<<name<<"("<<className<<"_hdl, "<<name<<", extent1) BIND(C)"<<iendl ; \ 638 oss<<" USE ISO_C_BINDING"<<iendl ; \ 639 oss<<" INTEGER (kind = C_INTPTR_T), VALUE :: "<<className<<"_hdl"<<iendl ; \ 640 oss<<" "<<fortranType<<" "<<fortranKindC<<" , DIMENSION(*) :: "<<name<<iendl ; \ 641 oss<<" INTEGER (kind = C_INT), VALUE :: extent1"<<iendl ; \ 642 oss<<"END SUBROUTINE cxios_set_"<<className<<"_"<<name<<iendl ; \ 643 oss<<iendl; \ 644 oss<<"SUBROUTINE cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl, "<<name<<", extent1) BIND(C)"<<iendl ; \ 645 oss<<" USE ISO_C_BINDING"<<iendl ; \ 646 oss<<" INTEGER (kind = C_INTPTR_T), VALUE :: "<<className<<"_hdl"<<iendl ; \ 647 oss<<" "<<fortranType<<" "<<fortranKindC<<" , DIMENSION(*) :: "<<name<<iendl ; \ 648 oss<<" INTEGER (kind = C_INT), VALUE :: extent1"<<iendl ; \ 649 oss<<"END SUBROUTINE cxios_get_"<<className<<"_"<<name<<iendl ; \ 650 } \ 651 \ 652 template <> \ 653 void CInterface::AttributeFortran2003Interface<CArray<T,2> >(ostream& oss,const string& className,const string& name) \ 654 { \ 655 string fortranType=getStrFortranType<T>() ; \ 656 string fortranKindC=getStrFortranKindC<T>() ; \ 657 \ 658 oss<<"SUBROUTINE cxios_set_"<<className<<"_"<<name<<"("<<className<<"_hdl, "<<name<<", extent1, extent2) BIND(C)"<<iendl ; \ 659 oss<<" USE ISO_C_BINDING"<<iendl ; \ 660 oss<<" INTEGER (kind = C_INTPTR_T), VALUE :: "<<className<<"_hdl"<<iendl ; \ 661 oss<<" "<<fortranType<<" "<<fortranKindC<<" , DIMENSION(*) :: "<<name<<iendl ; \ 662 oss<<" INTEGER (kind = C_INT), VALUE :: extent1"<<iendl ; \ 663 oss<<" INTEGER (kind = C_INT), VALUE :: extent2"<<iendl ; \ 664 oss<<"END SUBROUTINE cxios_set_"<<className<<"_"<<name<<iendl ; \ 665 oss<<iendl ; \ 666 oss<<"SUBROUTINE cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl, "<<name<<", extent1, extent2) BIND(C)"<<iendl ; \ 667 oss<<" USE ISO_C_BINDING"<<iendl ; \ 668 oss<<" INTEGER (kind = C_INTPTR_T), VALUE :: "<<className<<"_hdl"<<iendl ; \ 669 oss<<" "<<fortranType<<" "<<fortranKindC<<" , DIMENSION(*) :: "<<name<<iendl ; \ 670 oss<<" INTEGER (kind = C_INT), VALUE :: extent1"<<iendl ; \ 671 oss<<" INTEGER (kind = C_INT), VALUE :: extent2"<<iendl ; \ 672 oss<<"END SUBROUTINE cxios_get_"<<className<<"_"<<name<<iendl ; \ 673 } \ 674 \ 675 template <> \ 676 void CInterface::AttributeFortran2003Interface<CArray<T,3> >(ostream& oss,const string& className,const string& name) \ 677 { \ 678 string fortranType=getStrFortranType<T>() ; \ 679 string fortranKindC=getStrFortranKindC<T>() ; \ 680 \ 681 oss<<"SUBROUTINE cxios_set_"<<className<<"_"<<name<<"("<<className<<"_hdl, "<<name<<", extent1, extent2, extent3) BIND(C)"<<iendl ; \ 682 oss<<" USE ISO_C_BINDING"<<iendl ; \ 683 oss<<" INTEGER (kind = C_INTPTR_T), VALUE :: "<<className<<"_hdl"<<iendl ; \ 684 oss<<" "<<fortranType<<" "<<fortranKindC<<" , DIMENSION(*) :: "<<name<<iendl ; \ 685 oss<<" INTEGER (kind = C_INT), VALUE :: extent1"<<iendl ; \ 686 oss<<" INTEGER (kind = C_INT), VALUE :: extent2"<<iendl ; \ 687 oss<<" INTEGER (kind = C_INT), VALUE :: extent3"<<iendl ; \ 688 oss<<"END SUBROUTINE cxios_set_"<<className<<"_"<<name<<iendl ; \ 689 oss<<iendl ;\ 690 oss<<"SUBROUTINE cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl, "<<name<<", extent1, extent2, extent3) BIND(C)"<<iendl ; \ 691 oss<<" USE ISO_C_BINDING"<<iendl ; \ 692 oss<<" INTEGER (kind = C_INTPTR_T), VALUE :: "<<className<<"_hdl"<<iendl ; \ 693 oss<<" "<<fortranType<<" "<<fortranKindC<<" , DIMENSION(*) :: "<<name<<iendl ; \ 694 oss<<" INTEGER (kind = C_INT), VALUE :: extent1"<<iendl ; \ 695 oss<<" INTEGER (kind = C_INT), VALUE :: extent2"<<iendl ; \ 696 oss<<" INTEGER (kind = C_INT), VALUE :: extent3"<<iendl ; \ 697 oss<<"END SUBROUTINE cxios_get_"<<className<<"_"<<name<<iendl ; \ 698 } 699 700 macro(bool) 701 macro(double) 702 macro(int) 703 704 #undef macro 705 706 707 #define macro(T)\ 708 template <> \ 709 void CInterface::AttributeFortranInterfaceDeclaration<CArray<T,1> >(ostream& oss,const string& className,const string& name) \ 710 { \ 711 oss<<getStrFortranType<T>()<<" "<<getStrFortranKind<T>() <<" , OPTIONAL, INTENT(IN) :: "<<name<<"(:)"<<iendl ; \ 712 if (!matchingTypeCFortran<T>()) oss<<getStrFortranType<T>()<<" "<<getStrFortranKindC<T>() <<" , ALLOCATABLE :: "<<name<<"_tmp(:)"<<iendl ; \ 713 } \ 714 template <> \ 715 void CInterface::AttributeFortranInterfaceGetDeclaration<CArray<T,1> >(ostream& oss,const string& className,const string& name) \ 716 { \ 717 oss<<getStrFortranType<T>()<<" "<<getStrFortranKind<T>() <<" , OPTIONAL, INTENT(OUT) :: "<<name<<"(:)"<<iendl ; \ 718 if (!matchingTypeCFortran<T>()) oss<<getStrFortranType<T>()<<" "<<getStrFortranKindC<T>() <<" , ALLOCATABLE :: "<<name<<"_tmp(:)"<<iendl ; \ 719 } \ 720 \ 721 template <> \ 722 void CInterface::AttributeFortranInterfaceDeclaration<CArray<T,2> >(ostream& oss,const string& className,const string& name) \ 723 { \ 724 oss<<getStrFortranType<T>()<<" "<<getStrFortranKind<T>() <<" , OPTIONAL, INTENT(IN) :: "<<name<<"(:,:)"<<iendl ; \ 725 if (!matchingTypeCFortran<T>()) oss<<getStrFortranType<T>()<<" "<<getStrFortranKindC<T>() <<" , ALLOCATABLE :: "<<name<<"_tmp(:,:)"<<iendl ; \ 726 } \ 727 \ 728 template <> \ 729 void CInterface::AttributeFortranInterfaceGetDeclaration<CArray<T,2> >(ostream& oss,const string& className,const string& name) \ 730 { \ 731 oss<<getStrFortranType<T>()<<" "<<getStrFortranKind<T>() <<" , OPTIONAL, INTENT(OUT) :: "<<name<<"(:,:)"<<iendl ; \ 732 if (!matchingTypeCFortran<T>()) oss<<getStrFortranType<T>()<<" "<<getStrFortranKindC<T>() <<" , ALLOCATABLE :: "<<name<<"_tmp(:,:)"<<iendl ; \ 733 } \ 734 \ 735 template <> \ 736 void CInterface::AttributeFortranInterfaceDeclaration<CArray<T,3> >(ostream& oss,const string& className,const string& name) \ 737 { \ 738 oss<<getStrFortranType<T>()<<" "<<getStrFortranKind<T>() <<" , OPTIONAL, INTENT(IN) :: "<<name<<"(:,:,:)"<<iendl ; \ 739 if (!matchingTypeCFortran<T>()) oss<<getStrFortranType<T>()<<" "<<getStrFortranKindC<T>() <<" , ALLOCATABLE :: "<<name<<"_tmp(:,:,:)"<<iendl ; \ 740 }\ 741 \ 742 template <> \ 743 void CInterface::AttributeFortranInterfaceGetDeclaration<CArray<T,3> >(ostream& oss,const string& className,const string& name) \ 744 { \ 745 oss<<getStrFortranType<T>()<<" "<<getStrFortranKind<T>() <<" , OPTIONAL, INTENT(OUT) :: "<<name<<"(:,:,:)"<<iendl ; \ 746 if (!matchingTypeCFortran<T>()) oss<<getStrFortranType<T>()<<" "<<getStrFortranKindC<T>() <<" , ALLOCATABLE :: "<<name<<"_tmp(:,:,:)"<<iendl ; \ 747 } 748 749 macro(bool) 750 macro(double) 751 macro(int) 752 753 #undef macro 754 755 756 757 #define macro(T) \ 758 template <> \ 759 void CInterface::AttributeFortranInterfaceBody< CArray<T,1> >(ostream& oss,const string& className,const string& name) \ 760 { \ 761 string name_tmp=name+"__tmp" ; \ 762 \ 763 oss<<"IF (PRESENT("<<name<<"_)) THEN"<<iendl ; \ 764 if (!matchingTypeCFortran<T>()) \ 765 { \ 766 oss<<" ALLOCATE("<<name_tmp<<"(size("<<name<<"_,1)))"<<iendl ; \ 767 oss<<" "<<name_tmp<<"="<<name<<"_"<<iendl ; \ 768 oss<<" CALL cxios_set_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name_tmp<<",size("<<name<<"_,1))"<<iendl ; \ 769 } \ 770 else oss<<" CALL cxios_set_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name<<"_,size("<<name<<"_,1))"<<iendl ; \ 771 oss<<"ENDIF"<<iendl ; \ 772 } \ 773 \ 774 template <> \ 775 void CInterface::AttributeFortranInterfaceBody< CArray<T,2> >(ostream& oss,const string& className,const string& name) \ 776 { \ 777 string name_tmp=name+"__tmp" ; \ 778 \ 779 oss<<"IF (PRESENT("<<name<<"_)) THEN"<<iendl ; \ 780 if (!matchingTypeCFortran<T>()) \ 781 { \ 782 oss<<" ALLOCATE("<<name_tmp<<"(size("<<name<<"_,1),size("<<name<<"_,2)))"<<iendl ; \ 783 oss<<" "<<name_tmp<<"="<<name<<"_"<<iendl ; \ 784 oss<<" CALL cxios_set_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name_tmp<<",size("<<name<<"_,1),size("<<name<<"_,2))"<<iendl ; \ 785 } \ 786 else oss<<" CALL cxios_set_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name<<"_,size("<<name<<"_,1),size("<<name<<"_,2))"<<iendl ; \ 787 oss<<"ENDIF"<<iendl ; \ 788 } \ 789 \ 790 template <> \ 791 void CInterface::AttributeFortranInterfaceBody< CArray<T,3> >(ostream& oss,const string& className,const string& name) \ 792 { \ 793 string name_tmp=name+"__tmp" ; \ 794 \ 795 oss<<"IF (PRESENT("<<name<<"_)) THEN"<<iendl ; \ 796 if (!matchingTypeCFortran<T>()) \ 797 { \ 798 oss<<" ALLOCATE("<<name_tmp<<"(size("<<name<<"_,1),size("<<name<<"_,2),size("<<name<<"_,3)))"<<iendl ; \ 799 oss<<" "<<name_tmp<<"="<<name<<"_"<<iendl ; \ 800 oss<<" CALL cxios_set_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name_tmp<<",size("<<name<<"_,1),size("<<name<<"_,2),size("<<name<<"_,3))"<<iendl ; \ 801 } \ 802 else oss<<" CALL cxios_set_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name<<"_,size("<<name<<"_,1),size("<<name<<"_,2),size("<<name<<"_,3))"<<iendl ; \ 803 oss<<"ENDIF"<<iendl ; \ 804 } 805 806 macro(bool) 807 macro(double) 808 macro(int) 809 810 #undef macro 811 812 #define macro(T) \ 813 template <> \ 814 void CInterface::AttributeFortranInterfaceGetBody< CArray<T,1> >(ostream& oss,const string& className,const string& name) \ 815 { \ 816 string name_tmp=name+"__tmp" ; \ 817 \ 818 oss<<"IF (PRESENT("<<name<<"_)) THEN"<<iendl ; \ 819 if (!matchingTypeCFortran<T>()) \ 820 { \ 821 oss<<" ALLOCATE("<<name_tmp<<"(size("<<name<<"_,1)))"<<iendl ; \ 822 oss<<" CALL cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name_tmp<<",size("<<name<<"_,1))"<<iendl ; \ 823 oss<<" "<<name<<"_="<<name_tmp<<"_"<<iendl ; \ 824 } \ 825 else oss<<" CALL cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name<<"_,size("<<name<<"_,1))"<<iendl ; \ 826 oss<<"ENDIF"<<iendl ; \ 827 } \ 828 \ 829 template <> \ 830 void CInterface::AttributeFortranInterfaceGetBody< CArray<T,2> >(ostream& oss,const string& className,const string& name) \ 831 { \ 832 string name_tmp=name+"__tmp" ; \ 833 \ 834 oss<<"IF (PRESENT("<<name<<"_)) THEN"<<iendl ; \ 835 if (!matchingTypeCFortran<T>()) \ 836 { \ 837 oss<<" ALLOCATE("<<name_tmp<<"(size("<<name<<"_,1),size("<<name<<"_,2)))"<<iendl ; \ 838 oss<<" CALL cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name_tmp<<",size("<<name<<"_,1),size("<<name<<"_,2))"<<iendl ; \ 839 oss<<" "<<name<<"_="<<name_tmp<<iendl ; \ 840 } \ 841 else oss<<" CALL cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name<<"_,size("<<name<<"_,1),size("<<name<<"_,2))"<<iendl ; \ 842 oss<<"ENDIF"<<iendl ; \ 843 } \ 844 \ 845 template <> \ 846 void CInterface::AttributeFortranInterfaceGetBody< CArray<T,3> >(ostream& oss,const string& className,const string& name) \ 847 { \ 848 string name_tmp=name+"__tmp" ; \ 849 \ 850 oss<<"IF (PRESENT("<<name<<"_)) THEN"<<iendl ; \ 851 if (!matchingTypeCFortran<T>()) \ 852 { \ 853 oss<<" ALLOCATE("<<name_tmp<<"(size("<<name<<"_,1),size("<<name<<"_,2),size("<<name<<"_,3)))"<<iendl ; \ 854 oss<<" CALL cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name_tmp<<",size("<<name<<"_,1),size("<<name<<"_,2),size("<<name<<"_,3))"<<iendl ; \ 855 oss<<" "<<name<<"_="<<name_tmp<<iendl ; \ 856 } \ 857 else oss<<" CALL cxios_get_"<<className<<"_"<<name<<"("<<className<<"_hdl%daddr, "<<name<<"_,size("<<name<<"_,1),size("<<name<<"_,2),size("<<name<<"_,3))"<<iendl ; \ 858 oss<<"ENDIF"<<iendl ; \ 859 } 860 861 macro(bool) 862 macro(double) 863 macro(int) 864 865 #undef macro 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 516 901 } 517 902
Note: See TracChangeset
for help on using the changeset viewer.