14#include "arcane/core/MeshHandle.h"
16#include "IParallelMng.h"
17#include "arcane/utils/UserDataList.h"
18#include "arcane/utils/FatalErrorException.h"
19#include "arcane/utils/Observable.h"
20#include "arcane/utils/ValueConvert.h"
22#include "arcane/core/ISubDomain.h"
23#include "arcane/core/IMesh.h"
24#include "arcane/core/IMeshBase.h"
47 const String& meshName()
const {
return m_mesh_name; }
48 bool isNull()
const {
return m_is_null; }
49 IMesh*
mesh()
const {
return m_mesh_ptr; }
50 IMeshBase* meshBase()
const {
return m_mesh_base_ptr; }
55 IUserDataList* userDataList()
const {
return m_user_data_list; }
57 bool isDoFatalInMeshMethod()
const {
return m_do_fatal_in_mesh_method; }
62 void _setMesh(
IMesh* mesh);
72 Int32 v = std::atomic_fetch_add(&m_nb_ref, -1);
80 IMesh* m_mesh_ptr =
nullptr;
90 bool m_is_null =
true;
91 bool m_do_fatal_in_mesh_method =
false;
92 std::atomic<Int32> m_nb_ref = 0;
100MeshHandle::MeshHandleRef::
104, m_is_null(name.null())
114 m_do_fatal_in_mesh_method = v.value()!=0;
120MeshHandle::MeshHandleRef::
123 delete m_user_data_list;
124 delete m_on_destroy_observable;
130void MeshHandle::MeshHandleRef::
137 m_parallel_mng_ref =
makeRef(mesh->parallelMng());
139 m_parallel_mng_ref.reset();
145void MeshHandle::MeshHandleRef::
149 IMesh*
mesh = m_mesh_ptr;
152 m_on_destroy_observable->notifyAllObservers();
153 m_user_data_list->clear();
156 m_mesh_ptr =
nullptr;
167MeshHandle(ISubDomain* sd,
const String& name)
182MeshHandle(
const MeshHandle& x)
188MeshHandle(MeshHandle&& x) noexcept
189: m_ref(std::move(x.m_ref))
193MeshHandle& MeshHandle::
194operator=(
const MeshHandle& x)
201MeshHandle& MeshHandle::
202operator=(MeshHandle&& x)
noexcept
204 m_ref = std::move(x.m_ref);
224 return m_ref->meshMng();
233 IMesh* m = m_ref->mesh();
243 IMesh* m = m_ref->mesh();
248 bool do_fatal = m_ref->isDoFatalInMeshMethod();
250 ARCANE_FATAL(
"Invalid call for null mesh. Call MeshHandle::hasMesh() before to make sure mesh is valid");
260 return m_ref->mesh();
269 return m_ref->traceMng();
278 return m_ref->variableMng();
287 return m_ref->subDomain()->application();
296 return m_ref->onDestroyObservable();
301 return m_ref->userDataList();
304String MeshHandle::meshName()
const
306 return m_ref->meshName();
312 return m_ref->isNull();
319 m_ref->_setMesh(
mesh);
326 m_ref->_destroyMesh();
333 return m_ref->mesh();
339 return m_ref->subDomain();
359 m_handle =
mesh->handle();
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Classe template pour convertir un type.
Interface de l'application.
virtual ITraceMng * traceMng() const =0
Gestionnaire de traces.
Interface du gestionnaire des maillages.
Interface d'un observable.
Interface du gestionnaire d'un sous-domaine.
virtual IMeshMng * meshMng() const =0
Retourne le gestionnaire de maillage.
virtual IVariableMng * variableMng()=0
Retourne le gestionnaire de variables.
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éé
const MeshHandle & handle() const
handle associé.
MeshHandleOrMesh(const MeshHandle &handle)
Construit une instance à partir d'un MeshHandle.
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).
void _setMesh(IMesh *mesh)
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.
IMesh * _internalMeshOrNull() const
IMeshMng * meshMng() const
Gestionnaire de maillage associé. nullptr si isNull() est vrai.
IObservable * onDestroyObservable() const
Observable pour être notifié de la destruction.
Classe de base d'un observable.
Référence à une instance.
Implémentation thread-safe d'un compteur de référence.
Chaîne de caractères unicode.
Gère une liste de données utilisateurs.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.
std::int32_t Int32
Type entier signé sur 32 bits.