X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2FCppContainer.cxx;h=af5aec92ac6ecb97b2a6ace9ab8da26ea109aedd;hb=7dd1d2d397e8222594e688c681a098b5459110fe;hp=1711814b052f66b5e43af5c83b7db4ca8f217bba;hpb=3bda66c84e705ee4b63fe805272217b2822865af;p=modules%2Fyacs.git diff --git a/src/runtime/CppContainer.cxx b/src/runtime/CppContainer.cxx index 1711814b0..af5aec92a 100644 --- a/src/runtime/CppContainer.cxx +++ b/src/runtime/CppContainer.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2006-2014 CEA/DEN, EDF R&D +// Copyright (C) 2006-2016 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -37,6 +37,8 @@ using namespace YACS::ENGINE; +char CppContainer::KIND[]="Cpp"; + //#define _DEVDEBUG_ #include "YacsTrace.hxx" @@ -70,19 +72,29 @@ void CppContainer::lock() void CppContainer::unLock() { - _mutex.unlock(); + _mutex.unLock(); +} + +std::string CppContainer::getKind() const +{ + return KIND; } -bool CppContainer::isAlreadyStarted(const ComponentInstance *inst) const +bool CppContainer::isAlreadyStarted(const Task *askingNode) const { return NULL != _trueCont; } -void CppContainer::start(const ComponentInstance *inst) throw (YACS::Exception) +void CppContainer::start(const Task *askingNode) throw (YACS::Exception) { _trueCont = LocalContainer::get(); } +void CppContainer::shutdown(int level) +{ + +} + Container *CppContainer::clone() const { if(_isAttachedOnCloning) @@ -100,60 +112,58 @@ Container *CppContainer::cloneAlways() const } bool CppContainer::loadComponentLibrary(const std::string & componentName) throw (YACS::Exception) -{ - if (_trueCont) { - LocalLibrary L = _trueCont->loadComponentLibrary(componentName); - return L.good(); + if (_trueCont) + { + LocalLibrary L = _trueCont->loadComponentLibrary(componentName); + return L.good(); } - else + else { - std::string mesg = "CppContainer not started"; - throw YACS::Exception(mesg); + std::string mesg = "CppContainer not started"; + throw YACS::Exception(mesg); + } + return false; } - return false; -} CppComponent * CppContainer::createComponentInstance(const std::string & componentName, int /* studyID */) { - DEBTRACE("CppContainer::createComponentInstance"); - if (_trueCont) - return _trueCont->createComponentInstance(componentName.c_str()); - else + DEBTRACE("CppContainer::createComponentInstance"); + if (_trueCont) + return _trueCont->createComponentInstance(componentName.c_str()); + else { - std::string mesg = "CppContainer not started"; - throw YACS::Exception(mesg); + std::string mesg = "CppContainer not started"; + throw YACS::Exception(mesg); } } void CppContainer::createInternalInstance(const std::string & name, void *&obj, RunFunction &r, TerminateFunction &t) { - DEBTRACE("CppContainer::createInternalInstance"); - if (_trueCont) - _trueCont->createInternalInstance(name.c_str(), obj, r, t); - else - { - std::string mesg = "CppContainer not started"; - throw YACS::Exception(mesg); - } + DEBTRACE("CppContainer::createInternalInstance"); + if (_trueCont) + _trueCont->createInternalInstance(name.c_str(), obj, r, t); + else + { + std::string mesg = "CppContainer not started"; + throw YACS::Exception(mesg); + } } -void CppContainer::unregisterComponentInstance(CppComponent * C) +void CppContainer::unregisterComponentInstance(CppComponent *compo) { - if (_trueCont) - { - _trueCont->unregisterComponentInstance(C); - } + if (_trueCont) + _trueCont->unregisterComponentInstance(compo); } -std::string CppContainer::getPlacementId(const ComponentInstance *inst) const +std::string CppContainer::getPlacementId(const Task *askingNode) const { return "/"; } -std::string CppContainer::getFullPlacementId(const ComponentInstance *inst) const +std::string CppContainer::getFullPlacementId(const Task *askingNode) const { return "/"; } @@ -189,31 +199,31 @@ LocalContainer * LocalContainer::get() void LocalContainer::destroy() { - if (NULL == _singleton) - return; - - // destroy all component instances - _instance_mapMutex.lock(); // lock - std::multimap::iterator iI, iJ; - for (iI=_instance_map.begin(); iI != _instance_map.end(); iI = iJ) + if (NULL == _singleton) + return; + + // destroy all component instances + _instance_mapMutex.lock(); // lock + std::multimap::iterator iI, iJ; + for (iI=_instance_map.begin(); iI != _instance_map.end(); iI = iJ) { iJ = iI++; iI->second->setContainer(NULL); delete iI->second; } - _instance_map.clear(); - _instance_mapMutex.unlock(); // unlock - - // unload all dynamic libraries - _library_mapMutex.lock(); - std::map::iterator iL; - for (iL=_library_map.begin(); iL != _library_map.end(); iL++) - dlclose(iL->second.handle); - _library_map.clear(); - _library_mapMutex.unlock(); - - delete _singleton; - _singleton = NULL; + _instance_map.clear(); + _instance_mapMutex.unLock(); // unlock + + // unload all dynamic libraries + _library_mapMutex.lock(); + std::map::iterator iL; + for (iL=_library_map.begin(); iL != _library_map.end(); iL++) + dlclose(iL->second.handle); + _library_map.clear(); + _library_mapMutex.unLock(); + + delete _singleton; + _singleton = NULL; } @@ -242,7 +252,7 @@ CppComponent * LocalContainer::createComponentInstance(const char * name) C = new CppComponent(o, r, t, name); _instance_mapMutex.lock(); // lock to be alone _instance_map.insert(std::pair(name, C)); - _instance_mapMutex.unlock(); // unlock + _instance_mapMutex.unLock(); // unlock return C; } @@ -270,14 +280,14 @@ void LocalContainer::createInternalInstance(const char *name, void *&obj, void LocalContainer::unregisterComponentInstance(CppComponent * C) { - _instance_mapMutex.lock(); // lock to be alone - _instance_map.erase(C->getCompoName()); - _instance_mapMutex.unlock(); // unlock + _instance_mapMutex.lock(); // lock to be alone + _instance_map.erase(C->getCompoName()); + _instance_mapMutex.unLock(); // unlock } inline void toupper (std::string & s) { - transform (s.begin (), s.end (), s.begin (), (int(*)(int)) toupper); + transform (s.begin (), s.end (), s.begin (), (int(*)(int)) toupper); } LocalLibrary LocalContainer::loadComponentLibrary(const std::string & aCompName, const char * prefix, bool forcedLoad)