Ignore:
Timestamp:
02/18/12 22:43:24 (12 years ago)
Author:
ymipsl
Message:

Fortran attribut interface are now automaticaly generated.
Add get attribut fonctionnality from fortran.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/object_template_impl.hpp

    r300 r313  
    112112      return (T::GetType()); 
    113113   } 
    114     
     114   
     115   template <class T> 
     116   string CObjectTemplate<T>::getName(void) const 
     117   { 
     118      return (T::GetName()); 
     119   } 
     120   
    115121   //--------------------------------------------------------------- 
    116122 
     
    238244  } 
    239245   
    240  
     246   template <typename T> 
     247   void CObjectTemplate<T>::generateCInterface(ostream& oss) 
     248   { 
     249     string className=getName() ; 
     250     int found=className.find_first_of("_") ; 
     251     if (found!=string::npos) className.replace(found,1,0,'x') ; 
     252      
     253     oss<<"/* ************************************************************************** *"<<iendl ; 
     254     oss<<" *               Interface auto generated - do not modify                   *"<<iendl ; 
     255     oss<<" * ************************************************************************** */"<<iendl; 
     256     oss<<iendl ; 
     257     oss<<"#include <boost/multi_array.hpp>"<<iendl ; 
     258     oss<<"#include <boost/shared_ptr.hpp>"<<iendl ; 
     259     oss<<"#include \"xmlioserver.hpp\""<<iendl; 
     260     oss<<"#include \"attribute_template_impl.hpp\""<<iendl ; 
     261     oss<<"#include \"object_template_impl.hpp\""<<iendl; 
     262     oss<<"#include \"group_template_impl.hpp\""<<iendl ; 
     263     oss<<"#include \"icutil.hpp\""<<iendl ; 
     264     oss<<iendl ; 
     265     oss<<"extern \"C\""<<iendl ; 
     266     oss<<"{"<<iendl++ ; 
     267     oss<<"typedef xmlioserver::tree::"<<getStrType<T>()<<"*  "<<className<<"_Ptr;"<<iendl; 
     268     oss<<iendl ; 
     269     SuperClassMap::generateCInterface(oss,className) ; 
     270     oss<<iendl-- ; 
     271     oss<<"}"<<iendl ; 
     272   } 
     273 
     274   template <typename T> 
     275   void CObjectTemplate<T>::generateFortran2003Interface(ostream& oss) 
     276   { 
     277     string className=getName() ; 
     278     int found=className.find_first_of("_") ; 
     279     if (found!=string::npos) className.replace(found,1,0,'x') ; 
     280      
     281     oss<<"! * ************************************************************************** *"<<iendl ; 
     282     oss<<"! *               Interface auto generated - do not modify                     *"<<iendl ; 
     283     oss<<"! * ************************************************************************** *"<<iendl; 
     284     oss<<iendl ; 
     285     oss<<"MODULE "<<className<<"_interface_attr"<<iendl++ ; 
     286     oss<<"USE, INTRINSIC :: ISO_C_BINDING"<<iendl ; 
     287     oss<<iendl ; 
     288     oss<<"INTERFACE ! Do not call directly / interface FORTRAN 2003 <-> C99"<<iendl++ ; 
     289     oss<<iendl ;    
     290     oss<<iendl ; 
     291     SuperClassMap::generateFortran2003Interface(oss,className) ; 
     292     oss<<"END INTERFACE"<<iendl-- ; 
     293     oss<<iendl-- ; 
     294     oss<<"END MODULE "<<className<<"_interface_attr"<<iendl ; 
     295   } 
    241296   
     297   template <typename T> 
     298   void CObjectTemplate<T>::generateFortranInterface(ostream& oss) 
     299   { 
     300     string className=getName() ; 
     301     int found=className.find_first_of('_') ; 
     302     if (found!=string::npos) className.erase(found,1) ; 
     303     string superClassName=getName(); 
     304     found=superClassName.find("_group") ; 
     305     if (found!=string::npos) superClassName.erase(found,6) ; 
     306      
     307     oss<<"! * ************************************************************************** *"<<iendl ; 
     308     oss<<"! *               Interface auto generated - do not modify                     *"<<iendl ; 
     309     oss<<"! * ************************************************************************** *"<<iendl; 
     310     oss<<"#include \"xios_fortran_prefix.hpp\""<<iendl ; 
     311     oss<<iendl ; 
     312     oss<<"MODULE i"<<className<<"_attr"<<iendl++ ; 
     313     oss<<"USE, INTRINSIC :: ISO_C_BINDING"<<iendl ; 
     314     oss<<"USE i"<<superClassName<<iendl ; 
     315     oss<<"USE "<<className<<"_interface_attr"<<iendl ; 
     316//     oss<<"TYPE txios("<<className<<")"<<iendl ; 
     317//     oss<<"  INTEGER(kind = C_INTPTR_T) :: daddr"<<iendl ; 
     318//     oss<<"END TYPE txios("<<className<<")"<<iendl ; 
     319     oss<<iendl-- ; 
     320     oss<<"CONTAINS"<<iendl++ ; 
     321     oss<<iendl ; 
     322     SuperClassMap::generateFortranInterface_id(oss,className) ; 
     323     oss<<iendl ; 
     324     SuperClassMap::generateFortranInterface_hdl(oss,className) ; 
     325     oss<<iendl ; 
     326     SuperClassMap::generateFortranInterface_hdl_(oss,className) ; 
     327     oss<<iendl ; 
     328     SuperClassMap::generateFortranInterfaceGet_id(oss,className) ; 
     329     oss<<iendl ; 
     330     SuperClassMap::generateFortranInterfaceGet_hdl(oss,className) ; 
     331     oss<<iendl ; 
     332     SuperClassMap::generateFortranInterfaceGet_hdl_(oss,className) ; 
     333     oss<<iendl-- ; 
     334     oss<<"END MODULE i"<<className<<"_attr"<<iendl ; 
     335   } 
     336 
     337 
    242338} // namespace xmlioserver 
    243339 
Note: See TracChangeset for help on using the changeset viewer.