Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
DataTypeTraits.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/* DataTypeTraits.h (C) 2000-2020 */
9/* */
10/* Caractéristiques d'un type de donnée. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_DATATYPE_DATATYPETRAITS_H
13#define ARCANE_DATATYPE_DATATYPETRAITS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ArcaneTypes.h"
18#include "arcane/utils/BasicDataType.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29class DataTypeScalarReal;
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34template<typename DataType>
36class Real2Proxy;
37class Real3Proxy;
38class Real3x3Proxy;
39class Real2x2Proxy;
40template<typename Type>
41class BuiltInProxy;
42
43/*---------------------------------------------------------------------------*/
44/*---------------------------------------------------------------------------*/
49template<>
51{
52 public:
53
55 typedef bool Type;
56
58 typedef bool BasicType;
59
61 static constexpr int nbBasicType() { return 1; }
62
64 static constexpr const char* name() { return "Bool"; }
65
69 static constexpr eDataType type() { return DT_Byte; }
70
73
75 static Type nanValue() { return 0; }
76
78 static void fillNan(ArrayView<Type> values);
79
81 static constexpr Type defaultValue() { return false; }
82};
83
84/*---------------------------------------------------------------------------*/
85/*---------------------------------------------------------------------------*/
90template<>
92{
93 public:
94
96 typedef Byte Type;
97
99 typedef Byte BasicType;
100
102 static constexpr int nbBasicType() { return 1; }
103
105 static constexpr const char* name() { return "Byte"; }
106
108 static constexpr eDataType type() { return DT_Byte; }
109
111 static constexpr eBasicDataType basicDataType() { return eBasicDataType::Byte; }
112
115
117 static constexpr Type nanValue() { return 0; }
118
120 static void fillNan(ArrayView<Type> values);
121
123 static constexpr Type defaultValue() { return 0; }
124};
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
132template<>
134{
135 public:
136
138 typedef Real Type;
139
141 typedef Real BasicType;
142
144 static constexpr int nbBasicType() { return 1; }
145
147 static constexpr const char* name() { return "Real"; }
148
150 static constexpr eDataType type() { return DT_Real; }
151
153 // TODO: calculer automatiquement la taille
154 static constexpr eBasicDataType basicDataType() { return eBasicDataType::Float64; }
155
158
160 static void fillNan(ArrayView<Type> values);
161
163 static constexpr Type defaultValue() { return 0.0; }
164};
165
166/*---------------------------------------------------------------------------*/
167/*---------------------------------------------------------------------------*/
172template<>
173class DataTypeTraitsT<Int16>
174{
175 public:
176
178 typedef Int16 Type;
179
181 typedef Int16 BasicType;
182
184 static constexpr int nbBasicType() { return 1; }
185
187 static constexpr const char* name() { return "Int16"; }
188
190 static constexpr eDataType type() { return DT_Int16; }
191
193 static constexpr eBasicDataType basicDataType() { return eBasicDataType::Int16; }
194
197
199 static void fillNan(ArrayView<Type> values);
200
202 static constexpr Type defaultValue() { return 0; }
203};
204
205/*---------------------------------------------------------------------------*/
206/*---------------------------------------------------------------------------*/
211template<>
212class DataTypeTraitsT<Int32>
213{
214 public:
215
217 typedef Int32 Type;
218
220 typedef Int32 BasicType;
221
223 static constexpr int nbBasicType() { return 1; }
224
226 static constexpr const char* name() { return "Int32"; }
227
229 static constexpr eDataType type() { return DT_Int32; }
230
232 static constexpr eBasicDataType basicDataType() { return eBasicDataType::Int32; }
233
236
238 static void fillNan(ArrayView<Type> values);
239
241 static constexpr Type defaultValue() { return 0; }
242};
243
244/*---------------------------------------------------------------------------*/
245/*---------------------------------------------------------------------------*/
250template<>
251class DataTypeTraitsT<Int64>
252{
253 public:
254
256 typedef Int64 Type;
257
259 typedef Int64 BasicType;
260
262 static constexpr int nbBasicType() { return 1; }
263
265 static constexpr const char* name() { return "Int64"; }
266
268 static constexpr eDataType type() { return DT_Int64; }
269
271 static constexpr eBasicDataType basicDataType() { return eBasicDataType::Int64; }
272
275
277 static void fillNan(ArrayView<Type> values);
278
280 static constexpr Type defaultValue() { return 0; }
281};
282
283/*---------------------------------------------------------------------------*/
284/*---------------------------------------------------------------------------*/
289template<>
291{
292 public:
293
295 typedef String Type;
296
299
301 static constexpr int nbBasicType() { return 1; }
302
304 static constexpr const char* name() { return "String"; }
305
307 static constexpr eDataType type() { return DT_String; }
308
311
313 static void fillNan(ArrayView<Type> values);
314
316 static ARCANE_CORE_EXPORT Type defaultValue();
317};
318
319/*---------------------------------------------------------------------------*/
320/*---------------------------------------------------------------------------*/
325template<>
327{
328 public:
329
331 typedef Real2 Type;
332
334 typedef Real BasicType;
335
337 using SubscriptType = Real;
338
340 static constexpr int nbBasicType() { return 2; }
341
343 static constexpr const char* name() { return "Real2"; }
344
346 static constexpr eDataType type() { return DT_Real2; }
347
349 static constexpr eBasicDataType basicDataType() { return DataTypeTraitsT<Real>::basicDataType(); }
350
353
355 static void fillNan(ArrayView<Type> values);
356
358 static ARCANE_CORE_EXPORT Type defaultValue();
359
360 public:
361
362 static constexpr bool HasSubscriptOperator() { return true; }
363 static constexpr bool HasComponentX() { return true; }
364 static constexpr bool HasComponentY() { return true; }
365
366 using ComponentType = Real;
367};
368
369/*---------------------------------------------------------------------------*/
370/*---------------------------------------------------------------------------*/
375template<>
377{
378 public:
379
381 typedef Real3 Type;
382
384 typedef Real BasicType;
385
387 using SubscriptType = Real;
388
390 static constexpr int nbBasicType() { return 3; }
391
393 static constexpr const char* name() { return "Real3"; }
394
396 static constexpr eDataType type() { return DT_Real3; }
397
399 static constexpr eBasicDataType basicDataType() { return DataTypeTraitsT<Real>::basicDataType(); }
400
403
405 static void fillNan(ArrayView<Type> values);
406
408 static ARCANE_CORE_EXPORT Type defaultValue();
409
410 static constexpr bool HasSubscriptOperator() { return true; }
411 static constexpr bool HasComponentX() { return true; }
412 static constexpr bool HasComponentY() { return true; }
413 static constexpr bool HasComponentZ() { return true; }
414
415 using ComponentType = Real;
416};
417
418/*---------------------------------------------------------------------------*/
419/*---------------------------------------------------------------------------*/
424template<>
426{
427 public:
428
430 typedef Real2x2 Type;
431
433 typedef Real BasicType;
434
437
439 static constexpr int nbBasicType() { return 4; }
440
442 static constexpr const char* name() { return "Real2x2"; }
443
445 static constexpr eDataType type() { return DT_Real2x2; }
446
448 static constexpr eBasicDataType basicDataType() { return DataTypeTraitsT<Real>::basicDataType(); }
449
452
454 static void fillNan(ArrayView<Type> values);
455
457 static ARCANE_CORE_EXPORT Type defaultValue();
458
459 static constexpr bool HasSubscriptOperator() { return true; }
460
461 static constexpr bool HasComponentXX() { return true; }
462 static constexpr bool HasComponentYX() { return true; }
463 static constexpr bool HasComponentXY() { return true; }
464 static constexpr bool HasComponentYY() { return true; }
465
466 static constexpr bool HasComponentX() { return true; }
467 static constexpr bool HasComponentY() { return true; }
468
469 using ComponentType = Real2;
470};
471
472/*---------------------------------------------------------------------------*/
473/*---------------------------------------------------------------------------*/
478template<>
480{
481 public:
482
484 typedef Real3x3 Type;
485
487 typedef Real BasicType;
488
491
493 static constexpr int nbBasicType() { return 9; }
494
496 static constexpr const char* name() { return "Real3x3"; }
497
499 static constexpr eDataType type() { return DT_Real3x3; }
500
502 static constexpr eBasicDataType basicDataType() { return DataTypeTraitsT<Real>::basicDataType(); }
503
506
508 static void fillNan(ArrayView<Type> values);
509
511 static ARCANE_CORE_EXPORT Type defaultValue();
512
513 static constexpr bool HasSubscriptOperator() { return true; }
514
515 static constexpr bool HasComponentXX() { return true; }
516 static constexpr bool HasComponentYX() { return true; }
517 static constexpr bool HasComponentZX() { return true; }
518 static constexpr bool HasComponentXY() { return true; }
519 static constexpr bool HasComponentYY() { return true; }
520 static constexpr bool HasComponentZY() { return true; }
521 static constexpr bool HasComponentXZ() { return true; }
522 static constexpr bool HasComponentYZ() { return true; }
523 static constexpr bool HasComponentZZ() { return true; }
524
525 static constexpr bool HasComponentX() { return true; }
526 static constexpr bool HasComponentY() { return true; }
527 static constexpr bool HasComponentZ() { return true; }
528
529 using ComponentType = Real3;
530};
531
532/*---------------------------------------------------------------------------*/
533/*---------------------------------------------------------------------------*/
538template<int Size>
539class DataTypeTraitsT<NumVector<Real,Size>>
540{
541 public:
542
544 typedef Real Type;
545
547 typedef Real BasicType;
548
551
553 static constexpr int nbBasicType() { return Size; }
554
556 static constexpr eBasicDataType basicDataType() { return DataTypeTraitsT<Real>::basicDataType(); }
557};
558
559/*---------------------------------------------------------------------------*/
560/*---------------------------------------------------------------------------*/
565template<int RowSize,int ColumnSize>
567{
568 public:
569
571 typedef Real Type;
572
574 typedef Real BasicType;
575
578
580 static constexpr int nbBasicType() { return RowSize * ColumnSize; }
581
583 static constexpr eBasicDataType basicDataType() { return DataTypeTraitsT<Real>::basicDataType(); }
584};
585
586/*---------------------------------------------------------------------------*/
587/*---------------------------------------------------------------------------*/
588
589} // End namespace Arcane
590
591/*---------------------------------------------------------------------------*/
592/*---------------------------------------------------------------------------*/
593
594#endif
595
Proxy d'un type du langage.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr const char * name()
Nom du type de donnée.
static constexpr eDataType type()
Type de donnée.
Byte BasicType
Type de donnée de base de ce type de donnée.
static constexpr Type defaultValue()
Valeur par défaut.
static constexpr Type nanValue()
Elément initialisé à NAN.
BuiltInProxy< Byte > ProxyType
Type du proxy associé
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr eDataType type()
Type de donnée.
Int16 BasicType
Type de donnée de base de ce type de donnée.
BuiltInProxy< Int32 > ProxyType
Type du proxy associé
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr Type defaultValue()
Valeur par défaut.
static constexpr const char * name()
Nom du type de donnée.
static constexpr Type defaultValue()
Valeur par défaut.
BuiltInProxy< Int32 > ProxyType
Type du proxy associé
static constexpr const char * name()
Nom du type de donnée.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
Int32 BasicType
Type de donnée de base de ce type de donnée.
static constexpr eDataType type()
Type de donnée.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr Type defaultValue()
Valeur par défaut.
static constexpr eDataType type()
Type de donnée.
Int64 BasicType
Type de donnée de base de ce type de donnée.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
BuiltInProxy< Int64 > ProxyType
Type du proxy associé
static constexpr const char * name()
Nom du type de donnée.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
Real BasicType
Type de donnée de base de ce type de donnée.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
Real FunctionCall2ReturnType
Type de retour de operator()(Int32,Int32) pour ce type.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
Real BasicType
Type de donnée de base de ce type de donnée.
Real FunctionCall1ReturnType
Type de retour de operator()(Int32) pour ce type.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr eDataType type()
Type de donnée.
Real BasicType
Type de donnée de base de ce type de donnée.
Real2Proxy ProxyType
Type du proxy associé
static constexpr const char * name()
Nom du type de donnée.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
Real SubscriptType
Type de retour de operator[] pour ce type.
Real BasicType
Type de donnée de base de ce type de donnée.
Real2x2Proxy ProxyType
Type du proxy associé
static constexpr eDataType type()
Type de donnée.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr const char * name()
Nom du type de donnée.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
Real3Proxy ProxyType
Type du proxy associé
Real BasicType
Type de donnée de base de ce type de donnée.
static constexpr const char * name()
Nom du type de donnée.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
Real SubscriptType
Type de retour de operator[] pour ce type.
static constexpr eDataType type()
Type de donnée.
static constexpr eDataType type()
Type de donnée.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
Real3x3Proxy ProxyType
Type du proxy associé
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr const char * name()
Nom du type de donnée.
Real BasicType
Type de donnée de base de ce type de donnée.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr const char * name()
Nom du type de donnée.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr eDataType type()
Type de donnée.
Real BasicType
Type de donnée de base de ce type de donnée.
static constexpr Type defaultValue()
Valeur par défaut.
BuiltInProxy< Real > ProxyType
Type du proxy associé
String BasicType
Type de donnée de base de ce type de donnée.
static constexpr const char * name()
Nom du type de donnée.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
String ProxyType
Type du proxy associé
static constexpr eDataType type()
Type de donnée.
static constexpr eDataType type()
bool BasicType
Type de donnée de base de ce type de donnée.
static constexpr const char * name()
Nom du type de donnée.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr Type defaultValue()
Valeur par défaut.
static Type nanValue()
Elément initialisé à NAN.
BuiltInProxy< bool > ProxyType
Type du proxy associé
static void fillNan(ArrayView< Type > values)
Remplit les éléments de values avec des Nan.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Petite matrice de taille fixe contenant RowSize lignes et ColumnSize colonnes.
Definition NumMatrix.h:42
Petit vecteur de taille fixe de N données numériques.
Definition NumVector.h:43
Classe gérant un vecteur de réel de dimension 2.
Definition Real2Proxy.h:40
Classe gérant un vecteur de réel de dimension 2.
Definition Real2.h:121
Proxy du type 'Real2x2'.
Classe gérant une matrice de réel de dimension 2x2.
Definition Real2x2.h:53
Proxy d'un Real3.
Definition Real3Proxy.h:37
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Proxy d'un 'Real3x3'.
Classe gérant une matrice de réel de dimension 3x3.
Definition Real3x3.h:66
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
@ DT_Real2x2
Donnée de type tenseur 3x3.
Definition DataTypes.h:48
@ DT_Int16
Donnée de type entier 16 bits.
Definition DataTypes.h:42
@ DT_Real3x3
Donnée de type tenseur 3x3.
Definition DataTypes.h:49
@ DT_Int32
Donnée de type entier 32 bits.
Definition DataTypes.h:43
@ DT_Real3
Donnée de type vecteur 3.
Definition DataTypes.h:47
@ DT_Int64
Donnée de type entier 64 bits.
Definition DataTypes.h:44
@ DT_String
Donnée de type chaîne de caractère UTF-8.
Definition DataTypes.h:45
@ DT_Real2
Donnée de type vecteur 2.
Definition DataTypes.h:46
@ DT_Real
Donnée de type réel.
Definition DataTypes.h:41
@ DT_Byte
Donnée de type octet.
Definition DataTypes.h:40