Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
VariableRef.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* VariableRef.h (C) 2000-2024 */
9/* */
10/* Classe gérant une référence sur une variable. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_VARIABLEREF_H
13#define ARCANE_CORE_VARIABLEREF_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/String.h"
18
19#include "arcane/core/IVariable.h"
20#include "arcane/core/VariableComputeFunction.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31class IModule;
32class IVariableComputeFunction;
33class VariableBuildInfo;
34typedef VariableBuildInfo VariableBuilder;
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
55class ARCANE_CORE_EXPORT VariableRef
56{
57 public:
58
60 friend class UpdateNotifyFunctorList;
61
62 protected:
63
65 explicit VariableRef(const VariableBuildInfo& vbi);
69 explicit VariableRef(IVariable* var);
71 VariableRef& operator=(const VariableRef& from);
74
75 public:
76
78 virtual ~VariableRef();
79
80 public:
81
83 ISubDomain* subDomain() const;
84
85 public:
86
88 IVariableMng* variableMng() const;
89
91 String name() const;
92
93 public:
94
95 //TODO Supprimer virtual
97 virtual eDataType dataType() const;
98
100 virtual void print(std::ostream& o) const;
101
102 //TODO Supprimer virtual
104 virtual IModule* module() const { return m_module; }
105
106 //TODO Supprimer virtual
108 virtual int property() const;
109
111 virtual int referenceProperty() const;
112
114 virtual void setProperty(int property);
115
117 virtual void unsetProperty(int property);
118
120 virtual void registerVariable();
121
123 virtual void unregisterVariable();
124
126 IVariable* variable() const { return m_variable; }
127
131 virtual Integer checkIfSync(int max_print = 0);
132
137 virtual Integer checkIfSameOnAllReplica(int max_print = 0);
138
140 virtual void updateFromInternal();
141
143 virtual Integer arraySize() const { return 0; }
144
145 public:
146
147 void setUsed(bool v) { m_variable->setUsed(v); }
148 bool isUsed() const { return m_variable->isUsed(); }
149
150 virtual void internalSetUsed(bool /*v*/) {}
151
152 public:
153
160 const String& assignmentStackTrace() const { return m_assignment_stack_trace; }
161
162 public:
163
165
166 void addTag(const String& tagname, const String& tagvalue);
171 void removeTag(const String& tagname);
173 bool hasTag(const String& tagname) const;
175 String tagValue(const String& tagname) const;
177
178 public:
179
193 void update();
194
201 void setUpToDate();
202
204 Int64 modifiedTime();
205
207 void addDependCurrentTime(const VariableRef& var);
208
210 void addDependCurrentTime(const VariableRef& var, const TraceInfo& tinfo);
211
213 void addDependPreviousTime(const VariableRef& var);
214
216 void addDependPreviousTime(const VariableRef& var, const TraceInfo& tinfo);
217
220 void removeDepend(const VariableRef& var);
221
228 template <typename ClassType> void
230 {
231 _setComputeFunction(new VariableComputeFunction(instance, func));
232 }
233
241 template <typename ClassType> void
243 {
244 _setComputeFunction(new VariableComputeFunction(instance, func, tinfo));
245 }
247
248 public:
249
251 VariableRef* previousReference();
252
254 VariableRef* nextReference();
255
262 void setPreviousReference(VariableRef* v);
263
270 void setNextReference(VariableRef* v);
271
272 public:
273
274 static void setTraceCreation(bool v);
275 static bool hasTraceCreation();
276
277 protected:
278
279 void _setComputeFunction(IVariableComputeFunction* v);
280
288 void _internalInit(IVariable*);
289
296 {
297 _checkValid();
298 return m_variable;
299 }
300
301 private:
302
304 IVariable* m_variable = nullptr;
305
307 IModule* m_module = nullptr;
308
310 bool m_is_registered = false;
311
313 int m_reference_property = 0;
314
316 VariableRef* m_previous_reference = nullptr;
317
319 VariableRef* m_next_reference = nullptr;
320
327
328 protected:
329
330 void _executeUpdateFunctors();
331
332 bool m_has_trace = false;
333
334 private:
335
336 void _checkValid() const
337 {
338#ifdef ARCANE_CHECK
339 if (!m_variable)
340 _throwInvalid();
341#endif
342 }
343 void _throwInvalid() const;
344 bool _checkValidPropertyChanged(int property);
345 void _setAssignmentStackTrace();
346
347 protected:
348
349 void _internalAssignVariable(const VariableRef& var);
350
351 private:
352
353 static bool m_static_has_trace_creation;
354 UpdateNotifyFunctorList* m_notify_functor_list = nullptr;
355};
356
357/*---------------------------------------------------------------------------*/
358/*---------------------------------------------------------------------------*/
359
360} // End variable Arcane
361
362/*---------------------------------------------------------------------------*/
363/*---------------------------------------------------------------------------*/
364
365#endif
366
367//TODO: a supprimer quand tous les codes inclueront directement ce fichier
368#include "arcane/VariableList.h"
Interface d'un module.
Definition IModule.h:39
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Interface de la classe fonctor de recalcul d'une variable.
Interface du gestionnaire de variables.
Interface d'une variable.
Definition IVariable.h:54
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Paramètres nécessaires à la construction d'une variable.
Interface de la classe fonctor de recalcul d'une variable.
Classe interne pour gérer les fonctor appelés lors de la mise à jour de la variable.
Référence à une variable.
Definition VariableRef.h:56
virtual IModule * module() const
Module associé à la variable (ou nullptr, s'il n'y en a pas)
String m_assignment_stack_trace
Pile d'appel lors de l'assignation de la variable.
void setComputeFunction(ClassType *instance, void(ClassType::*func)(), const TraceInfo &tinfo)
Positionne la fonction de recalcule de la variable.
IVariable * variable() const
Variable associée.
const String & assignmentStackTrace() const
Pile d'appel au moment de l'assignation de cette instance.
virtual Integer arraySize() const
Si la variable est un tableau, retourne sa dimension, sinon retourne 0.
void setComputeFunction(ClassType *instance, void(ClassType::*func)())
Positionne la fonction de recalcule de la variable.
IVariable * _variable() const
Variable référencée.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eDataType
Type d'une donnée.
Definition DataTypes.h:39