Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
AbstractModule.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/* AbstractModule.h (C) 2000-2021 */
9/* */
10/* Classe abstraite de base d'un module. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ABSTRACTMODULE_H
13#define ARCANE_ABSTRACTMODULE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/String.h"
18#include "arcane/utils/VersionInfo.h"
19#include "arcane/utils/TraceAccessor.h"
20
21#include "arcane/ArcaneTypes.h"
22#include "arcane/IModule.h"
23#include "arcane/ModuleBuildInfo.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34class ModuleBuildInfo;
35typedef ModuleBuildInfo ModuleBuilder;
36
37/*---------------------------------------------------------------------------*/
38/*---------------------------------------------------------------------------*/
39/*!
40 * \brief Classe représentant un module.
41 *
42 * Cette classe est LA classe d'implémentation bas niveau de l'interface \a IModule.
43 *
44 * \ingroup Module
45 */
46class ARCANE_CORE_EXPORT AbstractModule
47: public TraceAccessor
48, public IModule
49{
50 public:
51
52 //! Constructeur à partir d'un \a ModuleBuildInfo
54
55 public:
56
57 //! Destructeur
58 virtual ~AbstractModule();
59
60 public:
61
62 //! Version du module
63 VersionInfo versionInfo() const override { return m_version_info; }
64
65 public:
66
67 /*! \brief Initialisation du module pour le sous-domaine \a sd.
68 *
69 * Cette méthode statique peut être redéfinie dans une classe dérivée
70 * pour effectuer des initialisations pour le sous-domaine \a sd
71 * même si le module n'est pas utilisé.
72 *
73 * Une utilisation classique est l'enregistrement de points d'entrée
74 * pour des modules sans .axl
75 *
76 * Cette méthode sera appelé pendant la phase de création du
77 * sous-domaine sur tous les Modules (même non utilisés).
78 */
79 static void staticInitialize(ISubDomain* sd) { ARCANE_UNUSED(sd); }
80
81 public:
82
83 //! Nom du module
84 String name() const override { return m_name; }
85 //! Session associé au module
86 ISession* session() const override { return m_session; }
87 //! Sous-domaine associé au module
88 ISubDomain* subDomain() const override { return m_sub_domain; }
89 //! Maillage par défaut pour ce module
90 IMesh* defaultMesh() const override { return m_default_mesh_handle.mesh(); }
91 //! Maillage par défaut pour ce module
92 MeshHandle defaultMeshHandle() const override { return m_default_mesh_handle; }
93 //! Gestionnaire du parallélisme par échange de message
94 IParallelMng* parallelMng() const override;
95 //! Gestionnaire des accélérateurs.
96 IAcceleratorMng* acceleratorMng() const override;
97 //! Gestionnaire de traces
98 ITraceMng* traceMng() const override;
99 //! Positionne le flag d'utilisation du module
100 void setUsed(bool v) override { m_used = v; }
101 //! Retourne l'état d'utilisation du module
102 bool used() const override { return m_used; }
103 //! Positionne le flag d'activation du module
104 void setDisabled(bool v) override { m_disabled = v; }
105 //! Retourne l'état d'activation du module
106 bool disabled() const override { return m_disabled; }
107 //! Indique si le module utilise un système de Garbage collection
108 /*!
109 * <ul>
110 * <li>si \a true, indique une destruction par un Garbage collecteur et non une destruction explicite</li>
111 * <li>si \a false, ce module sera détruit explicitement par un appel à son destructeur</li>
112 * </ul>
113 *
114 * Le système de Garbage collection est usuellement activé pour les
115 * modules issus d'une implémentation en C#. Les modules classiques
116 * en C++ n'ont pas se mécanisme.
117 *
118 * \todo Vérifier dans ModuleMng::removeModule l'utilisation de
119 * cette indication. Un appel au Deleter comme dans
120 * ModuleMng::removeAllModules est peut-être nécessaire.
121 */
122 bool isGarbageCollected() const override { return false; }
123
124 protected:
125
126 void _setVersionInfo(const VersionInfo& vi)
127 {
128 m_version_info = vi;
129 }
130
131 private:
132
133 ISession* m_session; //!< Sesion
134 ISubDomain* m_sub_domain; //!< sous-domaine
135 MeshHandle m_default_mesh_handle; //!< Maillage par défaut du module
136 String m_name; //!< Nom du module
137 bool m_used; //!< \a true si le module est utilisé
138 bool m_disabled; //!< Etat d'activation du module
139 VersionInfo m_version_info; //!< Version du module
140 IAcceleratorMng* m_accelerator_mng; //!< Gestionnaire des accélérateurs
141};
142
143/*---------------------------------------------------------------------------*/
144/*---------------------------------------------------------------------------*/
145
146} // End namespace Arcane
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151#endif
152
Classe représentant un module.
ISession * session() const override
Session associé au module.
void setDisabled(bool v) override
Positionne le flag d'activation du module.
static void staticInitialize(ISubDomain *sd)
Initialisation du module pour le sous-domaine sd.
String name() const override
Nom du module.
MeshHandle defaultMeshHandle() const override
Maillage par défaut pour ce module.
void setUsed(bool v) override
Positionne le flag d'utilisation du module.
ISubDomain * subDomain() const override
Sous-domaine associé au module.
bool isGarbageCollected() const override
Indique si le module utilise un système de Garbage collection.
VersionInfo versionInfo() const override
Version du module.
bool disabled() const override
Retourne l'état d'activation du module.
IMesh * defaultMesh() const override
Maillage par défaut pour ce module.
bool used() const override
Retourne l'état d'utilisation du module.
Interface du gestionnaire des accélérateurs.
Interface d'un module.
Definition IModule.h:39
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface d'une session d'exécution d'un cas.
Definition ISession.h:44
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Handle sur un maillage.
Definition MeshHandle.h:47
Informations pour construire un module.
Informations sur une version.
Definition VersionInfo.h:46
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-