Arcane
v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ModuleFactory.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
/* ModuleFactory.cc (C) 2000-2019 */
9
/* */
10
/* Manufacture des modules. */
11
/*---------------------------------------------------------------------------*/
12
/*---------------------------------------------------------------------------*/
13
14
#include "arcane/utils/ArcanePrecomp.h"
15
16
#include "arcane/utils/String.h"
17
#include "arcane/utils/FatalErrorException.h"
18
#include "arcane/utils/TraceInfo.h"
19
20
#include "arcane/ModuleFactory.h"
21
#include "arcane/IModuleMng.h"
22
#include "arcane/IModule.h"
23
#include "arcane/ISubDomain.h"
24
#include "arcane/IServiceInfo.h"
25
#include "arcane/IMesh.h"
26
27
#include "arcane/utils/Iostream.h"
28
29
/*---------------------------------------------------------------------------*/
30
/*---------------------------------------------------------------------------*/
31
32
namespace
Arcane
33
{
34
35
/*---------------------------------------------------------------------------*/
36
/*---------------------------------------------------------------------------*/
37
38
ModuleFactory::
39
ModuleFactory
(
Ref<IModuleFactory2>
factory,
bool
is_autoload)
40
: m_factory(factory)
41
, m_is_autoload(is_autoload)
42
, m_name(factory->
moduleName
())
43
, m_nb_ref(0)
44
{
45
//cerr << "** ADD MODULE FACTORY this=" << this
46
// << " service_info_name=" << m_service_info->localName()
47
// << " autoload=" << is_autoload << '\n';
48
}
49
50
/*---------------------------------------------------------------------------*/
51
/*---------------------------------------------------------------------------*/
52
53
ModuleFactory::
54
~ModuleFactory()
55
{
56
}
57
58
/*---------------------------------------------------------------------------*/
59
/*---------------------------------------------------------------------------*/
60
61
Ref<IModule>
ModuleFactory::
62
createModule
(
ISubDomain
* parent,
const
MeshHandle
& mesh_handle)
63
{
64
if
(!m_factory)
65
ARCANE_FATAL
(
"Null factory for module named '{0}'"
,
moduleName
());
66
67
Ref<IModule>
module = m_factory->createModuleInstance(parent,mesh_handle);
68
69
if
(!module)
70
ARCANE_FATAL
(
"Can not create module named '{0}'"
,
moduleName
());
71
72
parent->
checkId
(
"ModuleFactory::createModule"
,module->name());
73
parent->
moduleMng
()->
addModule
(module);
74
75
return
module
;
76
}
77
78
/*---------------------------------------------------------------------------*/
79
/*---------------------------------------------------------------------------*/
80
81
void
ModuleFactory::
82
initializeModuleFactory
(
ISubDomain
* sub_domain)
83
{
84
m_factory->initializeModuleFactory(sub_domain);
85
}
86
87
/*---------------------------------------------------------------------------*/
88
/*---------------------------------------------------------------------------*/
89
90
const
IServiceInfo
*
ModuleFactory::
91
serviceInfo
()
const
92
{
93
return
m_factory->serviceInfo();
94
}
95
96
/*---------------------------------------------------------------------------*/
97
/*---------------------------------------------------------------------------*/
98
99
void
ModuleFactory::
100
addReference()
101
{
102
++m_nb_ref;
103
}
104
105
/*---------------------------------------------------------------------------*/
106
/*---------------------------------------------------------------------------*/
107
108
void
ModuleFactory::
109
removeReference()
110
{
111
// Décrémente et retourne la valeur d'avant.
112
// Si elle vaut 1, cela signifie qu'on n'a plus de références
113
// sur l'objet et qu'il faut le détruire.
114
Int32 v = std::atomic_fetch_add(&m_nb_ref,-1);
115
if
(v==1)
116
delete
this
;
117
}
118
119
/*---------------------------------------------------------------------------*/
120
/*---------------------------------------------------------------------------*/
121
122
ModuleFactoryReference::
123
ModuleFactoryReference(
Ref<IModuleFactory2>
factory,
bool
is_autoload)
124
: Base(new
ModuleFactory
(factory,is_autoload))
125
{
126
}
127
128
/*---------------------------------------------------------------------------*/
129
/*---------------------------------------------------------------------------*/
130
131
/*---------------------------------------------------------------------------*/
132
/*---------------------------------------------------------------------------*/
133
134
ModuleFactory2::
135
~ModuleFactory2()
136
{
137
if
(m_service_info){
138
delete
m_service_info->factoryInfo();
139
delete
m_service_info;
140
}
141
}
142
143
/*---------------------------------------------------------------------------*/
144
/*---------------------------------------------------------------------------*/
145
146
}
// End namespace Arcane
147
148
/*---------------------------------------------------------------------------*/
149
/*---------------------------------------------------------------------------*/
150
ARCANE_FATAL
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Definition
ArcaneGlobal.h:764
Arcane::IModuleMng::addModule
virtual void addModule(Ref< IModule > m)=0
Ajoute le module m au gestionnaire.
Arcane::IServiceInfo
Interface des informations d'un service ou d'un module.
Definition
IServiceInfo.h:37
Arcane::ISubDomain
Interface du gestionnaire d'un sous-domaine.
Definition
ISubDomain.h:74
Arcane::ISubDomain::moduleMng
virtual IModuleMng * moduleMng()=0
Retourne le gestionnaire de modules.
Arcane::ISubDomain::checkId
virtual void checkId(const String &where, const String &id)=0
Vérifie qu'un identifiant est valide.
Arcane::MeshHandle
Handle sur un maillage.
Definition
MeshHandle.h:47
Arcane::ModuleFactory
Definition
ModuleFactory.h:41
Arcane::ModuleFactory::ModuleFactory
ModuleFactory(Ref< IModuleFactory2 > factory, bool is_autoload)
Construit une fabrique pour un module.
Definition
ModuleFactory.cc:39
Arcane::ModuleFactory::createModule
Ref< IModule > createModule(ISubDomain *parent, const MeshHandle &mesh_handle) override
Créé un module.
Definition
ModuleFactory.cc:62
Arcane::ModuleFactory::moduleName
String moduleName() const override
Nom du module créé par cette fabrique.
Definition
ModuleFactory.h:63
Arcane::ModuleFactory::initializeModuleFactory
void initializeModuleFactory(ISubDomain *sub_domain) override
Si la fabrique est un pour un module, l'initialise sur le sous-domaine sub_domain.
Definition
ModuleFactory.cc:82
Arcane::ModuleFactory::serviceInfo
const IServiceInfo * serviceInfo() const override
Informations sur le module pouvant être créé par cette fabrique.
Definition
ModuleFactory.cc:91
Arcane::Ref
Référence à une instance.
Definition
arccore/src/base/arccore/base/Ref.h:143
Arcane
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Definition
AbstractCaseDocumentVisitor.cc:20
arcane
core
ModuleFactory.cc
Généré le Lundi 24 Mars 2025 02:48:32 pour Arcane par
1.13.2