Changeset 489
- Timestamp:
- 09/22/14 14:17:33 (10 years ago)
- Location:
- XIOS/trunk
- Files:
-
- 1 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/bld.cfg
r475 r489 31 31 bld::target libxios.a 32 32 #bld::target generate_fortran_interface.exe 33 bld::target xios_server.exe test_client.exe parse_xml.exe 33 bld::target xios_server.exe test_client.exe parse_xml.exe test_complete.exe test_xios_interface.exe 34 34 bld::exe_dep 35 35 -
XIOS/trunk/inputs/COMPLETE/context_surface.xml
r486 r489 17 17 <variable id="my_attribute2" type="integer" > 10 </variable> 18 18 <variable id="my_attribute3" type="float" >6.8</variable> 19 <variable id="my_attribute4" type="double" >100.201</variable> 19 20 </field> 20 21 <field field_ref="field_A_srf_K" /> … … 31 32 <variable id="my_attribute2" type="integer" >10</variable> 32 33 <variable id="my_attribute3" type="float" >6.8</variable> 34 <variable id="my_attribute4" type="double" >100.201</variable> 33 35 </field> 34 36 <field field_ref="field_A_srf_K" /> … … 38 40 <field field_ref="field_A_srf_max" name="field_A_srf_mean_max" long_name="Average of hourly maximum over 1d" operation="average" freq_op="1h" > @field_A_srf_max </field> 39 41 <variable id="my_global_attribute" type="string" >file_1d</variable> 42 <variable id="my_global_attribute_bool" type="boolean" >false</variable> 40 43 </file> 41 44 </file_definition> -
XIOS/trunk/src/context_server.cpp
r401 r489 38 38 pendingEvent=true ; 39 39 } 40 40 41 41 bool CContextServer::hasPendingEvent(void) 42 42 { 43 43 return pendingEvent ; 44 44 } 45 45 46 46 bool CContextServer::eventLoop(void) 47 47 { … … 58 58 int count ; 59 59 char * addr ; 60 MPI_Status status; 60 MPI_Status status; 61 61 map<int,CServerBuffer*>::iterator it; 62 62 63 63 for(rank=0;rank<commSize;rank++) 64 64 { … … 66 66 { 67 67 traceOff() ; 68 MPI_Iprobe(rank,20,interComm,&flag,&status); 68 MPI_Iprobe(rank,20,interComm,&flag,&status); 69 69 traceOn() ; 70 70 if (flag==true) 71 71 { 72 72 it=buffers.find(rank) ; 73 if (it==buffers.end()) 73 if (it==buffers.end()) 74 74 it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer))).first ; 75 75 MPI_Get_count(&status,MPI_CHAR,&count) ; … … 84 84 } 85 85 } 86 86 87 87 void CContextServer::checkPendingRequest(void) 88 88 { … … 94 94 int count ; 95 95 MPI_Status status ; 96 96 97 97 for(it=pendingRequest.begin();it!=pendingRequest.end();it++) 98 98 { … … 108 108 } 109 109 } 110 111 for(itRecv=recvRequest.begin();itRecv!=recvRequest.end();itRecv++) 110 111 for(itRecv=recvRequest.begin();itRecv!=recvRequest.end();itRecv++) 112 112 { 113 113 pendingRequest.erase(*itRecv) ; … … 115 115 } 116 116 } 117 117 118 118 void CContextServer::processRequest(int rank, char* buff,int count) 119 119 { 120 120 121 121 CBufferIn buffer(buff,count) ; 122 122 char* startBuffer,endBuffer ; … … 124 124 size_t timeLine ; 125 125 map<size_t,CEventServer*>::iterator it ; 126 126 127 127 while(count>0) 128 128 { … … 136 136 137 137 buffer.advance(size) ; 138 count=buffer.remain() ; 139 } 140 141 } 142 138 count=buffer.remain() ; 139 } 140 141 } 142 143 143 void CContextServer::processEvents(void) 144 144 { 145 145 map<size_t,CEventServer*>::iterator it ; 146 146 CEventServer* event ; 147 147 148 148 it=events.find(currentTimeLine) ; 149 if (it!=events.end()) 149 if (it!=events.end()) 150 150 { 151 151 event=it->second ; … … 162 162 } 163 163 } 164 164 165 165 CContextServer::~CContextServer() 166 166 { 167 167 map<int,CServerBuffer*>::iterator it ; 168 for(it=buffers.begin();it!=buffers.end();++it) delete it->second ; 169 } 168 for(it=buffers.begin();it!=buffers.end();++it) delete it->second ; 169 } 170 170 171 171 … … 178 178 list<CEventServer::SSubEvent>::iterator it ; 179 179 CContext::setCurrent(context->getId()) ; 180 180 181 181 if (event.classId==CContext::GetType() && event.type==CContext::EVENT_ID_CONTEXT_FINALIZE) 182 182 { … … 198 198 else if (event.classId==CFile::GetType()) CFile::dispatchEvent(event) ; 199 199 else if (event.classId==CFileGroup::GetType()) CFileGroup::dispatchEvent(event) ; 200 else if (event.classId==CVariable::GetType()) CVariable::dispatchEvent(event) ; 200 201 else 201 202 { -
XIOS/trunk/src/interface/c/icdata.cpp
r461 r489 6 6 #include <boost/shared_ptr.hpp> 7 7 #include <string> 8 #include <cstring> 8 9 #include <iostream> 9 10 … … 32 33 33 34 // ----------------------- Redéfinition de types ---------------------------- 34 35 35 36 typedef enum { NETCDF4 = 0 } XFileType; 36 37 37 38 typedef xios::CContext * XContextPtr; 38 39 … … 40 41 void cxios_init_server(void) 41 42 { 42 CXios::initServerSide(); 43 CXios::initServerSide(); 43 44 } 44 45 45 46 void cxios_init_client(const char * client_id , int len_client_id, MPI_Fint* f_local_comm, MPI_Fint* f_return_comm ) 46 47 { 47 std::string str; 48 std::string str; 48 49 MPI_Comm local_comm ; 49 50 MPI_Comm return_comm ; 50 51 51 52 if (!cstr2string(client_id, len_client_id, str)) return; 52 53 … … 63 64 void cxios_context_initialize(const char * context_id , int len_context_id, MPI_Fint* f_comm) 64 65 { 65 std::string str; 66 std::string str; 66 67 MPI_Comm comm ; 67 68 68 69 if (!cstr2string(context_id, len_context_id, str)) return; 69 70 CTimer::get("XIOS").resume() ; … … 74 75 CTimer::get("XIOS").suspend() ; 75 76 } 76 77 77 78 void cxios_context_is_initialized(const char * context_id , int len_context_id, bool* initialized) 78 79 { 79 std::string str; 80 80 std::string str; 81 81 82 if (!cstr2string(context_id, len_context_id, str)) return; 82 83 CTimer::get("XIOS").resume() ; … … 84 85 *initialized=context->isInitialized() ; 85 86 CTimer::get("XIOS").suspend() ; 86 } 87 87 } 88 88 89 void cxios_context_close_definition() 89 90 { … … 94 95 CTimer::get("XIOS close definition").suspend() ; 95 96 CTimer::get("XIOS").suspend() ; 96 } 97 } 97 98 98 99 void cxios_context_finalize() … … 105 106 CTimer::get("XIOS").suspend() ; 106 107 } 107 108 108 109 void cxios_finalize() 109 110 { … … 119 120 context->solveAllInheritance(false) ; 120 121 CTimer::get("XIOS").suspend() ; 121 } 122 122 } 123 124 /*! \brief This group of functions retrieve variable information from the configuration file (.xml) 125 * 126 * These functions provide intermediate C interfaces to get variable information of the configuration file (e.x iodef.xml), 127 * from a Fortran one, for example the value of a variable with id = "using_server". 128 * Each function corresponds to each basic type. 129 * \param varId [in] id of the variable that we'd like to get 130 * \param varIdSize [in] size of the variable type (integer, float, double, string) 131 * \param dataInt [in/out] the retrieved data 132 * \param isVarExisted [in/out] Verify whether variable with varId exists 133 */ 134 void cxios_get_variable_data_k8(const char * varId, int varIdSize, double * data, bool * isVarExisted) 135 { 136 std::string varIdStr; 137 if (!cstr2string(varId, varIdSize, varIdStr)) return; 138 139 CTimer::get("XIOS").resume(); 140 CTimer::get("XIOS get variable data").resume(); 141 142 CContext* context = CContext::getCurrent(); 143 *isVarExisted = CVariable::has(context->getId(), varIdStr); 144 145 if (*isVarExisted) 146 { 147 *data = CVariable::get(context->getId(),varIdStr)->getData<double>(); 148 } 149 150 CTimer::get("XIOS get variable data").suspend() ; 151 CTimer::get("XIOS").suspend() ; 152 } 153 154 void cxios_get_variable_data_k4(const char * varId, int varIdSize, float * data, bool * isVarExisted) 155 { 156 std::string varIdStr; 157 if (!cstr2string(varId, varIdSize, varIdStr)) return; 158 159 CTimer::get("XIOS").resume(); 160 CTimer::get("XIOS get variable data").resume(); 161 162 CContext* context = CContext::getCurrent(); 163 *isVarExisted = CVariable::has(context->getId(), varIdStr); 164 165 if (*isVarExisted) 166 { 167 *data = CVariable::get(context->getId(),varIdStr)->getData<float>(); 168 } 169 170 CTimer::get("XIOS get variable data").suspend() ; 171 CTimer::get("XIOS").suspend() ; 172 } 173 174 void cxios_get_variable_data_int(const char * varId, int varIdSize, int * data, bool * isVarExisted) 175 { 176 std::string varIdStr; 177 if (!cstr2string(varId, varIdSize, varIdStr)) return; 178 179 CTimer::get("XIOS").resume(); 180 CTimer::get("XIOS get variable data").resume(); 181 182 CContext* context = CContext::getCurrent(); 183 *isVarExisted = CVariable::has(context->getId(), varIdStr); 184 185 if (*isVarExisted) 186 { 187 *data = CVariable::get(context->getId(),varIdStr)->getData<int>(); 188 } 189 190 CTimer::get("XIOS get variable data").suspend() ; 191 CTimer::get("XIOS").suspend() ; 192 } 193 194 void cxios_get_variable_data_logic(const char * varId, int varIdSize, bool * data, bool * isVarExisted) 195 { 196 std::string varIdStr; 197 if (!cstr2string(varId, varIdSize, varIdStr)) return; 198 199 CTimer::get("XIOS").resume(); 200 CTimer::get("XIOS get variable data").resume(); 201 202 CContext* context = CContext::getCurrent(); 203 *isVarExisted = CVariable::has(context->getId(), varIdStr); 204 205 if (*isVarExisted) 206 { 207 *data = CVariable::get(context->getId(),varIdStr)->getData<bool>(); 208 } 209 210 CTimer::get("XIOS get variable data").suspend() ; 211 CTimer::get("XIOS").suspend() ; 212 } 213 214 void cxios_get_variable_data_char(const char * varId, int varIdSize, char * data, int dataSizeIn, bool * isVarExisted) 215 { 216 std::string varIdStr; 217 if (!cstr2string(varId, varIdSize, varIdStr)) return; 218 219 CTimer::get("XIOS").resume(); 220 CTimer::get("XIOS get variable data").resume(); 221 222 CContext* context = CContext::getCurrent(); 223 *isVarExisted = CVariable::has(context->getId(), varIdStr); 224 225 if (*isVarExisted) 226 { 227 int dataSizeOut = CVariable::get(context->getId(),varIdStr)->getData<string>().length(); 228 strncpy(data, CVariable::get(context->getId(),varIdStr)->getData<string>().c_str(), std::min(dataSizeIn, dataSizeOut)); 229 } 230 231 CTimer::get("XIOS get variable data").suspend() ; 232 CTimer::get("XIOS").suspend() ; 233 } 234 235 /*! \brief This group of functions write information into existing variable in the configuration file (.xml) 236 * 237 * These functions provide intermediate C interfaces to get variable information of the configuration file (e.x iodef.xml), 238 * from a Fortran one, for example the value of a variable with id = "using_server". 239 * Each function corresponds to each basic type. 240 * \param varId [in] id of the variable that we'd like to get 241 * \param varIdSize [in] size of the variable type (integer, float, double, string) 242 * \param data [in] the input data 243 * \param isVarExisted [in/out] Verify whether variable with varId exists 244 */ 245 void cxios_set_variable_data_k8(const char * varId, int varIdSize, double data, bool * isVarExisted) 246 { 247 std::string varIdStr; 248 if (!cstr2string(varId, varIdSize, varIdStr)) return; 249 250 CTimer::get("XIOS").resume(); 251 CTimer::get("XIOS set variable data").resume(); 252 253 CContext* context = CContext::getCurrent() ; 254 *isVarExisted = CVariable::has(context->getId(), varIdStr); 255 256 if (*isVarExisted) 257 { 258 CVariable::get(context->getId(),varIdStr)->setData<double>(data); 259 CVariable::get(context->getId(),varIdStr)->sendValue(); 260 } 261 262 CTimer::get("XIOS set variable data").suspend() ; 263 CTimer::get("XIOS").suspend() ; 264 } 265 266 void cxios_set_variable_data_k4(const char * varId, int varIdSize, float data, bool * isVarExisted) 267 { 268 std::string varIdStr; 269 if (!cstr2string(varId, varIdSize, varIdStr)) return; 270 271 CTimer::get("XIOS").resume(); 272 CTimer::get("XIOS set variable data").resume(); 273 274 CContext* context = CContext::getCurrent() ; 275 *isVarExisted = CVariable::has(context->getId(), varIdStr); 276 277 if (*isVarExisted) 278 { 279 CVariable::get(context->getId(),varIdStr)->setData<float>(data); 280 CVariable::get(context->getId(),varIdStr)->sendValue(); 281 } 282 283 CTimer::get("XIOS set variable data").suspend() ; 284 CTimer::get("XIOS").suspend() ; 285 } 286 287 void cxios_set_variable_data_int(const char * varId, int varIdSize, int data, bool * isVarExisted) 288 { 289 std::string varIdStr; 290 if (!cstr2string(varId, varIdSize, varIdStr)) return; 291 292 CTimer::get("XIOS").resume(); 293 CTimer::get("XIOS set variable data").resume(); 294 295 CContext* context = CContext::getCurrent() ; 296 *isVarExisted = CVariable::has(context->getId(), varIdStr); 297 298 if (*isVarExisted) 299 { 300 CVariable::get(context->getId(),varIdStr)->setData<int>(data); 301 CVariable::get(context->getId(),varIdStr)->sendValue(); 302 } 303 304 305 CTimer::get("XIOS set variable data").suspend() ; 306 CTimer::get("XIOS").suspend() ; 307 } 308 309 void cxios_set_variable_data_logic(const char * varId, int varIdSize, bool data, bool * isVarExisted) 310 { 311 std::string varIdStr; 312 if (!cstr2string(varId, varIdSize, varIdStr)) return; 313 314 CTimer::get("XIOS").resume(); 315 CTimer::get("XIOS set variable data").resume(); 316 317 CContext* context = CContext::getCurrent() ; 318 *isVarExisted = CVariable::has(context->getId(), varIdStr); 319 320 if (*isVarExisted) 321 { 322 CVariable::get(context->getId(),varIdStr)->setData<bool>(data); 323 CVariable::get(context->getId(),varIdStr)->sendValue(); 324 } 325 326 CTimer::get("XIOS set variable data").suspend() ; 327 CTimer::get("XIOS").suspend() ; 328 } 329 330 void cxios_set_variable_data_char(const char * varId, int varIdSize, const char * data, int dataSizeIn, bool * isVarExisted) 331 { 332 std::string varIdStr, dataStr; 333 if (!cstr2string(varId, varIdSize, varIdStr)) return; 334 if (!cstr2string(data, dataSizeIn, dataStr)) 335 { 336 *isVarExisted = false; 337 return; 338 } 339 340 CTimer::get("XIOS").resume(); 341 CTimer::get("XIOS set variable data").resume(); 342 343 CContext* context = CContext::getCurrent() ; 344 *isVarExisted = CVariable::has(context->getId(), varIdStr); 345 346 if (*isVarExisted) 347 { 348 CVariable::get(context->getId(),varIdStr)->setData<string>(dataStr); 349 CVariable::get(context->getId(),varIdStr)->sendValue(); 350 } 351 352 CTimer::get("XIOS set variable data").suspend() ; 353 CTimer::get("XIOS").suspend() ; 354 } 355 356 123 357 // ---------------------- Ecriture des données ------------------------------ 124 358 125 359 void cxios_write_data_k81(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize) 126 360 { 127 361 std::string fieldid_str; 128 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 129 362 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 363 130 364 CTimer::get("XIOS").resume() ; 131 365 CTimer::get("XIOS send field").resume() ; … … 139 373 CTimer::get("XIOS").suspend() ; 140 374 } 141 375 142 376 void cxios_write_data_k82(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize, int data_Ysize) 143 377 { 144 378 std::string fieldid_str; 145 379 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 146 147 CTimer::get("XIOS").resume() ; 148 CTimer::get("XIOS send field").resume() ; 149 CContext* context = CContext::getCurrent() ; 150 if (!context->hasServer) context->client->checkBuffers() ; 151 380 381 CTimer::get("XIOS").resume() ; 382 CTimer::get("XIOS send field").resume() ; 383 CContext* context = CContext::getCurrent() ; 384 if (!context->hasServer) context->client->checkBuffers() ; 385 152 386 CArray<double,2>data(data_k8,shape(data_Xsize,data_Ysize),neverDeleteData) ; 153 387 CField::get(fieldid_str)->setData(data) ; … … 155 389 CTimer::get("XIOS").suspend() ; 156 390 } 157 391 158 392 void cxios_write_data_k83(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize, int data_Ysize, int data_Zsize) 159 393 { 160 394 std::string fieldid_str; 161 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 395 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 162 396 163 397 CTimer::get("XIOS").resume() ; … … 171 405 CTimer::get("XIOS").suspend() ; 172 406 } 173 407 174 408 void cxios_write_data_k41(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize) 175 409 { 176 410 std::string fieldid_str; 177 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 411 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 178 412 179 413 CTimer::get("XIOS").resume() ; … … 189 423 CTimer::get("XIOS").suspend() ; 190 424 } 191 425 192 426 void cxios_write_data_k42(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize, int data_Ysize) 193 427 { 194 428 std::string fieldid_str; 195 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 429 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 196 430 197 431 CTimer::get("XIOS").resume() ; … … 207 441 CTimer::get("XIOS").suspend() ; 208 442 } 209 443 210 444 void cxios_write_data_k43(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize, int data_Ysize, int data_Zsize) 211 445 { 212 446 std::string fieldid_str; 213 214 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 215 447 448 if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 449 216 450 CTimer::get("XIOS").resume() ; 217 451 CTimer::get("XIOS send field").resume() ; … … 222 456 CArray<double,3> data(data_Xsize,data_Ysize,data_Zsize) ; 223 457 data=data_tmp ; 224 225 CField::get(fieldid_str)->setData(data) ; 226 CTimer::get("XIOS send field").suspend() ; 227 CTimer::get("XIOS").suspend() ; 228 229 } 458 459 CField::get(fieldid_str)->setData(data) ; 460 CTimer::get("XIOS send field").suspend() ; 461 CTimer::get("XIOS").suspend() ; 462 463 } 230 464 231 465 } // extern "C" -
XIOS/trunk/src/interface/fortran/idata.F90
r461 r489 4 4 USE, INTRINSIC :: ISO_C_BINDING 5 5 USE ICONTEXT 6 6 7 7 INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99 8 8 … … 17 17 INTEGER (kind = C_INT) :: f_return_comm 18 18 END SUBROUTINE cxios_init_client 19 19 20 20 SUBROUTINE cxios_context_initialize(context_id,len_context_id,f_comm) BIND(C) 21 21 USE ISO_C_BINDING … … 31 31 LOGICAL (kind = C_BOOL) :: initialized 32 32 END SUBROUTINE cxios_context_is_initialized 33 34 33 34 35 35 SUBROUTINE cxios_context_close_definition() BIND(C) 36 36 USE ISO_C_BINDING 37 37 END SUBROUTINE cxios_context_close_definition 38 38 39 39 40 40 SUBROUTINE cxios_context_finalize() BIND(C) 41 41 USE ISO_C_BINDING 42 42 END SUBROUTINE cxios_context_finalize 43 44 43 44 45 45 SUBROUTINE cxios_finalize() BIND(C) 46 46 END SUBROUTINE cxios_finalize … … 49 49 END SUBROUTINE cxios_solve_inheritance 50 50 51 51 52 52 SUBROUTINE cxios_write_data_k81(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C) 53 53 USE ISO_C_BINDING … … 57 57 INTEGER (kind = C_INT) , VALUE :: data_Xsize 58 58 END SUBROUTINE cxios_write_data_k81 59 59 60 60 SUBROUTINE cxios_write_data_k82(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize) BIND(C) 61 61 USE ISO_C_BINDING … … 65 65 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize 66 66 END SUBROUTINE cxios_write_data_k82 67 67 68 68 SUBROUTINE cxios_write_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C) 69 69 USE ISO_C_BINDING … … 73 73 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize, data_Zsize 74 74 END SUBROUTINE cxios_write_data_k83 75 75 76 76 SUBROUTINE cxios_write_data_k41(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C) 77 77 USE ISO_C_BINDING … … 81 81 INTEGER (kind = C_INT) , VALUE :: data_Xsize 82 82 END SUBROUTINE cxios_write_data_k41 83 83 84 84 SUBROUTINE cxios_write_data_k42(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize) BIND(C) 85 85 USE ISO_C_BINDING … … 89 89 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize 90 90 END SUBROUTINE cxios_write_data_k42 91 91 92 92 SUBROUTINE cxios_write_data_k43(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C) 93 93 USE ISO_C_BINDING … … 97 97 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize, data_Zsize 98 98 END SUBROUTINE cxios_write_data_k43 99 99 100 ! Binding C and Fortran interface of get_variable (icdata.cpp) 101 SUBROUTINE cxios_get_variable_data_k8(vardid, varid_size, data_k8, is_var_existed) BIND(C) 102 USE ISO_C_BINDING 103 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 104 INTEGER (kind = C_INT) , VALUE :: varid_size 105 REAL (kind = C_DOUBLE) :: data_k8 106 LOGICAL (kind = C_BOOL) :: is_var_existed 107 END SUBROUTINE cxios_get_variable_data_k8 108 109 SUBROUTINE cxios_get_variable_data_k4(vardid, varid_size, data_k4, is_var_existed) BIND(C) 110 USE ISO_C_BINDING 111 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 112 INTEGER (kind = C_INT) , VALUE :: varid_size 113 REAL (kind = C_FLOAT) :: data_k4 114 LOGICAL (kind = C_BOOL) :: is_var_existed 115 END SUBROUTINE cxios_get_variable_data_k4 116 117 SUBROUTINE cxios_get_variable_data_int(vardid, varid_size, data_int, is_var_existed) BIND(C) 118 USE ISO_C_BINDING 119 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 120 INTEGER (kind = C_INT) , VALUE :: varid_size 121 INTEGER (kind = C_INT) :: data_int 122 LOGICAL (kind = C_BOOL) :: is_var_existed 123 END SUBROUTINE cxios_get_variable_data_int 124 125 SUBROUTINE cxios_get_variable_data_logic(vardid, varid_size, data_logic, is_var_existed) BIND(C) 126 USE ISO_C_BINDING 127 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 128 INTEGER (kind = C_INT) , VALUE :: varid_size 129 LOGICAL (kind = 4) :: data_logic 130 LOGICAL (kind = C_BOOL) :: is_var_existed 131 END SUBROUTINE cxios_get_variable_data_logic 132 133 SUBROUTINE cxios_get_variable_data_char(vardid, varid_size, data_char, data_size_in, is_var_existed) BIND(C) 134 USE ISO_C_BINDING 135 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 136 INTEGER (kind = C_INT) , VALUE :: varid_size 137 INTEGER (kind = C_INT) , VALUE :: data_size_in 138 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: data_char 139 LOGICAL (kind = C_BOOL) :: is_var_existed 140 END SUBROUTINE cxios_get_variable_data_char 141 142 ! Binding C and Fortran interface of set_variable (icdata.cpp) 143 SUBROUTINE cxios_set_variable_data_k8(vardid, varid_size, data_k8, is_var_existed) BIND(C) 144 USE ISO_C_BINDING 145 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 146 INTEGER (kind = C_INT) , VALUE :: varid_size 147 REAL (kind = C_DOUBLE), VALUE :: data_k8 148 LOGICAL (kind = C_BOOL) :: is_var_existed 149 END SUBROUTINE cxios_set_variable_data_k8 150 151 SUBROUTINE cxios_set_variable_data_k4(vardid, varid_size, data_k4, is_var_existed) BIND(C) 152 USE ISO_C_BINDING 153 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 154 INTEGER (kind = C_INT) , VALUE :: varid_size 155 REAL (kind = C_FLOAT) , VALUE :: data_k4 156 LOGICAL (kind = C_BOOL) :: is_var_existed 157 END SUBROUTINE cxios_set_variable_data_k4 158 159 SUBROUTINE cxios_set_variable_data_int(vardid, varid_size, data_int, is_var_existed) BIND(C) 160 USE ISO_C_BINDING 161 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 162 INTEGER (kind = C_INT) , VALUE :: varid_size 163 INTEGER (kind = C_INT) , VALUE :: data_int 164 LOGICAL (kind = C_BOOL) :: is_var_existed 165 END SUBROUTINE cxios_set_variable_data_int 166 167 SUBROUTINE cxios_set_variable_data_logic(vardid, varid_size, data_logic, is_var_existed) BIND(C) 168 USE ISO_C_BINDING 169 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 170 INTEGER (kind = C_INT) , VALUE :: varid_size 171 LOGICAL (kind = 4) , VALUE :: data_logic 172 LOGICAL (kind = C_BOOL) :: is_var_existed 173 END SUBROUTINE cxios_set_variable_data_logic 174 175 SUBROUTINE cxios_set_variable_data_char(vardid, varid_size, data_char, data_size_in, is_var_existed) BIND(C) 176 USE ISO_C_BINDING 177 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: vardid 178 INTEGER (kind = C_INT) , VALUE :: varid_size 179 INTEGER (kind = C_INT) , VALUE :: data_size_in 180 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: data_char 181 LOGICAL (kind = C_BOOL) :: is_var_existed 182 END SUBROUTINE cxios_set_variable_data_char 183 100 184 END INTERFACE 101 102 185 186 103 187 CONTAINS ! Fonctions disponibles pour les utilisateurs. 104 188 … … 107 191 CALL cxios_init_server() 108 192 END SUBROUTINE xios(init_server) 109 193 110 194 SUBROUTINE xios(initialize)(client_id, local_comm, return_comm) 111 195 IMPLICIT NONE 112 196 INCLUDE 'mpif.h' 113 197 CHARACTER(LEN=*),INTENT(IN) :: client_id 114 INTEGER,INTENT(IN),OPTIONAL :: local_comm 198 INTEGER,INTENT(IN),OPTIONAL :: local_comm 115 199 INTEGER,INTENT(OUT),OPTIONAL :: return_comm 116 200 INTEGER :: f_local_comm 117 201 INTEGER :: f_return_comm 118 202 119 203 IF (PRESENT(local_comm)) THEN 120 f_local_comm=local_comm 204 f_local_comm=local_comm 121 205 ELSE 122 f_local_comm = MPI_COMM_NULL 206 f_local_comm = MPI_COMM_NULL 123 207 ENDIF 124 208 125 209 CALL cxios_init_client(client_id,LEN(client_id),f_local_comm,f_return_comm) 126 210 127 211 IF (PRESENT(return_comm)) return_comm=f_return_comm 128 212 … … 134 218 CHARACTER(LEN=*),INTENT(IN) :: context_id 135 219 INTEGER, INTENT(IN) :: comm 136 220 137 221 CALL cxios_context_initialize(context_id,LEN(context_id),comm) 138 222 139 223 END SUBROUTINE xios(context_initialize) 140 224 … … 145 229 CHARACTER(LEN=*),INTENT(IN) :: context_id 146 230 LOGICAL(KIND=C_BOOL) :: is_init 147 231 148 232 CALL cxios_context_is_initialized(context_id, LEN(context_id), is_init) 149 233 xios(context_is_initialized) = is_init 150 151 END FUNCTION xios(context_is_initialized) 152 153 234 235 END FUNCTION xios(context_is_initialized) 236 237 154 238 SUBROUTINE xios(finalize) 155 239 IMPLICIT NONE … … 159 243 END SUBROUTINE xios(finalize) 160 244 161 245 162 246 SUBROUTINE xios(close_context_definition)() 163 247 IMPLICIT NONE … … 165 249 END SUBROUTINE xios(close_context_definition) 166 250 167 251 168 252 SUBROUTINE xios(context_finalize)() 169 253 IMPLICIT NONE 170 254 CALL cxios_context_finalize() 171 255 END SUBROUTINE xios(context_finalize) 172 256 173 257 SUBROUTINE xios(solve_inheritance)() 174 258 IMPLICIT NONE 175 259 CALL cxios_solve_inheritance() 176 260 END SUBROUTINE xios(solve_inheritance) 177 178 261 262 179 263 SUBROUTINE xios(send_field_r8_1d)(fieldid, data1d_k8) 180 264 IMPLICIT NONE … … 183 267 CALL cxios_write_data_k81(fieldid, len(fieldid), data1d_k8, size(data1d_k8, 1)) 184 268 END SUBROUTINE xios(send_field_r8_1d) 185 269 186 270 SUBROUTINE xios(send_field_r8_2d)(fieldid, data2d_k8) 187 271 IMPLICIT NONE … … 190 274 CALL cxios_write_data_k82(fieldid, len(fieldid), data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2)) 191 275 END SUBROUTINE xios(send_field_r8_2d) 192 276 193 277 SUBROUTINE xios(send_field_r8_3d)(fieldid, data3d_k8) 194 278 IMPLICIT NONE … … 197 281 CALL cxios_write_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3)) 198 282 END SUBROUTINE xios(send_field_r8_3d) 199 283 200 284 SUBROUTINE xios(send_field_r4_1d)(fieldid, data1d_k4) 201 285 IMPLICIT NONE … … 204 288 CALL cxios_write_data_k41(fieldid, len(fieldid), data1d_k4, size(data1d_k4, 1)) 205 289 END SUBROUTINE xios(send_field_r4_1d) 206 290 207 291 SUBROUTINE xios(send_field_r4_2d)(fieldid, data2d_k4) 208 292 IMPLICIT NONE … … 211 295 CALL cxios_write_data_k42(fieldid, len(fieldid), data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2)) 212 296 END SUBROUTINE xios(send_field_r4_2d) 213 297 214 298 SUBROUTINE xios(send_field_r4_3d)(fieldid, data3d_k4) 215 299 IMPLICIT NONE … … 218 302 CALL cxios_write_data_k43(fieldid, len(fieldid), data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3)) 219 303 END SUBROUTINE xios(send_field_r4_3d) 220 221 304 305 ! Get variable functions 306 LOGICAL FUNCTION xios(getVar_k8)(varId, data_k8) 307 IMPLICIT NONE 308 LOGICAL (kind = 1) :: val 309 CHARACTER(len = *) , INTENT(IN) :: varId 310 REAL (kind = 8) , INTENT(OUT):: data_k8 311 312 CALL cxios_get_variable_data_k8(varId, len(varId), data_k8, val) 313 314 xios(getVar_k8) = val 315 END FUNCTION xios(getVar_k8) 316 317 LOGICAL FUNCTION xios(getVar_k4)(varId, data_k4) 318 IMPLICIT NONE 319 LOGICAL (kind = 1) :: val 320 CHARACTER(len = *) , INTENT(IN) :: varId 321 REAL (kind = 4) , INTENT(OUT):: data_k4 322 323 CALL cxios_get_variable_data_k4(varId, len(varId), data_k4, val) 324 325 xios(getVar_k4) = val 326 END FUNCTION xios(getVar_k4) 327 328 LOGICAL FUNCTION xios(getVar_int)(varId, data_int) 329 IMPLICIT NONE 330 LOGICAL (kind = 1) :: val 331 CHARACTER(len = *) , INTENT(IN) :: varId 332 INTEGER , INTENT(OUT):: data_int 333 334 CALL cxios_get_variable_data_int(varId, len(varId), data_int, val) 335 336 xios(getVar_int) = val 337 END FUNCTION xios(getVar_int) 338 339 LOGICAL FUNCTION xios(getVar_logic)(varId, data_logic) 340 IMPLICIT NONE 341 LOGICAL (kind = 1) :: val 342 CHARACTER(len = *) , INTENT(IN) :: varId 343 LOGICAL (kind = 4) , INTENT(OUT):: data_logic 344 345 CALL cxios_get_variable_data_logic(varId, len(varId), data_logic, val) 346 347 xios(getVar_logic) = val 348 END FUNCTION xios(getVar_logic) 349 350 LOGICAL FUNCTION xios(getVar_char)(varId, data_char) 351 IMPLICIT NONE 352 LOGICAL (kind = 1) :: val 353 CHARACTER(len = *) , INTENT(IN) :: varId 354 CHARACTER(len = *) , INTENT(OUT):: data_char 355 356 CALL cxios_get_variable_data_char(varId, len(varId), data_char, len(data_char), val) 357 358 xios(getVar_char) = val 359 END FUNCTION xios(getVar_char) 360 361 ! Set variable functions 362 LOGICAL FUNCTION xios(setVar_k8)(varId, data_k8) 363 IMPLICIT NONE 364 LOGICAL (kind = 1) :: val 365 CHARACTER(len = *) , INTENT(IN) :: varId 366 REAL (kind = 8) , INTENT(IN) :: data_k8 367 368 CALL cxios_set_variable_data_k8(varId, len(varId), data_k8, val) 369 370 xios(setVar_k8) = val 371 END FUNCTION xios(setVar_k8) 372 373 LOGICAL FUNCTION xios(setVar_k4)(varId, data_k4) 374 IMPLICIT NONE 375 LOGICAL (kind = 1) :: val 376 CHARACTER(len = *) , INTENT(IN) :: varId 377 REAL (kind = 4) , INTENT(IN) :: data_k4 378 379 CALL cxios_set_variable_data_k4(varId, len(varId), data_k4, val) 380 381 xios(setVar_k4) = val 382 END FUNCTION xios(setVar_k4) 383 384 LOGICAL FUNCTION xios(setVar_int)(varId, data_int) 385 IMPLICIT NONE 386 LOGICAL (kind = 1) :: val 387 CHARACTER(len = *) , INTENT(IN) :: varId 388 INTEGER , INTENT(IN) :: data_int 389 390 CALL cxios_set_variable_data_int(varId, len(varId), data_int, val) 391 392 xios(setVar_int) = val 393 END FUNCTION xios(setVar_int) 394 395 LOGICAL FUNCTION xios(setVar_logic)(varId, data_logic) 396 IMPLICIT NONE 397 LOGICAL (kind = 1) :: val 398 CHARACTER(len = *) , INTENT(IN) :: varId 399 LOGICAL (kind = 4) , INTENT(IN) :: data_logic 400 401 CALL cxios_set_variable_data_logic(varId, len(varId), data_logic, val) 402 403 xios(setVar_logic) = val 404 END FUNCTION xios(setVar_logic) 405 406 LOGICAL FUNCTION xios(setVar_char)(varId, data_char) 407 IMPLICIT NONE 408 LOGICAL (kind = 1) :: val 409 CHARACTER(len = *) , INTENT(IN) :: varId 410 CHARACTER(len = *) , INTENT(IN) :: data_char 411 412 CALL cxios_set_variable_data_char(varId, len(varId), data_char, len(data_char), val) 413 414 xios(setVar_char) = val 415 END FUNCTION xios(setVar_char) 416 222 417 END MODULE IDATA -
XIOS/trunk/src/interface/fortran/ixios.F90
r472 r489 10 10 xios(get_context_attr), xios(get_context_attr_hdl), & 11 11 xios(is_defined_context_attr), xios(is_defined_context_attr_hdl) 12 12 13 13 USE idata, ONLY : xios(initialize),xios(init_server), xios(finalize), xios(context_initialize), & 14 14 xios(context_is_initialized), xios(close_context_definition),xios(solve_inheritance), & 15 15 xios(context_finalize), xios(send_field_r8_1d), xios(send_field_r8_2d), & 16 16 xios(send_field_r8_3d), xios(send_field_r4_1d), xios(send_field_r4_2d), & 17 xios(send_field_r4_3d) 17 xios(send_field_r4_3d), xios(getVar_k8), xios(getVar_k4), xios(getVar_int), & 18 xios(getVar_logic), xios(getVar_char), xios(setVar_k8), xios(setVar_k4), xios(setVar_int), & 19 xios(setVar_logic), xios(setVar_char) 18 20 19 21 USE idate, ONLY : txios(date),txios(time), xios(set_timestep),xios(update_calendar) … … 27 29 xios(is_defined_domain_attr), xios(is_defined_domain_attr_hdl) 28 30 29 USE idomaingroup_attr, ONLY : xios(set_domaingroup_attr), xios(set_domaingroup_attr_hdl), & 30 xios(get_domaingroup_attr), xios(get_domaingroup_attr_hdl), & 31 xios(is_defined_domaingroup_attr), xios(is_defined_domaingroup_attr_hdl) 32 31 USE idomaingroup_attr, ONLY : xios(set_domaingroup_attr), xios(set_domaingroup_attr_hdl), & 32 xios(get_domaingroup_attr), xios(get_domaingroup_attr_hdl), & 33 xios(is_defined_domaingroup_attr), xios(is_defined_domaingroup_attr_hdl) 34 33 35 USE ifield, ONLY : txios(field), txios(fieldgroup), xios(get_field_handle), & 34 36 xios(get_fieldgroup_handle), xios(is_valid_field), & 35 xios(is_valid_fieldgroup),xios(field_is_active_id),xios(field_is_active_hdl) 37 xios(is_valid_fieldgroup),xios(field_is_active_id),xios(field_is_active_hdl) 36 38 37 39 USE ifield_attr, ONLY : xios(set_field_attr),xios(set_field_attr_hdl), & 38 40 xios(get_field_attr),xios(get_field_attr_hdl), & 39 41 xios(is_defined_field_attr),xios(is_defined_field_attr_hdl) 40 42 41 43 USE ifieldgroup_attr, ONLY : xios(set_fieldgroup_attr), xios(set_fieldgroup_attr_hdl), & 42 44 xios(get_fieldgroup_attr), xios(get_fieldgroup_attr_hdl), & … … 50 52 xios(get_variable_attr),xios(get_variable_attr_hdl), & 51 53 xios(is_defined_variable_attr),xios(is_defined_variable_attr_hdl) 52 54 53 55 USE ivariablegroup_attr, ONLY : xios(set_variablegroup_attr), xios(set_variablegroup_attr_hdl), & 54 56 xios(get_variablegroup_attr), xios(get_variablegroup_attr_hdl), & 55 57 xios(is_defined_variablegroup_attr), xios(is_defined_variablegroup_attr_hdl) 56 57 USE ifile, ONLY : txios(file), txios(filegroup), xios(get_file_handle), & 58 59 USE ifile, ONLY : txios(file), txios(filegroup), xios(get_file_handle), & 58 60 xios(get_filegroup_handle), xios(is_valid_file), xios(is_valid_filegroup) 59 61 … … 65 67 xios(get_filegroup_attr), xios(get_filegroup_attr_hdl), & 66 68 xios(is_defined_filegroup_attr), xios(is_defined_filegroup_attr_hdl) 67 69 68 70 USE igrid, ONLY : txios(grid), txios(gridgroup), xios(get_grid_handle), & 69 xios(get_gridgroup_handle), xios(is_valid_grid), xios(is_valid_gridgroup) 71 xios(get_gridgroup_handle), xios(is_valid_grid), xios(is_valid_gridgroup) 70 72 71 73 USE igrid_attr, ONLY : xios(set_grid_attr_hdl), xios(set_grid_attr), & … … 78 80 79 81 USE iaxis, ONLY : txios(axis), txios(axisgroup), xios(get_axis_handle), & 80 xios(get_axisgroup_handle), xios(is_valid_axis), xios(is_valid_axisgroup) 82 xios(get_axisgroup_handle), xios(is_valid_axis), xios(is_valid_axisgroup) 81 83 82 84 USE iaxis_attr, ONLY : xios(set_axis_attr), xios(set_axis_attr_hdl), & … … 90 92 USE ixml_tree, ONLY : xios(add_axis), xios(add_file), xios(add_grid), xios(add_field), xios(add_domain), & 91 93 xios(add_fieldtofile), xios(add_variabletofile), xios(add_variabletofield), & 92 xios(add_axisgroup), xios(add_filegroup), xios(add_gridgroup), xios(add_fieldgroup), & 94 xios(add_axisgroup), xios(add_filegroup), xios(add_gridgroup), xios(add_fieldgroup), & 93 95 xios(add_domaingroup), xios(add_fieldgrouptofile), xios(add_variablegrouptofile), & 94 96 xios(add_variablegrouptofield) … … 127 129 xios(get_field_handle), xios(get_fieldgroup_handle),xios(get_variable_handle), & 128 130 xios(get_variablegroup_handle) 129 END INTERFACE xios(get_handle) 131 END INTERFACE xios(get_handle) 130 132 131 133 INTERFACE xios(add_child) … … 133 135 xios(add_fieldtofile), xios(add_variabletofile), xios(add_variabletofield), xios(add_axisgroup), & 134 136 xios(add_filegroup), xios(add_gridgroup), xios(add_fieldgroup), xios(add_domaingroup), & 135 xios(add_fieldgrouptofile), xios(add_variablegrouptofile),xios(add_variablegrouptofield) 137 xios(add_fieldgrouptofile), xios(add_variablegrouptofile),xios(add_variablegrouptofield) 136 138 END INTERFACE xios(add_child) 137 139 … … 145 147 MODULE PROCEDURE xios(field_is_active_id),xios(field_is_active_hdl) 146 148 END INTERFACE 147 149 150 INTERFACE xios(getVar) 151 MODULE PROCEDURE xios(getVar_k8), xios(getVar_k4), xios(getVar_int), xios(getVar_logic), xios(getVar_char) 152 END INTERFACE xios(getVar) 153 154 INTERFACE xios(setVar) 155 MODULE PROCEDURE xios(setVar_k8), xios(setVar_k4), xios(setVar_int), xios(setVar_logic), xios(setVar_char) 156 END INTERFACE xios(setVar) 157 148 158 PUBLIC :: txios(domain), txios(domaingroup),txios(field), txios(fieldgroup),txios(file), txios(filegroup), & 149 txios(grid), txios(gridgroup), txios(axis), txios(axisgroup),txios(context), txios(date),txios(time) 159 txios(grid), txios(gridgroup), txios(axis), txios(axisgroup),txios(context), txios(date),txios(time) 150 160 151 161 PUBLIC :: xios(set_attr), xios(set_domain_attr), xios(set_domaingroup_attr), xios(set_fieldgroup_attr), & … … 164 174 xios(is_defined_axisgroup_attr), xios(is_defined_context_attr) 165 175 166 PUBLIC :: xios(get_handle) 167 PUBLIC :: xios(add_child) 176 PUBLIC :: xios(get_handle) 177 PUBLIC :: xios(add_child) 168 178 169 179 PUBLIC :: xios(is_valid_context),xios(is_valid_domain), xios(is_valid_domaingroup),xios(is_valid_field), & 170 180 xios(is_valid_fieldgroup), xios(is_valid_file), xios(is_valid_filegroup), xios(is_valid_grid), & 171 181 xios(is_valid_gridgroup), xios(is_valid_axis), xios(is_valid_axisgroup) 172 173 PUBLIC :: xios(set_current_context) 182 183 PUBLIC :: xios(set_current_context) 174 184 PUBLIC :: xios(set_timestep),xios(update_calendar) 175 185 PUBLIC :: xios(initialize), xios(init_server), xios(finalize), xios(context_initialize),xios(context_is_initialized), & … … 177 187 xios(field_is_active) 178 188 189 PUBLIC :: xios(getVar) 190 PUBLIC :: xios(setVar) 191 179 192 END MODULE XIOS -
XIOS/trunk/src/node/variable.cpp
r477 r489 7 7 #include "xmlioserver_spl.hpp" 8 8 #include "type.hpp" 9 #include "context.hpp" 10 #include "context_client.hpp" 9 11 #include <boost/algorithm/string.hpp> 10 12 … … 48 50 { 49 51 return (this->content); 52 } 53 54 void CVariable::setContent(const StdString& contentStr) 55 { 56 this->content = contentStr; 50 57 } 51 58 … … 61 68 oss << "</" << CVariable::GetName() << " >"; 62 69 return (oss.str()); 63 } 64 70 } 71 65 72 CVariable::EVarType CVariable::getVarType(void) const 66 73 { 67 74 EVarType ret ; 68 75 69 76 if (type.isEmpty()) ret=t_undefined ; 70 77 else … … 83 90 return ret ; 84 91 } 85 92 93 /* 94 *\brief Sending value of a variable with its id from client to server 95 * 96 */ 97 void CVariable::sendValue() 98 { 99 CContext* context=CContext::getCurrent() ; 100 if (!context->hasServer) 101 { 102 CContextClient* client=context->client ; 103 104 CEventClient event(this->getType(),EVENT_ID_VARIABLE_VALUE) ; 105 if (client->isServerLeader()) 106 { 107 CMessage msg ; 108 msg<<this->getId() ; 109 msg<<content ; 110 event.push(client->getServerLeader(),1,msg) ; 111 client->sendEvent(event) ; 112 } 113 else client->sendEvent(event) ; 114 } 115 } 116 117 /* 118 *\brief Receive value of a variable with its id from client to server 119 * 120 */ 121 void CVariable::recvValue(CEventServer& event) 122 { 123 CBufferIn* buffer=event.subEvents.begin()->buffer; 124 string id; 125 *buffer>>id ; 126 get(id)->recvValue(*buffer); 127 } 128 129 130 /* 131 *\brief Receive value of a variable with its id from client to server 132 * 133 */ 134 void CVariable::recvValue(CBufferIn& buffer) 135 { 136 string str ; 137 buffer>>str; 138 setContent(str); 139 } 140 141 bool CVariable::dispatchEvent(CEventServer& event) 142 { 143 if (SuperClass::dispatchEvent(event)) return true ; 144 else 145 { 146 switch(event.type) 147 { 148 case EVENT_ID_VARIABLE_VALUE : 149 recvValue(event) ; 150 return true ; 151 break ; 152 153 default : 154 ERROR("bool CVariable::dispatchEvent(CEventServer& event)",<<"Unknown Event") ; 155 return false ; 156 } 157 } 158 } 159 86 160 /* 87 161 void CVariable::toBinary(StdOStream & os) const -
XIOS/trunk/src/node/variable.hpp
r472 r489 15 15 class CVariableAttributes; 16 16 class CVariable; 17 17 class CContext; 18 18 ///-------------------------------------------------------------- 19 19 … … 29 29 , public CVariableAttributes 30 30 { 31 enum EEventId 32 { 33 EVENT_ID_VARIABLE_VALUE 34 }; 35 31 36 /// typedef /// 32 37 typedef CObjectTemplate<CVariable> SuperClass; … … 52 57 enum EVarType 53 58 { 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 56 61 /// Autres /// 57 62 virtual void parse(xml::CXMLNode & node); … … 60 65 /// Accesseur /// 61 66 const StdString & getContent (void) const; 62 63 67 68 void setContent(const StdString& content); 69 70 64 71 template <typename T> inline T getData(void) const; 65 72 template <typename T> inline void setData(T data); 73 66 74 template <typename T, StdSize N> 67 75 inline void getData(CArray<T, N>& _data_array) const; 68 76 69 77 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 71 87 public : 72 88 73 89 /// Accesseurs statiques /// 74 90 static StdString GetName(void); … … 85 101 inline bool CVariable::getData(void) const 86 102 { 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 ; 89 105 else ERROR("CVariable::getdata()", 90 106 << "Cannot convert string <" << content << "> into type required" ); 91 107 return false ; 92 } 93 108 } 109 94 110 template <typename T> 95 111 inline T CVariable::getData(void) const 96 112 { 97 113 T retval ; 98 std::stringstream sstr(std::stringstream::in | std::stringstream::out); 114 std::stringstream sstr(std::stringstream::in | std::stringstream::out); 99 115 sstr<<content ; 100 116 sstr>>retval ; … … 102 118 << "Cannot convert string <" << content << "> into type required" ); 103 119 return retval ; 104 } 120 } 105 121 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 } 106 136 107 137 ///--------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.