Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
ModuleMng.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* ModuleMng.cc (C) 2000-2019 */
9/* */
10/* Class managing all modules. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/ArcanePrecomp.h"
15
16#include "arcane/utils/Iostream.h"
17#include "arcane/utils/List.h"
18#include "arcane/utils/Deleter.h"
19#include "arcane/utils/String.h"
20#include "arcane/utils/ITraceMng.h"
21#include "arcane/utils/FatalErrorException.h"
22#include "arcane/utils/Ref.h"
23
24#include "arcane/core/IModuleMng.h"
25#include "arcane/core/IModule.h"
26
27#include <map>
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane
33{
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
37
41class ModuleMng
42: public IModuleMng
43{
44 public:
45
46 ModuleMng(ISubDomain*);
47 ~ModuleMng();
48
49 void addModule(Ref<IModule>) override;
50 void removeModule(Ref<IModule>) override;
51 void dumpList(std::ostream&) override;
52 ModuleCollection modules() const override { return m_modules; }
53 void removeAllModules() override;
54 bool isModuleActive(const String& name) override;
55 IModule* findModule(const String& name) override;
56
57 private:
58
60 std::map<String, Ref<IModule>> m_modules_map;
61 IModule* _findModule(const String& name);
62};
63
64/*---------------------------------------------------------------------------*/
65/*---------------------------------------------------------------------------*/
66
67extern "C++" IModuleMng*
68arcaneCreateModuleMng(ISubDomain* sd)
69{
70 return new ModuleMng(sd);
71}
72
73/*---------------------------------------------------------------------------*/
74/*---------------------------------------------------------------------------*/
75
76ModuleMng::
77ModuleMng([[maybe_unused]] ISubDomain* sd)
78{
79}
80
81/*---------------------------------------------------------------------------*/
82/*---------------------------------------------------------------------------*/
83
92
93/*---------------------------------------------------------------------------*/
94/*---------------------------------------------------------------------------*/
95
98{
99 m_modules.clear();
100 m_modules_map.clear();
101}
102
103/*---------------------------------------------------------------------------*/
104/*---------------------------------------------------------------------------*/
105
108{
109 const String& module_name = module->name();
110 auto iter = m_modules_map.find(module_name);
111 if (iter != m_modules_map.end())
112 ARCANE_FATAL("A module named '{0}' is already registered", module_name);
113 m_modules.add(module.get());
114 m_modules_map.insert(std::make_pair(module_name, module));
115}
116
117/*---------------------------------------------------------------------------*/
118/*---------------------------------------------------------------------------*/
119
122{
123 const String& module_name = module->name();
124 auto iter = m_modules_map.find(module_name);
125 m_modules_map.erase(iter);
126
127 m_modules.remove(module.get());
128}
129
130/*---------------------------------------------------------------------------*/
131/*---------------------------------------------------------------------------*/
132
134dumpList(std::ostream& o)
135{
136 o << "** ModuleMng::dump_list: " << m_modules.count();
137 o << '\n';
138 for (ModuleList::Enumerator i(m_modules); ++i;) {
139 o << "** Module: " << (*i)->name();
140 o << '\n';
141 }
142}
143
144/*---------------------------------------------------------------------------*/
145/*---------------------------------------------------------------------------*/
146
148isModuleActive(const String& name)
149{
150 IModule* module = _findModule(name);
151 if (!module)
152 return false;
153 return !module->disabled();
154}
155
156/*---------------------------------------------------------------------------*/
157/*---------------------------------------------------------------------------*/
158
160findModule(const String& name)
161{
162 return _findModule(name);
163}
164
165/*---------------------------------------------------------------------------*/
166/*---------------------------------------------------------------------------*/
167
168IModule* ModuleMng::
169_findModule(const String& name)
170{
171 auto iter = m_modules_map.find(name);
172 if (iter != m_modules_map.end())
173 return iter->second.get();
174 return nullptr;
175}
176
177/*---------------------------------------------------------------------------*/
178/*---------------------------------------------------------------------------*/
179
180} // End namespace Arcane
181
182/*---------------------------------------------------------------------------*/
183/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro throwing a FatalErrorException.
Module manager interface.
Definition IModuleMng.h:39
Interface of a module.
Definition IModule.h:40
Interface of the subdomain manager.
Definition ISubDomain.h:75
Module manager.
Definition ModuleMng.cc:43
bool isModuleActive(const String &name) override
Indicates if the module named name is active.
Definition ModuleMng.cc:148
IModule * findModule(const String &name) override
Returns the instance of the module named name.
Definition ModuleMng.cc:160
void addModule(Ref< IModule >) override
Adds module m to the manager.
Definition ModuleMng.cc:107
ModuleList m_modules
List of modules.
Definition ModuleMng.cc:59
void removeAllModules() override
Removes and destroys modules managed by this manager.
Definition ModuleMng.cc:97
void removeModule(Ref< IModule >) override
Removes module m.
Definition ModuleMng.cc:121
void dumpList(std::ostream &) override
Prints the list of modules in the manager to a stream o.
Definition ModuleMng.cc:134
ModuleCollection modules() const override
List of modules.
Definition ModuleMng.cc:52
InstanceType * get() const
Associated instance or nullptr if none.
Reference to an instance.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
List< IModule * > ModuleList
Array of modules.
Collection< IModule * > ModuleCollection
Collection of modules.