Changeset 527


Ignore:
Timestamp:
12/03/14 11:41:54 (6 years ago)
Author:
rlacroix
Message:

Make the variable typing stricter.

The type must now be one of:

  • bool
  • int or int32
  • int16
  • int64
  • float
  • double
  • string

WARNING: The variable type was previously not checked and using an unsupported type did not lead to any error message. Be aware that this change can make your existing configuration files invalid. However the adjustments required to adapt existing files should be minor.

Location:
XIOS/trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/inputs/COMPLETE/context_surface.xml

    r513 r527  
    1515      <field field_ref="field_A_srf" > 
    1616        <variable id="my_attribute1" type="string" >surf_att</variable> 
    17         <variable id="my_attribute2" type="integer" > 10 </variable> 
     17        <variable id="my_attribute2" type="int" > 10 </variable> 
    1818        <variable id="my_attribute3" type="float" >6.8</variable> 
    1919        <variable id="my_attribute5" type="double" >100.201</variable> 
     
    3030      <field field_ref="field_A_srf" > 
    3131        <variable id="my_attribute1" type="string" >surf_att</variable> 
    32         <variable id="my_attribute2" type="integer" >10</variable> 
     32        <variable id="my_attribute2" type="int" >10</variable> 
    3333        <variable id="my_attribute3" type="float" >6.8</variable> 
    3434        <variable id="my_attribute4" type="double" >100.201</variable> 
  • XIOS/trunk/inputs/COMPLETE/iodef.xml

    r512 r527  
    1515        <variable_group id="parameters" > 
    1616          <variable id="info_level" type="int">100</variable> 
    17           <variable id="print_file" type="boolean">true</variable> 
     17          <variable id="print_file" type="bool">true</variable> 
    1818        </variable_group> 
    1919      </variable_definition> 
  • XIOS/trunk/inputs/iodef.xml

    r523 r527  
    4646 
    4747        <variable_group id="parameters" > 
    48           <variable id="using_server" type="boolean">false</variable> 
     48          <variable id="using_server" type="bool">false</variable> 
    4949          <variable id="info_level" type="int">50</variable> 
    50           <variable id="print_file" type="boolean">true</variable> 
     50          <variable id="print_file" type="bool">true</variable> 
    5151        </variable_group> 
    5252      </variable_definition> 
  • XIOS/trunk/src/config/var_attribute.conf

    r501 r527  
    1 DECLARE_ATTRIBUTE(StdString, type) 
     1DECLARE_TYPE(type) 
    22DECLARE_ATTRIBUTE(StdString, name) 
  • XIOS/trunk/src/declare_attribute.hpp

    r522 r527  
    115115   DECLARE_CLASS_ENUM(name)  
    116116 
     117  #define DECLARE_TYPE(name)                                      \ 
     118   class Enum_##name                                              \ 
     119   {                                                              \ 
     120     public:                                                      \ 
     121     enum t_enum { t_bool=0, t_int16, t_int, t_int32, t_int64, t_float, t_double, t_string }; \ 
     122     const char** getStr(void) const { static const char * enumStr[] = { "bool", "int16", "int", "int32", "int64", "float", "double", "string" }; return enumStr; } \ 
     123     int getSize(void) const { return 8; }                        \ 
     124   };                                                             \ 
     125   DECLARE_CLASS_ENUM(name) 
    117126 
    118127#define BEGIN_DECLARE_ATTRIBUTE_MAP(type)                  \ 
  • XIOS/trunk/src/interface/c_attr/icvariable_attr.cpp

    r509 r527  
    4848    if(!cstr2string(type, type_size, type_str)) return; 
    4949     CTimer::get("XIOS").resume(); 
    50     variable_hdl->type.setValue(type_str); 
     50    variable_hdl->type.fromString(type_str); 
    5151     CTimer::get("XIOS").suspend(); 
    5252  } 
     
    5555  { 
    5656     CTimer::get("XIOS").resume(); 
    57     if(!string_copy(variable_hdl->type.getInheritedValue(),type , type_size)) 
     57    if(!string_copy(variable_hdl->type.getInheritedStringValue(),type , type_size)) 
    5858      ERROR("void cxios_get_variable_type(variable_Ptr variable_hdl, char * type, int type_size)", <<"Input string is to short"); 
    5959     CTimer::get("XIOS").suspend(); 
  • XIOS/trunk/src/interface/c_attr/icvariablegroup_attr.cpp

    r509 r527  
    7474    if(!cstr2string(type, type_size, type_str)) return; 
    7575     CTimer::get("XIOS").resume(); 
    76     variablegroup_hdl->type.setValue(type_str); 
     76    variablegroup_hdl->type.fromString(type_str); 
    7777     CTimer::get("XIOS").suspend(); 
    7878  } 
     
    8181  { 
    8282     CTimer::get("XIOS").resume(); 
    83     if(!string_copy(variablegroup_hdl->type.getInheritedValue(),type , type_size)) 
     83    if(!string_copy(variablegroup_hdl->type.getInheritedStringValue(),type , type_size)) 
    8484      ERROR("void cxios_get_variablegroup_type(variablegroup_Ptr variablegroup_hdl, char * type, int type_size)", <<"Input string is to short"); 
    8585     CTimer::get("XIOS").suspend(); 
  • XIOS/trunk/src/node/variable.cpp

    r501 r527  
    7070   } 
    7171 
    72    CVariable::EVarType CVariable::getVarType(void) const 
    73    { 
    74      EVarType ret ; 
    75  
    76      if (type.isEmpty()) ret=t_undefined ; 
    77      else 
    78      { 
    79        string varType=boost::to_lower_copy(boost::trim_copy(type.getValue())) ; 
    80        if (varType=="int") ret=t_int ; 
    81        else if (varType=="short int" || varType=="short") ret=t_short_int ; 
    82        else if (varType=="long int" || varType=="long") ret=t_long_int ; 
    83        else if (varType=="float") ret=t_float ; 
    84        else if (varType=="double") ret=t_double ; 
    85        else if (varType=="long double") ret=t_long_double ; 
    86        else if (varType=="bool") ret=t_bool ; 
    87        else if (varType=="long double") ret=t_long_double ; 
    88        else if (varType=="string") ret=t_string ; 
    89      } 
    90      return ret ; 
    91    } 
    92  
    9372   /* 
    9473   *\brief Sending value of a variable with its id from client to server 
     
    126105      get(id)->recvValue(*buffer); 
    127106   } 
    128  
    129107 
    130108   /* 
  • XIOS/trunk/src/node/variable.hpp

    r501 r527  
    77#include "group_template.hpp" 
    88#include "array_new.hpp" 
     9#include "attribute_enum.hpp" 
     10#include "attribute_enum_impl.hpp" 
    911 
    1012namespace xios 
     
    5557 
    5658         public : 
    57             enum EVarType 
    58             {  t_int, t_short_int, t_long_int, t_float, t_double, t_long_double, t_bool, t_string, t_undefined } ; 
    59  
    60  
    6159            /// Autres /// 
    6260            virtual void parse(xml::CXMLNode & node); 
     
    7472            template <typename T, StdSize N> 
    7573            inline void getData(CArray<T, N>& _data_array) const; 
    76  
    77             EVarType getVarType(void) const ; 
    7874 
    7975            static bool dispatchEvent(CEventServer& event) ; 
     
    139135      // Declare/Define CVarGroup and CVarDefinition 
    140136      DECLARE_GROUP_PARSE_REDEF(CVariable); 
    141  
    142  
    143  
    144137} // namespace xios 
    145138 
  • XIOS/trunk/src/output/nc4_data_output.cpp

    r517 r527  
    803803        try 
    804804        { 
    805           if (var->getVarType()==CVariable::t_int) addAttribute(name,var->getData<int>(),&fieldId) ; 
    806           else if (var->getVarType()==CVariable::t_short_int) addAttribute(name,var->getData<short int>(),&fieldId) ; 
    807           else if (var->getVarType()==CVariable::t_long_int) addAttribute(name,var->getData<long int>(),&fieldId) ; 
    808           else if (var->getVarType()==CVariable::t_float) addAttribute(name,var->getData<float>(),&fieldId) ; 
    809           else if (var->getVarType()==CVariable::t_double) addAttribute(name,var->getData<double>(),&fieldId) ; 
    810           else addAttribute(name,var->getData<string>(),&fieldId) ; 
     805          if (var->type.getValue() == CVariable::type_attr::t_int || var->type.getValue() == CVariable::type_attr::t_int32) 
     806            addAttribute(name, var->getData<int>(), &fieldId); 
     807          else if (var->type.getValue() == CVariable::type_attr::t_int16) 
     808            addAttribute(name, var->getData<short int>(), &fieldId); 
     809          else if (var->type.getValue() == CVariable::type_attr::t_float) 
     810            addAttribute(name, var->getData<float>(), &fieldId); 
     811          else if (var->type.getValue() == CVariable::type_attr::t_double) 
     812            addAttribute(name, var->getData<double>(), &fieldId); 
     813          else if (var->type.getValue() == CVariable::type_attr::t_string) 
     814            addAttribute(name, var->getData<string>(), &fieldId); 
     815          else 
     816            ERROR("CNc4DataOutput::writeAttribute_ (CVariable* var, const string& fieldId)", 
     817                  << "Unsupported variable of type " << var->type.getStringValue()); 
    811818        } 
    812819       catch (CNetCdfException& e) 
     
    830837        try 
    831838        { 
    832           if (var->getVarType()==CVariable::t_int) addAttribute(name,var->getData<int>()) ; 
    833           else if (var->getVarType()==CVariable::t_short_int) addAttribute(name,var->getData<short int>()) ; 
    834           else if (var->getVarType()==CVariable::t_long_int) addAttribute(name,var->getData<long int>()) ; 
    835           else if (var->getVarType()==CVariable::t_float) addAttribute(name,var->getData<float>()) ; 
    836           else if (var->getVarType()==CVariable::t_double) addAttribute(name,var->getData<double>()) ; 
    837           else addAttribute(name,var->getData<string>()) ; 
     839          if (var->type.getValue() == CVariable::type_attr::t_int || var->type.getValue() == CVariable::type_attr::t_int32) 
     840            addAttribute(name, var->getData<int>()); 
     841          else if (var->type.getValue() == CVariable::type_attr::t_int16) 
     842            addAttribute(name, var->getData<short int>()); 
     843          else if (var->type.getValue() == CVariable::type_attr::t_float) 
     844            addAttribute(name, var->getData<float>()); 
     845          else if (var->type.getValue() == CVariable::type_attr::t_double) 
     846            addAttribute(name, var->getData<double>()); 
     847          else if (var->type.getValue() == CVariable::type_attr::t_string) 
     848            addAttribute(name, var->getData<string>()); 
     849          else 
     850            ERROR("CNc4DataOutput::writeAttribute_ (CVariable* var)", 
     851                  << "Unsupported variable of type " << var->type.getStringValue()); 
    838852        } 
    839853       catch (CNetCdfException& e) 
Note: See TracChangeset for help on using the changeset viewer.