Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
VariableRefScalar.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/* VariableRefScalar.h (C) 2000-2020 */
9/* */
10/* Classe gérant une référence sur une variable scalaire. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_VARIABLEREFSCALAR_H
13#define ARCANE_VARIABLEREFSCALAR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/VariableRef.h"
18#include "arcane/Parallel.h"
19#include "arcane/MathUtils.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
40template<typename DataType>
42: public VariableRef
43{
44 public:
45
47 typedef DataType ElementType;
50
51 typedef VariableScalarT<DataType> PrivatePartType;
52
53 typedef VariableRefScalarT<DataType> ThatClass;
54
55 public:
56
58 explicit ARCANE_CORE_EXPORT VariableRefScalarT(const VariableBuildInfo& b);
60 ARCANE_CORE_EXPORT VariableRefScalarT(const VariableRefScalarT<DataType>& rhs);
62 explicit ARCANE_CORE_EXPORT VariableRefScalarT(IVariable* var);
64 ARCANE_CORE_EXPORT void refersTo(const VariableRefScalarT<DataType>& rhs);
65
66#ifdef ARCANE_DOTNET
67 public:
68#else
69 protected:
70#endif
71
73 VariableRefScalarT() : m_private_part(nullptr) {}
74
75 public:
76
77 virtual bool isArrayVariable() const { return false; }
78 virtual Integer arraySize() const { return 0; }
79 virtual ARCANE_CORE_EXPORT void updateFromInternal();
80
81 public:
82
83 ArrayView<DataType> asArray() { return ArrayView<DataType>(1,&(m_private_part->value())); }
84 ConstArrayView<DataType> asArray() const { return ConstArrayView<DataType>(1,&(m_private_part->value())); }
85
86 public:
87
88 void operator=(const DataType& v) { assign(v); }
90 {
91 assign(v());
92 return (*this);
93 }
94
96 void reset() { assign(DataType()); }
97
99 const DataType& operator()() const { return m_private_part->value(); }
100
102 const DataType& value() const { return m_private_part->value(); }
103
107 bool isEqual(const DataType& v) const
108 { return math::isEqual(m_private_part->value(),v); }
109
114 bool isZero() const
115 { return math::isZero(m_private_part->value()); }
116
123 bool isNearlyEqual(const DataType& v) const
124 { return math::isNearlyEqual(m_private_part->value(),v); }
125
129 bool isNearlyZero() const
130 { return math::isNearlyZero(m_private_part->value()); }
131
133 ARCANE_CORE_EXPORT void assign(const DataType& v);
134
136 ARCANE_CORE_EXPORT void reduce(Parallel::eReduceType type);
137
138 ARCANE_CORE_EXPORT void swapValues(VariableRefScalarT<DataType>& rhs);
139
140 protected:
141
142 private:
143
144 PrivatePartType* m_private_part;
145
146 private:
147
148 static VariableFactoryRegisterer m_auto_registerer;
149 static VariableTypeInfo _buildVariableTypeInfo();
150 static VariableInfo _buildVariableInfo(const VariableBuildInfo& vbi);
151 static VariableRef* _autoCreate(const VariableBuildInfo& vb);
152};
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156
157} // End namespace Arcane
158
159/*---------------------------------------------------------------------------*/
160/*---------------------------------------------------------------------------*/
161
162#endif
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Interface d'une variable.
Definition IVariable.h:56
Paramètres nécessaires à la construction d'une variable.
Enregistreur d'une fabrique de variables.
Infos caractérisant une variable.
VariableRefScalarT(const VariableBuildInfo &b)
Construit une référence à une variable scalaire spécifiée dans vb.
void refersTo(const VariableRefScalarT< DataType > &rhs)
Positionne la référence de l'instance à la variable rhs.
const DataType & value() const
Valeur du scalaire.
void swapValues(VariableRefScalarT< DataType > &rhs)
Échange les valeurs de la variable rhs avec celles de l'instance.
virtual Integer arraySize() const
Si la variable est un tableau, retourne sa dimension, sinon retourne 0.
bool isNearlyZero() const
Compare la variable avec la valeur 0.
const DataType & operator()() const
Valeur du scalaire.
void reset()
Réinitialise la variable avec sa valeur par défaut.
VariableRefScalarT()
Constructeur vide.
bool isEqual(const DataType &v) const
Compare la variable avec la valeur v.
VariableRefScalarT(IVariable *var)
Construit une référence à partir de var.
bool isNearlyEqual(const DataType &v) const
Compare la variable avec la valeur v.
void reduce(Parallel::eReduceType type)
Effectue une réduction de type type sur la variable.
VariableRef BaseClass
Type de la classe de base.
VariableRefScalarT(const VariableRefScalarT< DataType > &rhs)
Construit une référence à partir de rhs.
bool isZero() const
Compare la variable avec la valeur 0.
void assign(const DataType &v)
Affecte à la variable la valeur v.
virtual void updateFromInternal()
Mise à jour à partir de la partie interne.
DataType ElementType
Type des éléments de la variable.
VariableRef(const VariableBuildInfo &vbi)
Construit une référence sur une variable avec les infos vbi.
Variable scalaire.
Informations caractérisant le type d'une variable.
eReduceType
Types des réductions supportées.
constexpr __host__ __device__ bool isNearlyEqual(const _Type &a, const _Type &b)
Teste si deux valeurs sont à un peu près égales. Pour les types entiers, cette fonction est équivalen...
Definition Numeric.h:212
bool isZero(const BuiltInProxy< _Type > &a)
Teste si une valeur est exactement égale à zéro.
constexpr __host__ __device__ bool isEqual(const _Type &a, const _Type &b)
Teste l'égalité bit à bit entre deux valeurs.
Definition Numeric.h:253
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.