Arcane  v3.14.10.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>
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.
149 virtual Ref<ISingletonServiceInstance>
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.
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.
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 -*-