Changeset 2274
- Timestamp:
- 12/09/21 12:28:20 (2 years ago)
- Location:
- XIOS/dev/dev_ym/XIOS_COUPLING/src
- Files:
-
- 3 added
- 32 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/client.cpp
r2266 r2274 17 17 #include <cstdio> 18 18 #include "workflow_graph.hpp" 19 #include "release_static_allocation.hpp" 19 20 20 21 namespace xios … … 422 423 423 424 getPoolRessource()->createService(contextComm, id, 0, CServicesManager::CLIENT, 1) ; 424 getPoolRessource()->createService(contextComm, CXios::defaultServerId, 0, CServicesManager::IO_SERVER, 1) ;425 getPoolRessource()->createService(contextComm, id+"_"+CXios::defaultServerId, 0, CServicesManager::IO_SERVER, 1) ; 425 426 426 427 if (commRank==0) while (!CXios::getServicesManager()->hasService(getPoolRessource()->getId(), id, 0)) { CXios::getDaemonsManager()->eventLoop();} … … 488 489 CTimer::get("XIOS").suspend() ; 489 490 CXios::finalizeDaemonsManager() ; 491 finalizePoolRessource() ; 490 492 CContext::removeAllContexts() ; // free memory for related context 491 493 492 494 493 495 if (!is_MPI_Initialized) … … 507 509 report(0)<< " Memory report : increasing it by a factor will increase performance, depending of the volume of data wrote in file at each time step of the file"<<endl ; 508 510 report(100)<<CTimer::getAllCumulatedTime()<<endl ; 511 CWorkflowGraph::drawWorkFlowGraph_client(); 512 513 xios::releaseStaticAllocation() ; 514 515 } 509 516 510 CWorkflowGraph::drawWorkFlowGraph_client(); 511 } 512 517 void CClient::finalizePoolRessource() 518 { 519 delete poolRessource_ ; poolRessource_=nullptr ; 520 } 513 521 514 522 /*! -
XIOS/dev/dev_ym/XIOS_COUPLING/src/client.hpp
r2212 r2274 45 45 static void closeErrorStream(); 46 46 static CPoolRessource* getPoolRessource(void) { return poolRessource_ ; } 47 static void finalizePoolRessource() ; 47 48 48 49 static void openStream(const StdString& fileName, const StdString& ext, std::filebuf* fb); -
XIOS/dev/dev_ym/XIOS_COUPLING/src/cxios.cpp
r2243 r2274 306 306 } 307 307 308 309 308 CPoolRessource* CXios::getPoolRessource(void) 310 309 { -
XIOS/dev/dev_ym/XIOS_COUPLING/src/event_scheduler.cpp
r2230 r2274 70 70 CEventScheduler::~CEventScheduler() 71 71 { 72 72 while (!pendingSentParentRequest.empty() || !pendingRecvParentRequest.empty() || !pendingRecvChildRequest.empty() || !pendingSentChildRequest.empty()) 73 { 74 checkEvent() ; 75 } 73 76 } 74 77 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/group_factory.hpp
r1542 r2274 18 18 /// Mutateurs /// 19 19 static void SetCurrentContextId(const StdString & context); 20 static void clearCurrentContextId() {CurrContext.clear(); CurrContext.shrink_to_fit();} 20 21 21 22 template <typename U> -
XIOS/dev/dev_ym/XIOS_COUPLING/src/io/inetcdf4.cpp
r1639 r2274 763 763 { 764 764 StdString unit = this->getAttributeValue(CCFKeywords::XIOS_CF_units, &(*itList), path); 765 if (CCFConvention::XIOS_CF_Longitude_units .end() != CCFConvention::XIOS_CF_Longitude_units.find(unit))765 if (CCFConvention::XIOS_CF_Longitude_units().end() != CCFConvention::XIOS_CF_Longitude_units().find(unit)) 766 766 { 767 767 lonName = *itList; … … 785 785 { 786 786 StdString unit = this->getAttributeValue(CCFKeywords::XIOS_CF_units, &(*itList), path); 787 if (CCFConvention::XIOS_CF_Latitude_units .end() != CCFConvention::XIOS_CF_Latitude_units.find(unit))787 if (CCFConvention::XIOS_CF_Latitude_units().end() != CCFConvention::XIOS_CF_Latitude_units().find(unit)) 788 788 { 789 789 latName = *itList; … … 811 811 { 812 812 StdString unit = this->getAttributeValue(CCFKeywords::XIOS_CF_units, &varname, path); 813 return (CCFConvention::XIOS_CF_Latitude_units .end() != CCFConvention::XIOS_CF_Latitude_units.find(unit)814 || CCFConvention::XIOS_CF_Longitude_units .end() != CCFConvention::XIOS_CF_Longitude_units.find(unit));813 return (CCFConvention::XIOS_CF_Latitude_units().end() != CCFConvention::XIOS_CF_Latitude_units().find(unit) 814 || CCFConvention::XIOS_CF_Longitude_units().end() != CCFConvention::XIOS_CF_Longitude_units().find(unit)); 815 815 } 816 816 else return false ; -
XIOS/dev/dev_ym/XIOS_COUPLING/src/io/netCdf_cf_constant.hpp
r782 r2274 7 7 namespace xios 8 8 { 9 const StdString CFLatUnits[] = {"degrees_north", "degree_north", "degree_N", "degrees_N", "degreeN", "degreesN"};10 const StdString CFLonUnits[] = {"degrees_east", "degree_east", "degree_E", "degrees_E", "degreeE", "degreesE"};9 //const StdString CFLatUnits[] = {"degrees_north", "degree_north", "degree_N", "degrees_N", "degreeN", "degreesN"}; 10 //const StdString CFLonUnits[] = {"degrees_east", "degree_east", "degree_E", "degrees_E", "degreeE", "degreesE"}; 11 11 12 12 struct CCFKeywords … … 17 17 static const StdString XIOS_CF_bounds; 18 18 }; 19 const StdString CCFKeywords::XIOS_CF_units("units");20 const StdString CCFKeywords::XIOS_CF_standard_name("standard_name");21 const StdString CCFKeywords::XIOS_CF_coordinates("coordinates");22 const StdString CCFKeywords::XIOS_CF_bounds("bounds");23 19 24 20 struct CCFConvention 25 21 { 26 static const std::set<StdString> XIOS_CF_Latitude_units; 27 static const std::set<StdString> XIOS_CF_Longitude_units; 22 static const std::set<StdString>& XIOS_CF_Latitude_units() 23 { 24 if (XIOS_CF_Longitude_units_.empty()) XIOS_CF_Latitude_units_= {"degrees_north", "degree_north", "degree_N", "degrees_N", "degreeN", "degreesN"}; 25 return XIOS_CF_Latitude_units_ ; 26 } 28 27 28 static const std::set<StdString>& XIOS_CF_Longitude_units() 29 { 30 if (XIOS_CF_Longitude_units_.empty()) XIOS_CF_Longitude_units_= {"degrees_east", "degree_east", "degree_E", "degrees_E", "degreeE", "degreesE"}; 31 return XIOS_CF_Longitude_units_ ; 32 } 33 static void releaseStaticAllocation(void) { XIOS_CF_Latitude_units_.clear() ; XIOS_CF_Longitude_units_.clear() ; } 29 34 private: 30 35 CCFConvention(); 36 static std::set<StdString> XIOS_CF_Latitude_units_; 37 static std::set<StdString> XIOS_CF_Longitude_units_; 31 38 }; 32 33 const std::set<StdString> CCFConvention::XIOS_CF_Latitude_units(CFLatUnits, CFLatUnits+sizeof(CFLatUnits)/sizeof(CFLatUnits[0]));34 const std::set<StdString> CCFConvention::XIOS_CF_Longitude_units(CFLonUnits, CFLonUnits+sizeof(CFLonUnits)/sizeof(CFLonUnits[0]));35 39 36 40 } // namespace xios -
XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/pool_ressource.cpp
r2260 r2274 118 118 if (it->second->eventLoop(serviceOnly)) 119 119 { 120 delete it->second ; 120 121 services_.erase(it) ; 121 122 // don't forget to free service later … … 196 197 finalizeSignal_=true ; 197 198 for (auto it=services_.begin(); it!=services_.end() ; ++it) it->second->finalizeSignal() ; 198 } 199 199 } 200 201 CPoolRessource::~CPoolRessource() 202 { 203 delete winNotify_ ; 204 for(auto& service : services_) delete service.second ; 205 } 200 206 } -
XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/pool_ressource.hpp
r2260 r2274 23 23 public: 24 24 CPoolRessource(MPI_Comm poolComm, const std::string& Id) ; 25 ~CPoolRessource() ; 25 26 26 27 void createService(const std::string& serviceId, int type, int size, int nbPartition) ; -
XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/server_context.cpp
r2265 r2274 54 54 CServerContext::~CServerContext() 55 55 { 56 56 cout<<"Server Context destructor"<<endl; 57 57 } 58 58 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/server_context.hpp
r2260 r2274 19 19 const int& partitionId, const std::string& contextId) ; 20 20 ~CServerContext() ; 21 static void releaseStaticAllocation(void) { overlapedComm_.clear() ;} 21 22 22 23 bool createIntercomm(const string& poolId, const string& serviceId, const int& partitionId, const string& contextId, -
XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/servers_ressource.cpp
r2260 r2274 131 131 if (poolRessource_->eventLoop(serviceOnly)) 132 132 { 133 delete poolRessource_ ; 133 134 poolRessource_=nullptr ; 134 135 // don't forget to free pool ressource later … … 188 189 else return false ; 189 190 } 191 192 CServersRessource::~CServersRessource() 193 { 194 delete winNotify_ ; 195 } 190 196 } -
XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/servers_ressource.hpp
r2260 r2274 24 24 25 25 CServersRessource(MPI_Comm serverComm) ; 26 ~CServersRessource() ; 26 27 void createPool(const string& poolId, const int size) ; 27 28 void createPool(void) ; -
XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/services.cpp
r2260 r2274 42 42 name_= poolId+"::"+serviceId+"_"+oss.str(); 43 43 } 44 45 CService::~CService() 46 { 47 delete eventScheduler_ ; 48 delete winNotify_ ; 49 for(auto& it : contexts_) delete it.second ; 50 } 51 44 52 45 53 void CService::createContext( const std::string& poolId, const std::string& serviceId, const int& partitionId, const std::string& contextId) … … 121 129 if (it->second->eventLoop(serviceOnly)) 122 130 { 131 delete it->second ; 123 132 contexts_.erase(it) ; 124 133 // destroy server_context -> to do later … … 235 244 auto& arg=notifyInCreateContext_ ; 236 245 string poolId = get<0>(arg) ; 237 string &serviceId = get<1>(arg) ;246 string serviceId = get<1>(arg) ; 238 247 int partitionId = get<2>(arg) ; 239 248 string contextId = get<3>(arg) ; 240 contexts_[contextId] = new CServerContext(this, serviceComm_, poolId, serviceId, partitionId, contextId) ; 249 contexts_[contextId] = new CServerContext(this, serviceComm_, poolId, serviceId, partitionId, contextId) ; 241 250 } 242 251 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/services.hpp
r2260 r2274 21 21 CService(MPI_Comm serviceComm, const std::string& poolId, const std::string& serviceId, const int& partitionId, 22 22 int type, int nbPartitions) ; 23 ~CService() ; 24 23 25 bool eventLoop(bool serviceOnly=false) ; 24 26 void createContext(const std::string& poolId, const std::string& serviceId, const int& partitionId, const std::string& contextId) ; -
XIOS/dev/dev_ym/XIOS_COUPLING/src/mem_checker.hpp
r2212 r2274 20 20 static void disable(void) { enabled_=false ;} 21 21 static void enable(void) {enabled_=true ;} 22 static void release(void) {allMemChecker_.clear();} 22 23 private: 23 24 static void check(void) ; -
XIOS/dev/dev_ym/XIOS_COUPLING/src/memtrack.cpp
r2267 r2274 494 494 } 495 495 496 //xios::CAddr2line myaddr2line ;496 xios::CAddr2line myaddr2line ; 497 497 size_t i = 0 ; 498 498 for(auto& it : orderedBlocks) … … 510 510 sprintf(strbuff,"... %s:%d\n", fileName, lineNum); 511 511 memReport<<strbuff ; 512 //pBlockHeader->backTrace(memReport, myaddr2line);513 pBlockHeader->backTrace(memReport);512 pBlockHeader->backTrace(memReport, myaddr2line); 513 //pBlockHeader->backTrace(memReport); 514 514 i++ ; 515 515 } -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp
r2267 r2274 59 59 } 60 60 CATCH 61 62 void CAxis::releaseStaticAllocation(void) 63 { 64 transformationMapList_.clear() ; 65 CTransformation<CAxis>::unregisterAllTransformations() ; 66 CGridTransformationFactory<CAxis>::unregisterAllTransformations() ; 67 } 61 68 62 69 ///--------------------------------------------------------------- -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp
r2270 r2274 23 23 #include "distribution_type.hpp" 24 24 #include "generic_algorithm_transformation.hpp" 25 #include "grid_transformation_factory_impl.hpp" 25 26 26 27 … … 68 69 CAxis(const CAxis & axis); // Not implemented yet. 69 70 CAxis(const CAxis * const axis); // Not implemented yet. 71 static void releaseStaticAllocation(void) ; // release static allocation on heap 70 72 71 73 static CAxis* createAxis(); -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp
r2265 r2274 63 63 for (std::vector<CContextClient*>::iterator it = clientPrimServer.begin(); it != clientPrimServer.end(); it++) delete *it; 64 64 for (std::vector<CContextServer*>::iterator it = serverPrimServer.begin(); it != serverPrimServer.end(); it++) delete *it; 65 65 if (registryIn!=nullptr) delete registryIn ; 66 if (registryOut!=nullptr) delete registryOut ; 66 67 } 67 68 … … 100 101 CATCH 101 102 103 void CContext::releaseStaticAllocation(void) 104 TRY 105 { 106 CDomain::releaseStaticAllocation(); 107 CAxis::releaseStaticAllocation(); 108 CScalar::releaseStaticAllocation(); 109 if (root) root.reset() ; 110 } 111 CATCH 112 102 113 //---------------------------------------------------------------- 103 114 … … 326 337 #include "node_type.conf" 327 338 */ 339 CObjectFactory::deleteAllContexts<CContext>() ; 340 CObjectFactory::deleteAllContexts<CContextGroup>() ; 341 CObjectFactory::clearCurrentContextId(); 342 CGroupFactory::clearCurrentContextId(); 328 343 } 329 344 ///--------------------------------------------------------------- … … 538 553 if (commRank==0) 539 554 { 540 if (attached_mode) CXios::getContextsManager()->createServerContext(CClient::getPoolRessource()->getId(), CXios::defaultServerId, 0, getContextId()) ;555 if (attached_mode) CXios::getContextsManager()->createServerContext(CClient::getPoolRessource()->getId(), getContextId()+"_"+CXios::defaultServerId, 0, getContextId()) ; 541 556 else if (CXios::usingServer2) CXios::getContextsManager()->createServerContext(CXios::defaultPoolId, CXios::defaultGathererId, 0, getContextId()) ; 542 557 else CXios::getContextsManager()->createServerContext(CXios::defaultPoolId, CXios::defaultServerId, 0, getContextId()) ; … … 547 562 if (attached_mode) 548 563 { 549 parentServerContext_->createIntercomm(CClient::getPoolRessource()->getId(), CXios::defaultServerId, 0, getContextId(), intraComm_,564 parentServerContext_->createIntercomm(CClient::getPoolRessource()->getId(), getContextId()+"_"+CXios::defaultServerId, 0, getContextId(), intraComm_, 550 565 interCommClient, interCommServer) ; 551 566 int type ; … … 811 826 closeAllFile(); 812 827 client->releaseBuffers(); 828 server->releaseBuffers(); 813 829 } 814 830 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp
r2265 r2274 82 82 /// Destructeur /// 83 83 virtual ~CContext(void); 84 85 static void releaseStaticAllocation(void) ; 84 86 85 87 //--------------------------------------------------------- … … 229 231 // Get context root 230 232 static CContextGroup* getRoot(void); 231 233 232 234 // Set current context 233 235 static void setCurrent(const string& id); … … 329 331 std::vector<std::string> primServerId_; 330 332 331 CRegistry* registryIn ; //!< input registry which is read from file332 CRegistry* registryOut ; //!< output registry which will be written into file at the finalize333 CRegistry* registryIn=nullptr ; //!< input registry which is read from file 334 CRegistry* registryOut=nullptr ; //!< output registry which will be written into file at the finalize 333 335 334 336 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp
r2267 r2274 25 25 #include "grid_gatherer_connector.hpp" 26 26 #include "transformation_path.hpp" 27 #include "grid_transformation_factory_impl.hpp" 27 28 28 29 #include <algorithm> … … 62 63 } 63 64 65 void CDomain::releaseStaticAllocation(void) 66 { 67 transformationMapList_.clear() ; 68 CTransformation<CDomain>::unregisterAllTransformations() ; 69 CGridTransformationFactory<CDomain>::unregisterAllTransformations() ; 70 } 64 71 ///--------------------------------------------------------------- 65 72 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp
r2270 r2274 71 71 CDomain(const CDomain & domain); // Not implemented yet. 72 72 CDomain(const CDomain * const domain); // Not implemented yet. 73 73 static void releaseStaticAllocation(void) ; // release static allocation on heap 74 74 75 static CDomain* createDomain(); 75 76 static CDomain* get(const string& id, bool noError=false) ; //<! return domain pointer using id -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.cpp
r2267 r2274 32 32 { /* Ne rien faire de plus */ } 33 33 34 void CScalar::releaseStaticAllocation(void) 35 { 36 transformationMapList_.clear() ; 37 CTransformation<CScalar>::unregisterAllTransformations() ; 38 CGridTransformationFactory<CScalar>::unregisterAllTransformations() ; 39 } 40 34 41 std::map<StdString, ETranformationType> CScalar::transformationMapList_ = std::map<StdString, ETranformationType>(); 35 42 bool CScalar::dummyTransformationMapList_ = CScalar::initializeTransformationMap(CScalar::transformationMapList_); -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.hpp
r2270 r2274 20 20 #include "distribution_type.hpp" 21 21 #include "generic_algorithm_transformation.hpp" 22 #include "grid_transformation_factory_impl.hpp" 22 23 23 24 … … 67 68 CScalar(const CScalar & var); // Not implemented yet. 68 69 CScalar(const CScalar * const var); // Not implemented yet. 69 70 static void releaseStaticAllocation(void) ; // release static allocation on heap 71 70 72 /// Destructeur /// 71 73 virtual ~CScalar(void); -
XIOS/dev/dev_ym/XIOS_COUPLING/src/object_factory.hpp
r2265 r2274 21 21 /// Accesseurs /// 22 22 static StdString & GetCurrentContextId(void); 23 static void clearCurrentContextId(void) {CurrContext.clear(); CurrContext.shrink_to_fit(); } 23 24 24 25 template <typename U> -
XIOS/dev/dev_ym/XIOS_COUPLING/src/parse_expr/operator_expr.hpp
r1481 r2274 435 435 } 436 436 437 void release(void) 438 { 439 opScalar.clear(); 440 opScalarScalar.clear(); 441 opScalarScalarScalar.clear(); 442 opField.clear(); 443 opFieldField.clear(); 444 opFieldScalar.clear(); 445 opScalarField.clear(); 446 opScalarScalarField.clear(); 447 opScalarFieldScalar.clear(); 448 opScalarFieldField.clear(); 449 opFieldScalarScalar.clear(); 450 opFieldScalarField.clear(); 451 opFieldFieldScalar.clear(); 452 opFieldFieldField.clear(); 453 } 437 454 }; 438 455 439 456 extern COperatorExpr operatorExpr; 457 440 458 } 441 459 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/server.cpp
r2266 r2274 21 21 #include <cstdio> 22 22 #include "workflow_graph.hpp" 23 #include "release_static_allocation.hpp" 24 23 25 24 26 … … 207 209 208 210 // Delete CContext 209 CObjectTemplate<CContext>::cleanStaticDataStructure();211 //CObjectTemplate<CContext>::cleanStaticDataStructure(); 210 212 } 211 213 … … 314 316 // MPI_Comm_free(&intraComm); 315 317 CXios::finalizeDaemonsManager(); 316 CContext::removeAllContexts() ; // free memory for related context 317 318 finalizeServersRessource(); 319 320 CContext::removeAllContexts() ; // free memory for related context 321 318 322 if (!is_MPI_Initialized) 319 323 { … … 325 329 report(0)<<"Performance report : Ratio : "<<CTimer::get("Process events").getCumulatedTime()/CTimer::get("XIOS server").getCumulatedTime()*100.<<"%"<<endl ; 326 330 report(100)<<CTimer::getAllCumulatedTime()<<endl ; 327 331 328 332 CWorkflowGraph::drawWorkFlowGraph_server(); 333 xios::releaseStaticAllocation() ; // free memory from static allocation 329 334 } 330 335 … … 420 425 serversRessource_ = new CServersRessource(serverComm) ; 421 426 } 427 428 void CServer::finalizeServersRessource(void) 429 { 430 delete serversRessource_; serversRessource_=nullptr ; 431 } 422 432 } -
XIOS/dev/dev_ym/XIOS_COUPLING/src/server.hpp
r2212 r2274 67 67 static CServersRessource* getServersRessource(void) { return serversRessource_;} 68 68 static void launchServersRessource(MPI_Comm commServer) ; 69 static void finalizeServersRessource(void) ; 69 70 static void openStream(const StdString& fileName, const StdString& ext, std::filebuf* fb); 70 71 … … 75 76 static StdOFStream m_infoStream; 76 77 static StdOFStream m_errorStream; 77 static CServersRessource* serversRessource_ ;78 static CServersRessource* serversRessource_ ; 78 79 }; 79 80 } -
XIOS/dev/dev_ym/XIOS_COUPLING/src/timer.hpp
r1750 r2274 25 25 static CTimer& get(std::string name, bool trace=true); 26 26 static std::string getAllCumulatedTime(void) ; 27 static void release(void) { allTimer.clear() ;} 27 28 }; 28 29 } -
XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_transformation_factory_impl.hpp
r2270 r2274 60 60 static bool unregisterTransformation(ETranformationType transType); 61 61 static bool initializeTransformation_; 62 static void unregisterAllTransformations(void) ; 62 63 }; 63 64 … … 98 99 bool CGridTransformationFactory<T>::registerTransformation(ETranformationType transType, CreateTransformationCallBack createFn) 99 100 { 100 if ( 0== transformationCreationCallBacks_)101 if (nullptr == transformationCreationCallBacks_) 101 102 transformationCreationCallBacks_ = new CallBackMap(); 102 103 … … 110 111 } 111 112 113 template<typename T> 114 void CGridTransformationFactory<T>::unregisterAllTransformations(void) 115 { 116 if (nullptr != transformationCreationCallBacks_) 117 { 118 transformationCreationCallBacks_->clear() ; 119 delete transformationCreationCallBacks_; 120 } 121 } 112 122 113 123 } 124 114 125 #endif // __XIOS_GRID_TRANSFORMATION_FACTORY_HPP__ -
XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/transformation.hpp
r2270 r2274 53 53 public: 54 54 virtual ~CTransformation(void) {} 55 55 static void unregisterAllTransformations(); 56 56 protected: 57 57 typedef CTransformation<T>* (*createTransformationCallBack)(const StdString&, xml::CXMLNode*); … … 62 62 static bool registerTransformation(ETranformationType transType, tuple<createTransformationCallBack,getIdTransformationCallBack> callBackFunctions); 63 63 static bool unregisterTransformation(ETranformationType transType); 64 65 64 66 65 67 protected: … … 113 115 } 114 116 117 template<typename T> 118 void CTransformation<T>::unregisterAllTransformations(void) 119 { 120 if (0 != callBacks_) 121 { 122 callBacks_->clear(); 123 delete callBacks_ ; 124 } 125 } 126 115 127 } // namespace xios 116 128
Note: See TracChangeset
for help on using the changeset viewer.