Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IModuleFactory.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/* IModuleFactory.h (C) 2000-2019 */
9/* */
10/* Interface de la manufacture des modules. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IMODULEFACTORY_H
13#define ARCANE_IMODULEFACTORY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/base/ReferenceCounter.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25class MeshHandle;
26class IModuleFactory2;
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30/*!
31 * \brief Informations sur la fabrique d'un module.
32 *
33 * Cette interface contient les informations nécessaire sur une fabrique
34 * d'un module.
35 *
36 * On peut directement créer le module via la méthode createModule().
37 *
38 * Cette classe utilise un compteur de référence pour gérer sa durée de vie
39 * (voir la classe ReferenceCounter).
40 */
41class ARCANE_CORE_EXPORT IModuleFactoryInfo
42{
43 protected:
44
45 //! Libère les ressources
47
48 public:
49
50 virtual void addReference() =0;
51 virtual void removeReference() =0;
52 /*!
53 * \brief Indique si le module et doit être chargé automatiquement.
54 *
55 * Si cette propriété est vrai, le module sera toujours chargé même
56 * s'il n'apparait pas dans la boucle en temps.
57 */
58 virtual bool isAutoload() const =0;
59
60 /*!
61 * \brief Si la fabrique est un pour un module,
62 * l'initialise sur le sous-domaine \a sub_domain.
63 *
64 * Cette méthode est appelée lorsque le sous-domaine est créé, pour
65 * effectuer certaines initialisations spécifiques du module avant
66 * que celui-ci ne soit fabriqué. Par exemple, pour ajouter des boucles
67 * en temps propres au module.
68 */
69 virtual void initializeModuleFactory(ISubDomain* sub_domain) =0;
70
71 /*!
72 * \brief Créé un module.
73 *
74 * L'implémentation doit appeler parent->moduleMng()->addModule()
75 * pour le module créé.
76 *
77 * \param parent Parent de ce module.
78 * \param mesh maillage associé au module.
79 * \return le module créé
80 */
81 virtual Ref<IModule> createModule(ISubDomain* parent,const MeshHandle& mesh_handle) =0;
82
83 //! Nom du module créé par cette fabrique.
84 virtual String moduleName() const =0;
85
86 /*!
87 * \brief Informations sur le module pouvant être créé par cette fabrique.
88 *
89 * L'instance retournée reste la propriété de l'application l'ayant créée
90 * et ne doit ni être modifiée, ni être détruite.
91 */
92 virtual const IServiceInfo* serviceInfo() const =0;
93};
94
95/*---------------------------------------------------------------------------*/
96/*---------------------------------------------------------------------------*/
97/*!
98 * \internal
99 * \brief Interface d'une fabrique de module (V2).
100 *
101 * Cette interface est réservée à IModuleFactoryInfo et ne doit pas
102 * être utilisée directement.
103 */
104class ARCANE_CORE_EXPORT IModuleFactory2
105{
106 public:
107 virtual ~IModuleFactory2(){}
108 public:
109 /*!
110 * \brief Créé un module.
111 *
112 * \param sd sous-domaine associé.
113 * \param mesh maillage associé au module.
114 * \return le module créé
115 */
116 virtual Ref<IModule> createModuleInstance(ISubDomain* sd,const MeshHandle& mesh_handle) =0;
117
118 /*!
119 * \brief Initialisation statique du module.
120 *
121 * Cette méthode est appelée lorsque le sous-domaine est créé, pour
122 * effectuer certaines initialisations spécifiques du module avant
123 * que celui-ci ne soit fabriqué. Par exemple, pour ajouter des boucles
124 * en temps propres au module.
125 */
127
128 //! Nom du module créé par cette fabrique.
129 virtual String moduleName() const =0;
130
131 //! Informations sur le module pouvant être créé par cette fabrique.
132 virtual const IServiceInfo* serviceInfo() const =0;
133};
134
135/*---------------------------------------------------------------------------*/
136/*---------------------------------------------------------------------------*/
137/*!
138 * \brief Compteur de référence sur une fabrique de module.
139 */
140class ARCANE_CORE_EXPORT ModuleFactoryReference
141: ReferenceCounter<IModuleFactoryInfo>
142{
143 public:
145 public:
147 : Base(f){}
148 ModuleFactoryReference(Ref<IModuleFactory2> factory,bool is_autoload);
149 public:
150 IModuleFactoryInfo* factory() const { return get(); }
151};
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155
156} // End namespace Arcane
157
158/*---------------------------------------------------------------------------*/
159/*---------------------------------------------------------------------------*/
160
161#endif
Fichier de configuration d'Arcane.
virtual Ref< IModule > createModuleInstance(ISubDomain *sd, const MeshHandle &mesh_handle)=0
Créé un module.
virtual String moduleName() const =0
Nom du module créé par cette fabrique.
virtual void initializeModuleFactory(ISubDomain *sd)=0
Initialisation statique du module.
virtual const IServiceInfo * serviceInfo() const =0
Informations sur le module pouvant être créé par cette fabrique.
Informations sur la fabrique d'un module.
virtual String moduleName() const =0
Nom du module créé par cette fabrique.
virtual ~IModuleFactoryInfo()
Libère les ressources.
virtual void initializeModuleFactory(ISubDomain *sub_domain)=0
Si la fabrique est un pour un module, l'initialise sur le sous-domaine sub_domain.
virtual Ref< IModule > createModule(ISubDomain *parent, const MeshHandle &mesh_handle)=0
Créé un module.
virtual bool isAutoload() const =0
Indique si le module et doit être chargé automatiquement.
virtual const IServiceInfo * serviceInfo() const =0
Informations sur le module pouvant être créé par cette fabrique.
Interface des informations d'un service ou d'un module.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Handle sur un maillage.
Definition MeshHandle.h:47
Compteur de référence sur une fabrique de module.
Encapsulation d'un pointeur avec compteur de référence.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-