Changeset 549 for XIOS/trunk/src/node/context.cpp
- Timestamp:
- 01/26/15 14:39:26 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/context.cpp
r545 r549 17 17 namespace xios { 18 18 19 shared_ptr<CContextGroup> CContext::root 19 shared_ptr<CContextGroup> CContext::root; 20 20 21 21 /// ////////////////////// Définitions ////////////////////// /// … … 33 33 CContext::~CContext(void) 34 34 { 35 if (hasClient) delete client 36 if (hasServer) delete server 35 if (hasClient) delete client; 36 if (hasServer) delete server; 37 37 } 38 38 … … 50 50 CContextGroup* CContext::getRoot(void) 51 51 { 52 if (root.get()==NULL) root=shared_ptr<CContextGroup>(new CContextGroup(xml::CXMLNode::GetRootName())) 52 if (root.get()==NULL) root=shared_ptr<CContextGroup>(new CContextGroup(xml::CXMLNode::GetRootName())); 53 53 return root.get(); 54 54 } … … 73 73 { 74 74 this->calendar = newCalendar; 75 calendar_type.fromString(this->calendar->getId());76 start_date.setValue(this->calendar->getInitDate());77 }78 79 //----------------------------------------------------------------80 //! Process all information of calendar81 void CContext::solveCalendar(void)82 {83 if (calendar_type.isEmpty())84 ERROR(" CContext::solveCalendar(void)",85 << "[ context id = " << this->getId() << " ] "86 << "Impossible to define a calendar: the calendar type is missing.");87 if (start_date.isEmpty())88 ERROR(" CContext::solveCalendar(void)",89 << "[ context id = " << this->getId() << " ] "90 << "Impossible to define a calendar: the start date is missing.");91 if (timestep.isEmpty())92 ERROR(" CContext::solveCalendar(void)",93 << "[ context id = " << this->getId() << " ] "94 << "Impossible to define a calendar: the timestep is missing.");95 96 if (this->calendar)97 {98 if (this->calendar->getId() != calendar_type.getStringValue()99 || this->calendar->getInitDate() != start_date.getValue()100 || (time_origin.isEmpty() && this->calendar->getTimeOrigin() != start_date.getValue())101 || (!time_origin.isEmpty() && this->calendar->getTimeOrigin() != time_origin.getValue())102 || this->calendar->getTimeStep() != timestep.getValue())103 ERROR(" CContext::solveCalendar(void)",104 << "[ context id = " << this->getId() << " ] "105 << "Impossible to define a calendar again with new parameters.");106 return;107 }108 109 #define DECLARE_CALENDAR(MType, eType) \110 if (calendar_type.getValue() == eType) \111 { \112 if (time_origin.isEmpty()) \113 this->calendar = boost::shared_ptr<CCalendar> \114 (new C##MType##Calendar(start_date.getValue())); \115 else this->calendar = boost::shared_ptr<CCalendar> \116 (new C##MType##Calendar(start_date.getValue(), time_origin.getValue())); \117 \118 if (!start_date.getValue().setRelCalendar(*this->calendar)) \119 ERROR("CContext::solveCalendar(void)", \120 "start_date: Bad format or date not conform to the calendar"); \121 if (!time_origin.getValue().setRelCalendar(*this->calendar)) \122 ERROR("CContext::solveCalendar(void)", \123 "time_origin: Bad format or date not conform to the calendar"); \124 \125 this->calendar->setTimeStep(this->timestep.getValue()); \126 \127 return; \128 }129 #include "calendar_type.conf"130 #undef DECLARE_CALENDAR131 132 ERROR("CContext::solveCalendar(void)",133 << "[ calendar_type = " << calendar_type.getStringValue() << " ] "134 << "The calendar is not properly handled!");135 75 } 136 76 … … 182 122 #define DECLARE_NODE(Name_, name_) \ 183 123 if (name.compare(C##Name_##Definition::GetDefName()) == 0) \ 184 { C##Name_##Definition::create(C##Name_##Definition::GetDefName()) -> parse(node) 124 { C##Name_##Definition::create(C##Name_##Definition::GetDefName()) -> parse(node); continue; } 185 125 #define DECLARE_NODE_PAR(Name_, name_) 186 126 #include "node_type.conf" … … 200 140 void CContext::ShowTree(StdOStream & out) 201 141 { 202 StdString currentContextId = CContext::getCurrent() -> getId() 142 StdString currentContextId = CContext::getCurrent() -> getId(); 203 143 std::vector<CContext*> def_vector = 204 144 CContext::getRoot()->getChildList(); … … 285 225 // { 286 226 // if (!this->hasId()) return; 287 // vector<CField*> allField = CField::getAll() 227 // vector<CField*> allField = CField::getAll(); 288 228 //// = CObjectTemplate<CField>::GetAllVectobject(this->getId()); 289 229 // std::vector<CField*>::iterator … … 301 241 void CContext::CleanTree(void) 302 242 { 303 #define DECLARE_NODE(Name_, name_) C##Name_## Group::ClearAllAttributes();243 #define DECLARE_NODE(Name_, name_) C##Name_##Definition::ClearAllAttributes(); 304 244 #define DECLARE_NODE_PAR(Name_, name_) 305 245 #include "node_type.conf" … … 310 250 void CContext::initClient(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtServer) 311 251 { 312 hasClient=true 313 client = new CContextClient(this,intraComm, interComm, cxtServer) 252 hasClient=true; 253 client = new CContextClient(this,intraComm, interComm, cxtServer); 314 254 } 315 255 … … 325 265 bool CContext::isInitialized(void) 326 266 { 327 return hasClient 267 return hasClient; 328 268 } 329 269 … … 331 271 void CContext::initServer(MPI_Comm intraComm,MPI_Comm interComm) 332 272 { 333 hasServer=true 334 server = new CContextServer(this,intraComm,interComm) 273 hasServer=true; 274 server = new CContextServer(this,intraComm,interComm); 335 275 } 336 276 … … 338 278 bool CContext::eventLoop(void) 339 279 { 340 return server->eventLoop() 280 return server->eventLoop(); 341 281 } 342 282 … … 346 286 if (hasClient && !hasServer) 347 287 { 348 client->finalize() 288 client->finalize(); 349 289 } 350 290 if (hasServer) 351 291 { 352 closeAllFile() 292 closeAllFile(); 353 293 } 354 294 } … … 385 325 this->sendAllAttributesToServer(); 386 326 327 // Send all attributes of current calendar 328 CCalendarWrapper::get(CCalendarWrapper::GetDefName())->sendAllAttributesToServer(); 329 387 330 // We have enough information to send to server 388 331 // First of all, send all enabled files … … 428 371 //// this->findEnabledFiles(); 429 372 // 430 // this->processEnabledFiles() 373 // this->processEnabledFiles(); 431 374 // 432 375 // this->solveAllGridRef(); … … 445 388 // 446 389 // 447 // this->processEnabledFiles() 390 // this->processEnabledFiles(); 448 391 449 392 /* … … 464 407 if (hasClient && !hasServer) CleanTree(); // Only on client side?? 465 408 // if (hasClient) CleanTree(); 466 if (hasClient) sendCreateFileHeader() 409 if (hasClient) sendCreateFileHeader(); 467 410 } 468 411 … … 523 466 524 467 // Résolution des héritages par référence au niveau des fichiers. 525 const vector<CFile*> allFiles=CFile::getAll() 468 const vector<CFile*> allFiles=CFile::getAll(); 526 469 const vector<CGrid*> allGrids= CGrid::getAll(); 527 470 … … 580 523 { 581 524 582 if (SuperClass::dispatchEvent(event)) return true 525 if (SuperClass::dispatchEvent(event)) return true; 583 526 else 584 527 { … … 586 529 { 587 530 case EVENT_ID_CLOSE_DEFINITION : 588 recvCloseDefinition(event) 589 return true 590 break 531 recvCloseDefinition(event); 532 return true; 533 break; 591 534 case EVENT_ID_UPDATE_CALENDAR : 592 recvUpdateCalendar(event) 593 return true 594 break 535 recvUpdateCalendar(event); 536 return true; 537 break; 595 538 case EVENT_ID_CREATE_FILE_HEADER : 596 recvCreateFileHeader(event) 597 return true 598 break 539 recvCreateFileHeader(event); 540 return true; 541 break; 599 542 case EVENT_ID_POST_PROCESS: 600 recvPostProcessing(event) 601 return true 602 break 543 recvPostProcessing(event); 544 return true; 545 break; 603 546 default : 604 547 ERROR("bool CContext::dispatchEvent(CEventServer& event)", 605 <<"Unknown Event") 606 return false 548 <<"Unknown Event"); 549 return false; 607 550 } 608 551 } … … 612 555 void CContext::sendCloseDefinition(void) 613 556 { 614 CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION) 557 CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION); 615 558 if (client->isServerLeader()) 616 559 { 617 CMessage msg 618 msg<<this->getIdServer() 619 event.push(client->getServerLeader(),1,msg) 620 client->sendEvent(event) 621 } 622 else client->sendEvent(event) 560 CMessage msg; 561 msg<<this->getIdServer(); 562 event.push(client->getServerLeader(),1,msg); 563 client->sendEvent(event); 564 } 565 else client->sendEvent(event); 623 566 } 624 567 … … 629 572 CBufferIn* buffer=event.subEvents.begin()->buffer; 630 573 string id; 631 *buffer>>id 574 *buffer>>id; 632 575 get(id)->closeDefinition(); 633 576 } … … 638 581 if (!hasServer) 639 582 { 640 CEventClient event(getType(),EVENT_ID_UPDATE_CALENDAR) 583 CEventClient event(getType(),EVENT_ID_UPDATE_CALENDAR); 641 584 if (client->isServerLeader()) 642 585 { 643 CMessage msg 644 msg<<this->getIdServer()<<step 645 event.push(client->getServerLeader(),1,msg) 646 client->sendEvent(event) 586 CMessage msg; 587 msg<<this->getIdServer()<<step; 588 event.push(client->getServerLeader(),1,msg); 589 client->sendEvent(event); 647 590 } 648 else client->sendEvent(event) 591 else client->sendEvent(event); 649 592 } 650 593 } … … 656 599 CBufferIn* buffer=event.subEvents.begin()->buffer; 657 600 string id; 658 *buffer>>id 659 get(id)->recvUpdateCalendar(*buffer) 601 *buffer>>id; 602 get(id)->recvUpdateCalendar(*buffer); 660 603 } 661 604 … … 663 606 void CContext::recvUpdateCalendar(CBufferIn& buffer) 664 607 { 665 int step 666 buffer>>step 667 updateCalendar(step) 608 int step; 609 buffer>>step; 610 updateCalendar(step); 668 611 } 669 612 … … 671 614 void CContext::sendCreateFileHeader(void) 672 615 { 673 CEventClient event(getType(),EVENT_ID_CREATE_FILE_HEADER) 616 CEventClient event(getType(),EVENT_ID_CREATE_FILE_HEADER); 674 617 if (client->isServerLeader()) 675 618 { 676 CMessage msg 677 msg<<this->getIdServer() 678 event.push(client->getServerLeader(),1,msg) 679 client->sendEvent(event) 680 } 681 else client->sendEvent(event) 619 CMessage msg; 620 msg<<this->getIdServer(); 621 event.push(client->getServerLeader(),1,msg); 622 client->sendEvent(event); 623 } 624 else client->sendEvent(event); 682 625 } 683 626 … … 687 630 CBufferIn* buffer=event.subEvents.begin()->buffer; 688 631 string id; 689 *buffer>>id 690 get(id)->recvCreateFileHeader(*buffer) 632 *buffer>>id; 633 get(id)->recvCreateFileHeader(*buffer); 691 634 } 692 635 … … 694 637 void CContext::recvCreateFileHeader(CBufferIn& buffer) 695 638 { 696 createFileHeader() 639 createFileHeader(); 697 640 } 698 641 … … 702 645 if (!hasServer) 703 646 { 704 CEventClient event(getType(),EVENT_ID_POST_PROCESS) 647 CEventClient event(getType(),EVENT_ID_POST_PROCESS); 705 648 if (client->isServerLeader()) 706 649 { 707 CMessage msg 650 CMessage msg; 708 651 msg<<this->getIdServer(); 709 event.push(client->getServerLeader(),1,msg) 710 client->sendEvent(event) 652 event.push(client->getServerLeader(),1,msg); 653 client->sendEvent(event); 711 654 } 712 else client->sendEvent(event) 655 else client->sendEvent(event); 713 656 } 714 657 } … … 726 669 void CContext::recvPostProcessing(CBufferIn& buffer) 727 670 { 671 CCalendarWrapper::get(CCalendarWrapper::GetDefName())->createCalendar(); 728 672 postProcessing(); 729 673 // std::cout << "server context " << *this << std::endl; … … 751 695 if (isPostProcessed) return; 752 696 753 // Solve calendar for both side: client and server 754 this->solveCalendar(); 697 // Make sure the calendar was correctly created 698 if (!calendar) 699 ERROR("CContext::postProcessing()", << "A calendar must be defined for the context \"" << getId() << "!\"") 700 else if (calendar->getTimeStep() == NoneDu) 701 ERROR("CContext::postProcessing()", << "A timestep must be defined for the context \"" << getId() << "!\"") 755 702 756 703 // Find all inheritance in xml structure … … 932 879 void CContext::updateCalendar(int step) 933 880 { 934 info(50)<<"updateCalendar : before : "<<calendar->getCurrentDate()<<endl 935 calendar->update(step) 936 info(50)<<"updateCalendar : after : "<<calendar->getCurrentDate()<<endl 881 info(50)<<"updateCalendar : before : "<<calendar->getCurrentDate()<<endl; 882 calendar->update(step); 883 info(50)<<"updateCalendar : after : "<<calendar->getCurrentDate()<<endl; 937 884 } 938 885 … … 940 887 void CContext::createFileHeader(void ) 941 888 { 942 vector<CFile*>::const_iterator it 889 vector<CFile*>::const_iterator it; 943 890 944 891 for (it=enabledFiles.begin(); it != enabledFiles.end(); it++) … … 951 898 CContext* CContext::getCurrent(void) 952 899 { 953 return CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()).get() 900 return CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()).get(); 954 901 } 955 902 … … 971 918 CContext* CContext::create(const StdString& id) 972 919 { 973 CContext::setCurrent(id) 920 CContext::setCurrent(id); 974 921 975 922 bool hasctxt = CContext::has(id); 976 923 CContext* context = CObjectFactory::CreateObject<CContext>(id).get(); 977 getRoot() 924 getRoot(); 978 925 if (!hasctxt) CGroupFactory::AddChild(root, context->getShared()); 979 926
Note: See TracChangeset
for help on using the changeset viewer.