14#include "arccore/base/ReferenceCounter.h"
16#include "arcane/utils/TraceAccessor.h"
17#include "arcane/utils/List.h"
18#include "arcane/utils/OStringStream.h"
19#include "arcane/utils/FatalErrorException.h"
20#include "arcane/utils/VersionInfo.h"
21#include "arcane/utils/ITraceMng.h"
22#include "arcane/utils/Array.h"
24#include "arcane/ServiceUtils.h"
25#include "arcane/ServiceInfo.h"
26#include "arcane/ServiceRegisterer.h"
27#include "arcane/IServiceFactory.h"
28#include "arcane/IModuleFactory.h"
29#include "arcane/ModuleProperty.h"
30#include "arcane/IServiceAndModuleFactoryMng.h"
47class ARCANE_IMPL_EXPORT ServiceAndModuleFactoryMng
57 ServiceAndModuleFactoryMng(
ITraceMng* tm);
58 virtual ~ServiceAndModuleFactoryMng();
73 std::set<ServiceRegisterer*> m_service_registerer_done_set;
108 if (m_service_factory_set.find(sfi)!=m_service_factory_set.end()){
109 std::cout <<
"Service Factory is already referenced\n";
112 m_service_factory_set.insert(sfi);
125 if (m_module_factory_set.find(mfi)!=m_module_factory_set.end()){
126 std::cout <<
"Module Factory is already referenced\n";
129 m_module_factory_set.insert(mfi);
155 std::set<IServiceFactoryInfo*> m_service_factory_set;
156 std::set<IModuleFactoryInfo*> m_module_factory_set;
163arcaneCreateServiceAndModuleFactoryMng(
ITraceMng* tm)
172ServiceAndModuleFactoryMng::
198 return m_p->serviceFactoryInfos();
207 return m_p->serviceFactories2();
216 return m_p->moduleFactoryInfos();
227 m_p->addServiceFactory(sfi,
false);
238 m_p->addModuleFactory(mfi);
249 log() <<
"WARNING: No registered service";
252 std::set<ServiceRegisterer*> registered_services;
259 if (registered_services.find(sr) == registered_services.end()) {
260 oss() <<
"\t" << sr->
name() <<
'\n';
261 registered_services.insert(sr);
264 cout <<
"=== Registered service factories ===\n"
266 <<
"====================================\n"
268 <<
"====================================" << endl;
297 if (m_service_registerer_done_set.find(sr)!=m_service_registerer_done_set.end())
299 m_service_registerer_done_set.insert(sr);
307 m_p->addModuleFactory(mfi);
314 if (!property_info_func)
315 ARCANE_FATAL(
"Null PropertyFunc for ServiceRegisterer");
319 ARCANE_FATAL(
"Null ServiceInfo created by ServiceRegisterer");
322 m_p->registerServiceInfoForDelete(si);
327 m_p->addServiceFactory(sfi,
true);
334 info() <<
"WARNING: ServiceRegisterer does not have a valid create function name=" << sr->
name();
#define ARCANE_CHECK_POINTER2(ptr, text)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
EnumeratorT< Internal::IServiceFactory2 * > Enumerator
Informations sur la fabrique d'un module.
virtual String moduleName() const =0
Nom du module créé par cette fabrique.
Interface d'un gestionnaire de fabriques de services et modules.
virtual ServiceFactoryInfoCollection serviceFactoryInfos() const =0
Liste des informations sur les fabriques des services.
virtual ModuleFactoryInfoCollection moduleFactoryInfos() const =0
Liste des fabriques de service.
virtual void createAllServiceRegistererFactories()=0
Créé toutes les fabriques associées à des ServiceRegisterer.
virtual ServiceFactory2Collection serviceFactories2() const =0
Liste des informations sur les fabriques des modules.
virtual void addGlobalFactory(IServiceFactoryInfo *sfi)=0
Ajoute la fabrique de service sfi. sfi ne doit pas être détruit tant que cette instance est utilisée....
Informations sur la fabrique d'un service.
virtual IServiceInfo * serviceInfo() const =0
Informations sur le service pouvant être créé par cette fabrique.
Interface des informations d'un service ou d'un module.
virtual String localName() const =0
Partie locale du nom du service.
virtual IServiceFactoryInfo * factoryInfo() const =0
Infos sur les fabriques disponibles pour ce service.
virtual ServiceFactory2Collection factories() const =0
Liste des fabriques du service.
Interface du gestionnaire de traces.
Implémentation d'une collection d'éléments sous forme de vecteur.
ListEnumeratorT< T > Enumerator
Type d'un itérateur constant sur tout le tableau.
Compteur de référence sur une fabrique de module.
Flot de sortie lié à une String.
List< IServiceFactoryInfo * > m_service_factory_infos
Liste des informations sur les fabriques des services.
UniqueArray< IServiceFactoryInfo * > m_deletable_service_factory_list
Liste des IServiceFactoryInfo à détruire.
List< IModuleFactoryInfo * > m_module_factory_infos
Liste des informations sur les fabriques des modules.
UniqueArray< ModuleFactoryReference > m_deletable_module_factory_list
Liste des IModuleFactoryInfo à détruire.
List< Internal::IServiceFactory2 * > m_service_factories2
Liste des informations sur les fabriques des services (V2)
List< IServiceInfo * > m_service_infos
Liste des informations sur les des services.
virtual ServiceFactoryInfoCollection serviceFactoryInfos() const
Liste des informations sur les fabriques des services.
void _addFactoryFromServiceRegisterer(ServiceRegisterer *sr)
Ajoute la fabrique spécifiée par sr.
virtual void addGlobalFactory(IServiceFactoryInfo *sfi)
Ajoute la fabrique de service sfi. sfi ne doit pas être détruit tant que cette instance est utilisée....
virtual ~ServiceAndModuleFactoryMng()
Détruit le gestionnaire.
virtual ModuleFactoryInfoCollection moduleFactoryInfos() const
Liste des fabriques de service.
virtual void createAllServiceRegistererFactories()
Créé toutes les fabriques associées à des ServiceRegisterer.
virtual ServiceFactory2Collection serviceFactories2() const
Liste des informations sur les fabriques des modules.
Enregistreur de service et modules.
static ServiceRegisterer * firstService()
Accès au premier élément de la chaine d'enregistreur de service.
ServiceRegisterer * nextService() const
Service suivant (0 si le dernier)
const ServiceProperty & serviceProperty() const
Propriétés dans le cas d'un service.
const char * name()
Nom du service.
ModuleFactoryWithPropertyFunc moduleFactoryWithPropertyFunction()
Fonction de création de la factory si on est un module.
ServiceInfoWithPropertyCreateFunc infoCreatorWithPropertyFunction()
Fonction de création de l'instance 'ServiceInfo' si on est un service.
static Integer nbService()
Nombre d'enregisteur de service dans la chaine.
const ModuleProperty & moduleProperty() const
Propriétés dans le cas d'un module.
Classe d'accès aux traces.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
TraceMessage log() const
Flot pour un message de log.
TraceMessage info() const
Flot pour un message d'information.
Vecteur 1D de données avec sémantique par valeur (style STL).
Collection< IServiceFactoryInfo * > ServiceFactoryInfoCollection
Collection d'informations sur les fabriques de service.
Collection< Internal::IServiceFactory2 * > ServiceFactory2Collection
Collection de fabriques de service.
Collection< IModuleFactoryInfo * > ModuleFactoryInfoCollection
Collection d'informations sur les fabriques de module.