Ignore:
Timestamp:
09/22/14 14:17:33 (10 years ago)
Author:
mhnguyen
Message:

Ticket 50: Implementing the getting/setting methods for Fortran interface

+) Add some C and Fortran functions to set and get data to/from CVariable with an id
+) Add method to send, receive and dispatch in CVariable
+) Add dispatch method in server class

Test
-) On Curie
-) Test data: integer, float, double, boolean, string
-) File: one and multiple, using_server: ON and OFF
+) All test cases passed and had correct results

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/node/variable.hpp

    r472 r489  
    1515      class CVariableAttributes; 
    1616      class CVariable; 
    17  
     17      class CContext; 
    1818      ///-------------------------------------------------------------- 
    1919 
     
    2929         , public CVariableAttributes 
    3030      { 
     31            enum EEventId 
     32            { 
     33             EVENT_ID_VARIABLE_VALUE 
     34            }; 
     35 
    3136            /// typedef /// 
    3237            typedef CObjectTemplate<CVariable>   SuperClass; 
     
    5257            enum EVarType 
    5358            {  t_int, t_short_int, t_long_int, t_float, t_double, t_long_double, t_bool, t_string, t_undefined } ; 
    54                
    55                       
     59 
     60 
    5661            /// Autres /// 
    5762            virtual void parse(xml::CXMLNode & node); 
     
    6065            /// Accesseur /// 
    6166            const StdString & getContent (void) const; 
    62              
    63              
     67 
     68            void setContent(const StdString& content); 
     69 
     70 
    6471            template <typename T> inline T getData(void) const; 
    65              
     72            template <typename T> inline void setData(T data); 
     73 
    6674            template <typename T, StdSize N> 
    6775            inline void getData(CArray<T, N>& _data_array) const; 
    68              
     76 
    6977            EVarType getVarType(void) const ; 
    70              
     78 
     79            static bool dispatchEvent(CEventServer& event) ; 
     80 
     81            //! Sending a request to set up variable data 
     82            void sendValue(); 
     83 
     84            static void recvValue(CEventServer& event) ; 
     85            void recvValue(CBufferIn& buffer) ; 
     86 
    7187         public : 
    72           
     88 
    7389            /// Accesseurs statiques /// 
    7490            static StdString GetName(void); 
     
    85101      inline bool CVariable::getData(void) const 
    86102      { 
    87          if (content.compare("true")==0 || content.compare(".true.")==0 || content.compare(".TRUE.")==0) return true ;  
    88          else if (content.compare("false")==0 || content.compare(".false.")==0 || content.compare(".FALSE.")==0) return false ;  
     103         if (content.compare("true")==0 || content.compare(".true.")==0 || content.compare(".TRUE.")==0) return true ; 
     104         else if (content.compare("false")==0 || content.compare(".false.")==0 || content.compare(".FALSE.")==0) return false ; 
    89105         else ERROR("CVariable::getdata()", 
    90106               << "Cannot convert string <" << content << "> into type required" ); 
    91107         return false ; 
    92       }  
    93        
     108      } 
     109 
    94110      template <typename T> 
    95111      inline T CVariable::getData(void) const 
    96112      { 
    97113         T retval ; 
    98          std::stringstream sstr(std::stringstream::in | std::stringstream::out);  
     114         std::stringstream sstr(std::stringstream::in | std::stringstream::out); 
    99115         sstr<<content ; 
    100116         sstr>>retval ; 
     
    102118               << "Cannot convert string <" << content << "> into type required" ); 
    103119         return retval ; 
    104       }  
     120      } 
    105121 
     122      template<> 
     123      inline void CVariable::setData(bool data) 
     124      { 
     125        if (true == data) content.assign("true"); 
     126        else content.assign("false"); 
     127      } 
     128 
     129      template <typename T> 
     130      inline void CVariable::setData(T data) 
     131      { 
     132        std::stringstream sstr; 
     133        sstr<<data; 
     134        content = sstr.str(); 
     135      } 
    106136 
    107137      ///-------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.