Arcane  v3.16.0.0
Documentation utilisateur
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/*---------------------------------------------------------------------------*/
30/*!
31 * \brief Informations sur la fabrique d'un service.
32 *
33 * Cette interface contient les informations nécessaire sur une fabrique
34 * d'un service.
35 *
36 * En général les instances de cette classe sont soit créées par Arcane
37 * à partir d'un fichier axl, soit ou en utilisant une des macros
38 * de fabrique de service (définies dans le fichier ServiceFactory.h).
39 *
40 * La liste des interfaces supportées par le service et la
41 * fabrique associées sont décrites dans serviceInfo().
42 */
43class ARCANE_CORE_EXPORT IServiceFactoryInfo
44{
45 public:
46
47 //! Libère les ressources
49
50 public:
51
52 //! vrai si le service est un module et doit être chargé automatiquement
53 //TODO: regarder si autoload est encore utile pour ces services.
54 virtual bool isAutoload() const =0;
55 //! vrai si le service est un service singleton (une seule instance)
56 virtual bool isSingleton() const =0;
57
58 public:
59
60 /*! \brief Informations sur le service pouvant être créé par cette fabrique.
61 *
62 * L'instance retournée reste la propriété de l'application l'ayant créée
63 * et ne doit ni être modifiée, ni être détruite.
64 */
65 virtual IServiceInfo* serviceInfo() const =0;
66};
67
68namespace Internal
69{
70
71/*---------------------------------------------------------------------------*/
72/*---------------------------------------------------------------------------*/
73/*!
74 * \brief internal.
75 * \brief Interface d'une fabrique pour un service (nouvelle version).
76 *
77 * Cette classe s'utiliser via un ReferenceCounter pour gérer sa destruction.
78 */
79class ARCANE_CORE_EXPORT IServiceFactory2
80{
81 protected:
82 virtual ~IServiceFactory2() = default;
83 public:
84 //! Ajoute une référence.
85 virtual void addReference() =0;
86 //! Supprime une référence.
87 virtual void removeReference() =0;
88 public:
89 //! Créé une instance du service à partir des infos de \a sbi.
91
92 //! Retourne le IServiceInfo associé à cette fabrique.
93 virtual IServiceInfo* serviceInfo() const =0;
94};
95
96/*---------------------------------------------------------------------------*/
97/*---------------------------------------------------------------------------*/
98/*!
99 * \brief internal.
100 * \brief Classe de base pour une fabrique pour un service.
101 *
102 * Cette classe s'utiliser via un ReferenceCounter pour gérer sa destruction.
103 */
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/*---------------------------------------------------------------------------*/
118/*!
119 * \internal
120 * \brief Fabrique pour un service implémentant l'interface \a InterfaceType.
121 */
122template<typename InterfaceType>
124: public AbstractServiceFactory
125{
126 public:
127 virtual Ref<InterfaceType> createServiceReference(const ServiceBuildInfoBase& sbi) =0;
128};
129
130/*---------------------------------------------------------------------------*/
131/*---------------------------------------------------------------------------*/
132/*!
133 * \brief internal.
134 * \brief Fabrique pour un service singleton.
135 * Un service singleton n'est créé qu'une seule fois mais peut avoir plusieurs
136 * interfaces et il y a donc autant de IServiceInstance que d'interfaces
137 * implémentées par le service.
138 *
139 * La méthode \a createSingletonServiceInstance() permet de créér l'instance
140 * du service singleton ainsi que les IServiceInstance pour chaque interface
141 * implémentée.
142 */
143class ARCANE_CORE_EXPORT ISingletonServiceFactory
144{
145 public:
146 virtual ~ISingletonServiceFactory() = default;
147
148 //! Créé une instance d'un service singleton.
151
152 //! Retourne le IServiceInfo associé à cette fabrique.
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.
void removeReference() override
Supprime une référence.
void addReference() override
Ajoute une référence.
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.
Référence à une instance.
Informations pour créer un service.
Référence sur une instance de service.
Types interne à Arcane.
Definition ArcaneTypes.h:93
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-