Arcane  v3.16.0.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>
124: public AbstractServiceFactory
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.
void removeReference() override
Supprime une référence.
void addReference() override
Ajoute une référence.
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.
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 -*-