Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
DataTypes.cc
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/* DataTypes.cc (C) 2000-2024 */
9/* */
10/* Définition des types liés aux données. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/String.h"
15#include "arcane/utils/ArrayView.h"
16#include "arcane/utils/Iostream.h"
17#include "arcane/utils/FatalErrorException.h"
18#include "arcane/utils/TraceInfo.h"
19#include "arcane/utils/NumericTypes.h"
20#include "arcane/utils/ArgumentException.h"
21#include "arcane/utils/PlatformUtils.h"
22#include "arcane/utils/Array.h"
23
24#include "arcane/core/datatype/DataTypeTraits.h"
26
27#include <limits>
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31/*!
32 * \file DataTypes.h
33 *
34 * \brief Fichier contenant les définitions des types de données gérés par %Arcane.
35 */
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
38
39namespace Arcane
40{
41
42namespace
43{
44 const char* N_ALL_NAMES[NB_ARCANE_DATA_TYPE] = {
45 DataTypeNames::N_BYTE, DataTypeNames::N_REAL,
46 DataTypeNames::N_INT16, DataTypeNames::N_INT32, DataTypeNames::N_INT64,
47 DataTypeNames::N_STRING,
48 DataTypeNames::N_REAL2, DataTypeNames::N_REAL3, DataTypeNames::N_REAL2x2, DataTypeNames::N_REAL3x3,
49 DataTypeNames::N_BFLOAT16, DataTypeNames::N_FLOAT16, DataTypeNames::N_FLOAT32,
50 DataTypeNames::N_INT8,
51 DataTypeNames::N_UNKNOWN
52 };
53
54 //! Taille d'un élément du type
55 int ALL_SIZEOF[NB_ARCANE_DATA_TYPE] = {
56 sizeof(Byte), sizeof(Real),
57 sizeof(Int16), sizeof(Int32), sizeof(Int64),
58 -1,
59 sizeof(Real2), sizeof(Real3), sizeof(Real2x2), sizeof(Real3x3),
60 sizeof(BFloat16), sizeof(Float16), sizeof(Float32),
61 sizeof(Int8),
62 0
63 };
64} // namespace
65
66/*---------------------------------------------------------------------------*/
67/*---------------------------------------------------------------------------*/
68
69extern "C++" const char*
71{
72 Int32 v = type;
73 if (v >= NB_ARCANE_DATA_TYPE)
74 return "(Invalid)";
75 return N_ALL_NAMES[v];
76}
77
78/*---------------------------------------------------------------------------*/
79/*---------------------------------------------------------------------------*/
80
81extern "C++" std::ostream&
82operator<<(std::ostream& ostr, eDataType data_type)
83{
84 ostr << dataTypeName(data_type);
85 return ostr;
86}
87
88/*---------------------------------------------------------------------------*/
89/*---------------------------------------------------------------------------*/
90
91extern "C++" ARCANE_DATATYPE_EXPORT eDataType
92dataTypeFromName(const char* name, bool& has_error)
93{
94 has_error = false;
95 std::string_view buf(name);
96 for (int i = 0; i < NB_ARCANE_DATA_TYPE; ++i) {
97 if (buf == std::string_view(N_ALL_NAMES[i])) {
98 has_error = false;
99 return static_cast<eDataType>(i);
100 }
101 }
102 return DT_Unknown;
103}
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107
108extern "C++" ARCANE_DATATYPE_EXPORT Integer
110{
111 if (type == DT_String)
112 ARCANE_THROW(ArgumentException, "datatype 'DT_String' has no size");
113 const Int32 v = type;
114 if (v >= NB_ARCANE_DATA_TYPE)
115 ARCANE_THROW(ArgumentException, "Invalid datatype value '{0}'", v);
116 return ALL_SIZEOF[v];
117}
118
119/*---------------------------------------------------------------------------*/
120/*---------------------------------------------------------------------------*/
121
122//! Trouve le type associé à \a name. Envoie une exception en cas d'erreur
123extern "C++" ARCANE_DATATYPE_EXPORT eDataType
124dataTypeFromName(const char* name)
125{
126 bool has_error = true;
127 eDataType data_type = dataTypeFromName(name, has_error);
128 if (has_error)
129 ARCANE_FATAL("Bad DataType '{0}'", name);
130 return data_type;
131}
132
133/*---------------------------------------------------------------------------*/
134/*---------------------------------------------------------------------------*/
135
136extern "C++" std::istream&
137operator>>(std::istream& istr, eDataType& data_type)
138{
139 std::string buf;
140 istr >> buf;
141 bool has_error = true;
142 data_type = dataTypeFromName(buf.c_str(), has_error);
143 if (has_error) {
144 data_type = DT_Unknown;
145 istr.setstate(std::ios_base::failbit);
146 }
147 return istr;
148}
149
150/*---------------------------------------------------------------------------*/
151/*---------------------------------------------------------------------------*/
152
153static eDataInitialisationPolicy global_data_initialisation_policy = DIP_Legacy;
154
155extern "C++" ARCANE_CORE_EXPORT void
157{
158 global_data_initialisation_policy = init_policy;
159}
160
161extern "C++" ARCANE_CORE_EXPORT eDataInitialisationPolicy
163{
164 return global_data_initialisation_policy;
165}
166
167/*---------------------------------------------------------------------------*/
168/*---------------------------------------------------------------------------*/
169
170namespace
171{
172 Real _getNan()
173 {
174 return std::numeric_limits<Real>::signaling_NaN();
175 }
176} // namespace
177
178/*---------------------------------------------------------------------------*/
179/*---------------------------------------------------------------------------*/
180
181template <typename Type> static void
182_fillNoNan(ArrayView<Type> ptr)
183{
184 Type v = Type();
185 Integer n = ptr.size();
186 for (Integer i = 0; i < n; ++i)
187 ptr[i] = v;
188}
189
192{
193 _fillNoNan(ptr);
194}
195
198{
199 _fillNoNan(ptr);
200}
201
204{
205 _fillNoNan(ptr);
206}
207
210{
211 _fillNoNan(ptr);
212}
213
216{
217 _fillNoNan(ptr);
218}
219
220static void
221_fillWithNan(RealArrayView ptr)
222{
223 Real v = _getNan();
224 Integer n = ptr.size();
225 for (Integer i = 0; i < n; ++i)
226 ptr[i] = v;
227}
228
231{
232 _fillWithNan(ptr);
233}
234
237{
238 _fillWithNan(RealArrayView(ptr.size() * 2, (Real*)ptr.data()));
239}
240
243{
244 _fillWithNan(RealArrayView(ptr.size() * 4, (Real*)ptr.data()));
245}
246
249{
250 _fillWithNan(RealArrayView(ptr.size() * 9, (Real*)ptr.data()));
251}
252
255{
256 _fillWithNan(RealArrayView(ptr.size() * 3, (Real*)ptr.data()));
257}
258
259/*---------------------------------------------------------------------------*/
260/*---------------------------------------------------------------------------*/
261
264{
265 return String();
266}
267
270{
271 return Real3::zero();
272}
273
279
282{
283 return Real2::null();
284}
285
291
292/*---------------------------------------------------------------------------*/
293/*---------------------------------------------------------------------------*/
294
295} // End namespace Arcane
296
297/*---------------------------------------------------------------------------*/
298/*---------------------------------------------------------------------------*/
299
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Fichier contenant les définitions des types de données gérés par Arcane.
Classe gérant un vecteur de réel de dimension 2.
Definition Real2.h:121
Classe gérant une matrice de réel de dimension 2x2.
Definition Real2x2.h:53
constexpr __host__ static __device__ Real2x2 null()
Construit la matrice nulle.
Definition Real2x2.h:104
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Classe gérant une matrice de réel de dimension 3x3.
Definition Real3x3.h:66
constexpr __host__ static __device__ Real3x3 zero()
Construit la matrice nulle.
Definition Real3x3.h:127
Exception lorsqu'un argument est invalide.
Vue modifiable d'un tableau d'un type T.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
constexpr const_pointer data() const noexcept
Pointeur sur le début de la vue.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ARCANE_DATATYPE_EXPORT Integer dataTypeSize(eDataType type)
Taille du type de donnée type (qui doit être différent de DT_String)
Definition DataTypes.cc:109
void setGlobalDataInitialisationPolicy(eDataInitialisationPolicy init_policy)
Positionne la politique d'initialisation des variables.
Definition DataTypes.cc:156
eDataInitialisationPolicy
Type de politique d'initialisation possible pour une donnée.
Definition DataTypes.h:127
@ DIP_Legacy
Initialisation en mode historique.
Definition DataTypes.h:157
Arccore::Float16 Float16
Type 'Float16' (binary16)
eDataInitialisationPolicy getGlobalDataInitialisationPolicy()
Récupère la politique d'initialisation des variables.
Definition DataTypes.cc:162
Arccore::Int8 Int8
Type représentant un entier sur 8 bits.
Arccore::BFloat16 BFloat16
Type 'Brain Float16'.
std::istream & operator>>(std::istream &istr, eItemKind &item_kind)
Opérateur d'entrée depuis un flot.
float Float32
Type flottant IEEE-753 simple précision (binary32)
unsigned char Byte
Type d'un octet.
Definition UtilsTypes.h:142
eDataType
Type d'une donnée.
Definition DataTypes.h:39
@ DT_Unknown
Donnée de type inconnue ou non initialisée.
Definition DataTypes.h:54
@ DT_String
Donnée de type chaîne de caractère UTF-8.
Definition DataTypes.h:45
std::ostream & operator<<(std::ostream &ostr, eItemKind item_kind)
Opérateur de sortie sur un flot.
ARCANE_DATATYPE_EXPORT eDataType dataTypeFromName(const char *name, bool &has_error)
Trouve le type associé à name.
Definition DataTypes.cc:92
ArrayView< Real > RealArrayView
Equivalent C d'un tableau à une dimension de réels.
Definition UtilsTypes.h:617
const char * dataTypeName(eDataType type)
Nom du type de donnée.
Definition DataTypes.cc:70
Int32 Integer
Type représentant un entier.