Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
IServiceFactory.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* IServiceFactory.h (C) 2000-2019 */
9/* */
10/* Interface de la manufacture des services. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ISERVICEFACTORY_H
13#define ARCANE_ISERVICEFACTORY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Ref.h"
18#include "arcane/ArcaneTypes.h"
19
20#include <atomic>
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
43class ARCANE_CORE_EXPORT IServiceFactoryInfo
44{
45 public:
46
49
50 public:
51
53 //TODO: regarder si autoload est encore utile pour ces services.
54 virtual bool isAutoload() const =0;
56 virtual bool isSingleton() const =0;
57
58 public:
59
65 virtual IServiceInfo* serviceInfo() const =0;
66};
67
68namespace Internal
69{
70
71/*---------------------------------------------------------------------------*/
72/*---------------------------------------------------------------------------*/
79class ARCANE_CORE_EXPORT IServiceFactory2
80{
81 protected:
82 virtual ~IServiceFactory2() = default;
83 public:
85 virtual void addReference() =0;
87 virtual void removeReference() =0;
88 public:
91
93 virtual IServiceInfo* serviceInfo() const =0;
94};
95
96/*---------------------------------------------------------------------------*/
97/*---------------------------------------------------------------------------*/
104class ARCANE_CORE_EXPORT AbstractServiceFactory
105: public IServiceFactory2
106{
107 protected:
108 AbstractServiceFactory() : m_nb_ref(0){}
109 public:
110 void addReference() override;
111 void removeReference() override;
112 private:
113 std::atomic<Int32> m_nb_ref;
114};
115
116/*---------------------------------------------------------------------------*/
117/*---------------------------------------------------------------------------*/
122template<typename InterfaceType>
125{
126 public:
127 virtual Ref<InterfaceType> createServiceReference(const ServiceBuildInfoBase& sbi) =0;
128};
129
130/*---------------------------------------------------------------------------*/
131/*---------------------------------------------------------------------------*/
143class ARCANE_CORE_EXPORT ISingletonServiceFactory
144{
145 public:
146 virtual ~ISingletonServiceFactory() = default;
147
151
153 virtual IServiceInfo* serviceInfo() const =0;
154};
155
156/*---------------------------------------------------------------------------*/
157/*---------------------------------------------------------------------------*/
158
159} // End namespace Internal
160
161/*---------------------------------------------------------------------------*/
162/*---------------------------------------------------------------------------*/
163
164} // End namespace Arcane
165
166/*---------------------------------------------------------------------------*/
167/*---------------------------------------------------------------------------*/
168
169#endif
170
Informations sur la fabrique d'un service.
virtual bool isAutoload() const =0
vrai si le service est un module et doit être chargé automatiquement
virtual ~IServiceFactoryInfo()
Libère les ressources.
virtual bool isSingleton() const =0
vrai si le service est un service singleton (une seule instance)
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.
Fabrique pour un service implémentant l'interface InterfaceType.
virtual void addReference()=0
Ajoute une référence.
virtual IServiceInfo * serviceInfo() const =0
Retourne le IServiceInfo associé à cette fabrique.
virtual void removeReference()=0
Supprime une référence.
virtual ServiceInstanceRef createServiceInstance(const ServiceBuildInfoBase &sbi)=0
Créé une instance du service à partir des infos de sbi.
virtual Ref< ISingletonServiceInstance > createSingletonServiceInstance(const ServiceBuildInfoBase &sbi)=0
Créé une instance d'un service singleton.
virtual IServiceInfo * serviceInfo() const =0
Retourne le IServiceInfo associé à cette fabrique.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Informations pour créer un service.
Référence sur une instance de service.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-