Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ServiceFactory.cc
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/* ServiceFactory.cc (C) 2000-2019 */
9/* */
10/* Fabrique des services/modules. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/List.h"
15
16#include "arcane/IServiceInfo.h"
17#include "arcane/ServiceFactory.h"
18#include "arcane/ServiceInstance.h"
19
20#include <iostream>
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane::Internal
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
66/*---------------------------------------------------------------------------*/
67/*---------------------------------------------------------------------------*/
80{
81 public:
83 : m_service_info(si){}
85 {
86 destroyInstance();
87 }
88 public:
89 void addReference() override { ++m_nb_ref; }
90 void removeReference() override
91 {
92 Int32 v = std::atomic_fetch_add(&m_nb_ref,-1);
93 if (v==1)
94 delete this;
95 }
96 public:
97 ServiceInstanceCollection interfaceInstances() override { return m_instances; }
98 void destroyInstance()
99 {
100 m_true_instance.reset();
101 m_instances.clear();
102 }
103 IServiceInfo* serviceInfo() const override { return m_service_info; }
104 void setTrueInstance(ServiceInstanceRef si) { m_true_instance = si; }
105 public:
106 void addInstance(ServiceInstanceRef instance) override
107 {
108 m_instances.add(instance);
109 }
110 private:
111 IServiceInfo* m_service_info;
112 List<ServiceInstanceRef> m_instances;
113 ServiceInstanceRef m_true_instance;
114 std::atomic<Int32> m_nb_ref = 0;
115};
116
117/*---------------------------------------------------------------------------*/
118/*---------------------------------------------------------------------------*/
119
130
131/*---------------------------------------------------------------------------*/
132/*---------------------------------------------------------------------------*/
133
136{
137 ++m_nb_ref;
138}
139
142{
143 // Décrémente et retourne la valeur d'avant.
144 // Si elle vaut 1, cela signifie qu'on n'a plus de références
145 // sur l'objet et qu'il faut le détruire.
146 Int32 v = std::atomic_fetch_add(&m_nb_ref,-1);
147 if (v==1)
148 delete this;
149}
150
151/*---------------------------------------------------------------------------*/
152/*---------------------------------------------------------------------------*/
153
154} // End namespace Arcane::Internal
155
156/*---------------------------------------------------------------------------*/
157/*---------------------------------------------------------------------------*/
158
Interface des informations d'un service ou d'un module.
Interface d'une instance de service singleton.
Definition IService.h:95
void removeReference() override
Supprime une référence.
void addReference() override
Ajoute une référence.
ServiceInstanceCollection interfaceInstances() override
Liste des instances des interfaces implémentées par le singleton.
void removeReference() override
Supprime une référence.
Ref< ISingletonServiceInstance > createSingletonServiceInstance(const ServiceBuildInfoBase &sbib) override
Créé un service singleton.
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.
Types interne à Arcane.
Definition ArcaneTypes.h:88