14#include "arcane/utils/ArcanePrecomp.h"
15#include "arcane/utils/ITraceMng.h"
16#include "arcane/utils/InvalidArgumentException.h"
17#include "arcane/utils/IStackTraceService.h"
18#include "arcane/utils/TraceInfo.h"
19#include "arcane/utils/PlatformUtils.h"
21#include "arcane/VariableRef.h"
22#include "arcane/VariableBuildInfo.h"
23#include "arcane/ISubDomain.h"
24#include "arcane/IModule.h"
25#include "arcane/IVariableMng.h"
26#include "arcane/ArcaneException.h"
55 typedef void (*ChangedFunc)();
59 std::set<ChangedFunc> m_funcs;
64 std::set<ChangedFunc>::const_iterator begin = m_funcs.begin();
65 std::set<ChangedFunc>::const_iterator end = m_funcs.end();
66 for( ; begin!=end; ++begin ){
67 ChangedFunc f = *begin;
76 m_is_destroyed =
true;
81 void add(ChangedFunc f)
86 void remove(ChangedFunc f)
99 if (!var->m_notify_functor_list){
102 var->m_notify_functor_list->add(func);
103 return var->m_notify_functor_list;
111 functor_list->remove(func);
117 if (m_is_destroyed && m_funcs.empty())
127: m_module(vbi.module())
128, m_reference_property(vbi.property())
132 _setAssignmentStackTrace();
141, m_reference_property(var->property())
145 _setAssignmentStackTrace();
167: m_variable(from.m_variable)
168, m_module(from.m_module)
169, m_reference_property(from.m_reference_property)
171 _setAssignmentStackTrace();
187 if (rhs.m_variable != m_variable)
188 _internalAssignVariable(rhs);
202 if (m_notify_functor_list)
203 m_notify_functor_list->destroy();
212_setAssignmentStackTrace()
214 m_assignment_stack_trace =
String();
215 if (hasTraceCreation()){
231 m_is_registered =
false;
242 m_is_registered =
true;
274print(std::ostream& o)
const
277 m_variable->
print(o);
287 return m_variable->
name();
346 return m_reference_property;
363 String msg(
"Using a reference on a uninitialized variable");
373 if (!_checkValidPropertyChanged(
property))
385 if (!_checkValidPropertyChanged(
property))
387 m_reference_property &= ~property;
397_checkValidPropertyChanged(
int property)
509 m_variable->
addTag(tagname,tagvalue);
527 return m_variable->
hasTag(tagname);
536 return m_variable->
tagValue(tagname);
545 return m_previous_reference;
554 return m_next_reference;
563 m_previous_reference = v;
570setNextReference(VariableRef* v)
572 m_next_reference = v;
581bool VariableRef::m_static_has_trace_creation =
false;
587setTraceCreation(
bool v)
589 m_static_has_trace_creation = v;
598 return m_static_has_trace_creation;
605_executeUpdateFunctors()
607 if (m_notify_functor_list)
608 m_notify_functor_list->execute();
615_internalAssignVariable(
const VariableRef& var)
617 _setAssignmentStackTrace();
620 m_module = var.m_module;
621 m_variable = var.m_variable;
622 m_reference_property = var.m_reference_property;
638extern "C" ARCANE_CORE_EXPORT
void*
639_AddVariableChangedDelegate(VariableRef* var,
void (*func)())
641 return VariableRef::UpdateNotifyFunctorList::_add(var,func);
648extern "C" ARCANE_CORE_EXPORT
void
649_RemoveVariableChangedDelegate(VariableRef::UpdateNotifyFunctorList* functor_list,
652 VariableRef::UpdateNotifyFunctorList::_remove(functor_list,func);
Interface du gestionnaire d'un sous-domaine.
Interface de la classe fonctor de recalcul d'une variable.
Interface du gestionnaire de variables.
virtual eDataType dataType() const =0
Type de la donnée gérée par la variable (Real, Integer, ...)
virtual void addTag(const String &tagname, const String &tagvalue)=0
Ajoute le tag tagname avev la valeur tagvalue.
virtual void print(std::ostream &o) const =0
Imprime les valeurs de la variable sur le flot o.
virtual bool hasTag(const String &tagname)=0
true si la variable possède le tag tagname
virtual void setUpToDate()=0
Indique que la variable vient d'être mise à jour.
@ PSubDomainDepend
Indique que la valeur de la variable est dépendante du sous-domaine.
@ PNoExchange
Indique que la variable ne doit pas être échangée.
@ PNoReplicaSync
Indique que la variable n'a pas forcément la même valeur entre les réplicas.
@ PExecutionDepend
Indique que la valeur de la variable est dépendante de l'exécution.
@ PHasTrace
Indique que la variable est tracée (uniquement en mode trace)
@ PPrivate
Indique que la variable est privée.
@ PPersistant
Indique que la variable est persistante.
@ PNoRestore
Indique que la variable ne doit pas être restaurée.
@ PSubDomainPrivate
Indique que la variable est privée au sous-domaine.
@ PNoNeedSync
Indique que la variable n'est pas nécessairement synchronisée.
@ PNoDump
Indique que la variable ne doit pas être sauvegardée.
virtual Integer checkIfSameOnAllReplica(Integer max_print=0)=0
Vérifie si la variable a les mêmes valeurs sur tous les réplicas.
virtual int property() const =0
Retourne les propriétés de la variable.
virtual eItemKind itemKind() const =0
Type des entités du maillage sur lequel repose la variable.
virtual Int64 modifiedTime()=0
Temps auquel la variable a été mise à jour.
virtual String tagValue(const String &tagname)=0
Valeur du tag tagname. La chaîne est nulle si le tag n'existe pas.
virtual Integer checkIfSync(Integer max_print=0)=0
Vérifie si la variable est bien synchronisée.
virtual void notifyReferencePropertyChanged()=0
Indique que les propriétés d'une des références à cette variable ont changé (interne)
virtual void removeDepend(IVariable *var)=0
Supprime var de la liste des dépendances.
virtual ISubDomain * subDomain()=0
Sous-domaine associé à la variable (TODO rendre obsolète fin 2023)
virtual void update()=0
Recalcule la variable si nécessaire.
virtual void addDepend(IVariable *var, eDependType dt)=0
Ajoute var à la liste des dépendances.
virtual void setComputeFunction(IVariableComputeFunction *v)=0
Positionne la fonction de recalcul de la variable.
virtual void removeTag(const String &tagname)=0
Supprime le tag tagname.
virtual void addVariableRef(VariableRef *var_ref)=0
Ajoute une référence à cette variable.
virtual String name() const =0
Nom de la variable.
virtual void removeVariableRef(VariableRef *var_ref)=0
Supprime une référence à cette variable.
virtual IVariableMng * variableMng() const =0
Gestionnaire de variable associé à la variable.
Exception lorsqu'une erreur fatale est survenue.
Paramètres nécessaires à la construction 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.
virtual Integer checkIfSameOnAllReplica(int max_print=0)
Vérifie si la variable a les mêmes valeurs sur tous les réplicas.
virtual void updateFromInternal()
Mise à jour à partir de la partie interne.
VariableRef & operator=(const VariableRef &from)
Opérateur de recopie.
virtual void setProperty(int property)
Positionne la propriété property.
VariableRef()
Constructeur vide.
virtual eDataType dataType() const
Type de la variable (Real, Integer, ...)
void removeTag(const String &tagname)
Supprime le tag tagname.
virtual Integer checkIfSync(int max_print=0)
Vérifie si la variable est bien synchronisée.
virtual void print(std::ostream &o) const
Affiche la valeur de la variable.
virtual int property() const
Propriétés de la variable.
virtual void unsetProperty(int property)
Supprime la propriété property.
void addTag(const String &tagname, const String &tagvalue)
Ajoute le tag tagname avev la valeur tagvalue.
Int64 modifiedTime()
Temps auquel la variable a été mise à jour.
VariableRef * previousReference()
Référence précédente (ou null) sur variable()
String tagValue(const String &tagname) const
Valeur du tag tagname. La chaîne est nulle si le tag n'existe pas.
void setUpToDate()
Indique que la variable vient d'être mise à jour.
void addDependCurrentTime(const VariableRef &var)
Ajoute var à la liste des dépendances au temps courant.
IVariable * variable() const
Variable associée.
void update()
Recalcule la variable si nécessaire.
void _internalInit(IVariable *)
Initialisation interne de la variable.
virtual void unregisterVariable()
Supprime l'enregistrement de la variable (interne)
String name() const
Nom de la variable.
ISubDomain * subDomain() const
Sous-domaine associé à la variable (TODO rendre obsolète fin 2023)
virtual void registerVariable()
Enregistre la variable (interne)
virtual int referenceProperty() const
Propriétés de la référence (interne)
bool hasTag(const String &tagname) const
true si la variable possède le tag tagname
void removeDepend(const VariableRef &var)
Supprime var de la liste des dépendances.
IVariableMng * variableMng() const
Gestionnaire de variable associé à la variable.
void addDependPreviousTime(const VariableRef &var)
Ajoute var à la liste des dépendances au temps précédent.
virtual ~VariableRef()
Libère les ressources.
VariableRef * nextReference()
Référence suivante (ou null) sur variable()
virtual StackTrace stackTrace(int first_function=0)=0
Chaîne de caractère indiquant la pile d'appel.
const String & toString() const
Chaîne de caractères indiquant la pile d'appel.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
@ IK_Unknown
Entité de maillage de genre inconnu ou non initialisé
eDataType
Type d'une donnée.