Arcane  4.2.3.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MeshHandle.h
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/* MeshHandle.h (C) 2000-2026 */
9/* */
10/* Handle sur un maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MESHHANDLE_H
13#define ARCANE_CORE_MESHHANDLE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arccore/base/StringView.h"
19#include "arccore/base/String.h"
20#include "arccore/base/AutoRef2.h"
21
24
25#include <atomic>
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace Arcane
31{
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35/*!
36 * \brief Handle sur un maillage.
37 *
38 * Cette classe utilise la sémantique d'un compteur de référence.
39 *
40 * Cette classe permet de gérer une référence à un maillage (IMesh) avant
41 * qu'il ne soit explicitement créé. Cela permet aux services et modules
42 * de spécifier lors de leur construction à quel maillage ils font référence.
43 *
44 * Elle permet aussi d'associer des données utilisateurs au maillage
45 * via meshUserDataList().
46 */
47class ARCANE_CORE_EXPORT MeshHandle
48{
49 private:
50
51 // Temporaire: pour accéder au constructeur qui utilise ISubDomain.
52 friend class MeshMng;
53
54 private:
55
56 class MeshHandleRef;
57
58 public:
59
60 MeshHandle();
61 ~MeshHandle();
62
63 MeshHandle(const MeshHandle&);
64 MeshHandle& operator=(const MeshHandle&);
65 MeshHandle(MeshHandle&&) noexcept;
66 MeshHandle& operator=(MeshHandle&&) noexcept;
67
68 private:
69
70 // TODO rendre accessible uniquement aux classes implémentant IMeshMng.
71 MeshHandle(ISubDomain* sd, const String& name);
72
73 public:
74
75 /*!
76 * \brief Maillage associé.
77 *
78 * Il est interdit d'appeler cette méthode si le maillage n'a pas encore été
79 * créé. A terme, une exception sera levée dans ce cas.
80 *
81 * Si on n'est pas certain que le maillage existe, on peut tester son
82 * existence via hasMesh().
83 *
84 * \pre hasMesh() == true
85 */
86 IMesh* mesh() const;
87
88 //! Indique si le maillage associé a déjà été créé (i.e: mesh() est valide)
89 bool hasMesh() const;
90
91 /*!
92 * \brief Retourne le maillage associé à cette instance.
93 *
94 * Contrairement à mesh(), cette peut-être appelée si le maillage associé n'a pas
95 * encore été créé. Dans ce cas on retourne un pointeur nul.
96 */
97 IMesh* meshOrNull() const;
98
99 public:
100
101 //! Sous-domaine associé. Null si isNull() est vrai.
102 ARCCORE_DEPRECATED_2020("Do not use this method. Try to get ISubDomain from another way")
103 ISubDomain* subDomain() const;
104
105 public:
106
107 //! Gestionnaire de maillage associé. nullptr si isNull() est vrai.
108 IMeshMng* meshMng() const;
109
110 //! Gestionnaire de trace associé. nullptr si isNull() est vrai.
111 ITraceMng* traceMng() const;
112
113 //! Gestionnaire de variable associé. nullptr si isNull() est vrai.
114 IVariableMng* variableMng() const;
115
116 //! Application associée. nullptr si isNull() est vrai.
117 IApplication* application() const;
118
119 //! Données utilisateurs associées
121
122 String meshName() const;
123
124 //! Indique si le handle est nul (il ne référence aucun maillage existant ou non)
125 bool isNull() const;
126
127 //! Observable pour être notifié de la destruction
129
130 //! \internal
131 const void* reference() const { return m_ref.get(); }
132
133 public:
134
135 // TODO: rendre ces méthodes privées et ajouter des friend dessus
136
137 //! \internal
138 void _setMesh(IMesh* mesh);
139
140 //! \internal
141 void _destroyMesh();
142
143 //! \internal
144 IMesh* _internalMeshOrNull() const;
145
146 private:
147
149};
150
151/*---------------------------------------------------------------------------*/
152/*---------------------------------------------------------------------------*/
153/*!
154 * \brief Classe de compatibilité pour contenir un MeshHandle ou un IMesh*.
155 *
156 * A terme les constructeurs et convertisseurs vers IMesh* seront supprimés
157 */
158class ARCANE_CORE_EXPORT MeshHandleOrMesh
159{
160 public:
161
162 // NOTE: Les constructeurs ne doivent pas être explicites
163 // pour autoriser les conversions
164
165 //! Construit une instance à partir d'un MeshHandle
167
168 /*!
169 * \brief Construit une instance à partir d'un IMesh*.
170 *
171 * Si \a mesh est nul, le MeshHandle associé sera aussi nul.
172 */
174
175 //! Maillage associé. Peut être nul si le maillage n'a pas encore été créé
176 IMesh* mesh() const { return m_handle.meshOrNull(); }
177
178 //! Maillage associé. Peut être nul si le maillage n'a pas encore été créé
179 operator IMesh*() const { return mesh(); }
180
181 //! handle associé.
182 const MeshHandle& handle() const { return m_handle; }
183
184 private:
185
186 MeshHandle m_handle;
187};
188
189/*---------------------------------------------------------------------------*/
190/*---------------------------------------------------------------------------*/
191
192} // End namespace Arcane
193
194/*---------------------------------------------------------------------------*/
195/*---------------------------------------------------------------------------*/
196
197#endif
Déclarations des types généraux de Arcane.
Déclarations des types utilisés dans Arcane.
Encapsulation d'un pointeur avec compteur de référence.
Definition AutoRef2.h:40
Interface de l'application.
Interface du gestionnaire des maillages.
Definition IMeshMng.h:40
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:77
Interface du gestionnaire de traces.
Interface d'une liste qui gère des données utilisateurs.
Interface du gestionnaire de variables.
IMesh * mesh() const
Maillage associé. Peut être nul si le maillage n'a pas encore été créé
Definition MeshHandle.h:176
const MeshHandle & handle() const
handle associé.
Definition MeshHandle.h:182
MeshHandleOrMesh(const MeshHandle &handle)
Construit une instance à partir d'un MeshHandle.
Handle sur un maillage.
Definition MeshHandle.h:48
ITraceMng * traceMng() const
Gestionnaire de trace associé. nullptr si isNull() est vrai.
ISubDomain * subDomain() const
Sous-domaine associé. Null si isNull() est vrai.
bool hasMesh() const
Indique si le maillage associé a déjà été créé (i.e: mesh() est valide).
IMesh * meshOrNull() const
Retourne le maillage associé à cette instance.
bool isNull() const
Indique si le handle est nul (il ne référence aucun maillage existant ou non).
IMesh * mesh() const
Maillage associé.
IApplication * application() const
Application associée. nullptr si isNull() est vrai.
IUserDataList * meshUserDataList() const
Données utilisateurs associées.
IVariableMng * variableMng() const
Gestionnaire de variable associé. nullptr si isNull() est vrai.
IMeshMng * meshMng() const
Gestionnaire de maillage associé. nullptr si isNull() est vrai.
IObservable * onDestroyObservable() const
Observable pour être notifié de la destruction.
Chaîne de caractères unicode.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --