12#ifndef ARCANE_VARIABLEDATATYPETRAITS_H
13#define ARCANE_VARIABLEDATATYPETRAITS_H
17#include "arcane/utils/PlatformUtils.h"
18#include "arcane/utils/ValueConvert.h"
35template <
typename DataType>
inline void
38 std::ostringstream sbuf;
51template <
typename DataType>
88 typedef Byte BasicType;
90 static constexpr Integer nbBasicType() {
return 1; }
95 static constexpr const char*
typeName() {
return "Byte"; }
107 static bool verifDifferent(
Byte v1,
Byte v2,
Byte& diff,
108 [[maybe_unused]]
bool is_nan_equal =
false)
111 if (math::isZero(v1))
112 diff = (
Byte)(v1 - v2);
114 diff = (
Byte)((v1 - v2) / v1);
120 static Byte normeMax(Byte v)
122 return (Byte)math::abs(v);
152 typedef Real BasicType;
154 static constexpr Integer nbBasicType() {
return 1; }
159 static constexpr const char*
typeName() {
return "Real"; }
171 static bool verifDifferent(Real v1, Real v2, Real& diff,
bool is_nan_equal =
false)
174 if (std::isnan(v1) && std::isnan(v2))
179 if (platform::isDenormalized(v1) || platform::isDenormalized(v2)) {
184 if (math::abs(v1) < 1.e-100)
187 diff = (v1 - v2) / v1;
193 static Real normeMax(Real v)
225 typedef Int16 BasicType;
227 static constexpr Integer nbBasicType() {
return 1; }
232 static constexpr const char*
typeName() {
return "Int16"; }
243 static bool verifDifferent(Int16 v1, Int16 v2, Int16& diff,
244 [[maybe_unused]]
bool is_nan_equal =
false)
247 if (math::isZero(v1))
248 diff = (Int16)(v1 - v2);
250 diff = (Int16)((v1 - v2) / v1);
255 static Int16 normeMax(Int16 v)
287 typedef Int32 BasicType;
289 static constexpr Integer nbBasicType() {
return 1; }
294 static constexpr const char*
typeName() {
return "Int32"; }
305 static bool verifDifferent(Int32 v1, Int32 v2, Int32& diff,
306 [[maybe_unused]]
bool is_nan_equal =
false)
309 if (math::isZero(v1))
312 diff = (v1 - v2) / v1;
317 static Int32 normeMax(Int32 v)
349 typedef Int64 BasicType;
351 static constexpr Integer nbBasicType() {
return 1; }
356 static constexpr const char*
typeName() {
return "Int64"; }
368 static bool verifDifferent(Type v1, Type v2, Type& diff,
369 [[maybe_unused]]
bool is_nan_equal =
false)
372 if (math::isZero(v1))
375 diff = (v1 - v2) / v1;
380 static Int64 normeMax(Int64 v)
414 static constexpr Integer nbBasicType() {
return 1; }
419 static constexpr const char*
typeName() {
return "String"; }
431 static bool verifDifferent(
const Type v1,
const Type& v2, Type&,
432 [[maybe_unused]]
bool is_nan_equal =
false)
436 static const char* normeMax(
const char* v)
468 typedef Real BasicType;
470 static constexpr Integer nbBasicType() {
return 2; }
479 static constexpr const char*
typeName() {
return "Real2"; }
491 static bool verifDifferent(
Real2 v1,
Real2 v2,
Real2& diff,
bool is_nan_equal =
false)
493 bool is_different =
false;
494 is_different |= SubTraits::verifDifferent(v1.
x, v2.
x, diff.
x, is_nan_equal);
495 is_different |= SubTraits::verifDifferent(v1.
y, v2.
y, diff.
y, is_nan_equal);
499 static Real normeMax(
const Real2& v)
501 Real vx = SubTraits::normeMax(v.x);
502 Real vy = SubTraits::normeMax(v.y);
503 return math::max(vx, vy);
533 typedef Real BasicType;
535 static constexpr Integer nbBasicType() {
return 3; }
544 static constexpr const char*
typeName() {
return "Real3"; }
556 static bool verifDifferent(
Real3 v1,
Real3 v2,
Real3& diff,
bool is_nan_equal =
false)
558 bool is_different =
false;
559 is_different |= SubTraits::verifDifferent(v1.
x, v2.
x, diff.
x, is_nan_equal);
560 is_different |= SubTraits::verifDifferent(v1.
y, v2.
y, diff.
y, is_nan_equal);
561 is_different |= SubTraits::verifDifferent(v1.
z, v2.
z, diff.
z, is_nan_equal);
565 static Real normeMax(
const Real3& v)
567 Real vx = SubTraits::normeMax(v.x);
568 Real vy = SubTraits::normeMax(v.y);
569 Real vz = SubTraits::normeMax(v.z);
570 return math::max(vx, math::max(vy, vz));
600 typedef Real BasicType;
602 static constexpr Integer nbBasicType() {
return 4; }
611 static constexpr const char*
typeName() {
return "Real2x2"; }
625 bool is_different =
false;
626 is_different |= SubTraits::verifDifferent(v1.
x, v2.
x, diff.
x, is_nan_equal);
627 is_different |= SubTraits::verifDifferent(v1.
y, v2.
y, diff.
y, is_nan_equal);
631 static Real normeMax(
const Real2x2& v)
633 Real vx = SubTraits::normeMax(v.x);
634 Real vy = SubTraits::normeMax(v.y);
635 return SubTraits::normeMax(Real2(vx, vy));
665 typedef Real BasicType;
667 static constexpr Integer nbBasicType() {
return 9; }
676 static constexpr const char*
typeName() {
return "Real3x3"; }
690 bool is_different =
false;
691 is_different |= SubTraits::verifDifferent(v1.
x, v2.
x, diff.
x, is_nan_equal);
692 is_different |= SubTraits::verifDifferent(v1.
y, v2.
y, diff.
y, is_nan_equal);
693 is_different |= SubTraits::verifDifferent(v1.
z, v2.
z, diff.
z, is_nan_equal);
697 static Real normeMax(
const Real3x3& v)
699 Real vx = SubTraits::normeMax(v.x);
700 Real vy = SubTraits::normeMax(v.y);
701 Real vz = SubTraits::normeMax(v.z);
702 return VariableDataTypeTraitsT<Real3>::normeMax(Real3(vx, vy, vz));
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.
Classe gérant une matrice de réel de dimension 2x2.
Real2 x
Première composante.
Real2 y
Deuxième composante.
Classe gérant un vecteur de réel de dimension 3.
Classe gérant une matrice de réel de dimension 3x3.
Real3 z
premier élément du triplet
Real3 y
premier élément du triplet
Real3 x
premier élément du triplet
static constexpr eDataType type()
Retourne le type de la variable.
TrueType IsNumeric
Indique si le type est numérique.
TrueType HasDump
Indique si le type peut être sauvé et relu.
FalseType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
static void dumpValue(String &s, const Type &v)
Ecrit dans la chaîne s la valeur de v.
Byte Type
Type du paramètre template.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
TrueType HasReduce
Indique si le type peut être subir une réduction.
static bool getValue(Type &v, const String &s)
Stocke la conversion de la chaîne s en le type Type dans v.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
TrueType IsNumeric
Indique si le type est numérique.
static void dumpValue(String &s, const Type &v)
Ecrit dans la chaîne s la valeur de v.
static bool getValue(Type &v, const String &s)
Stocke la conversion de la chaîne s en le type Type dans v.
Int16 Type
Type du paramètre template.
static constexpr eDataType type()
Retourne le type de la variable.
TrueType HasReduce
Indique si le type peut être subir une réduction.
TrueType HasDump
Indique si le type peut être sauvé et relu.
TrueType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
static bool getValue(Type &v, const String &s)
Stocke la conversion de la chaîne s en le type Type dans v.
TrueType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
static void dumpValue(String &s, const Type &v)
Ecrit dans la chaîne s la valeur de v.
TrueType HasDump
Indique si le type peut être sauvé et relu.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
Int32 Type
Type du paramètre template.
static constexpr eDataType type()
Retourne le type de la variable.
TrueType IsNumeric
Indique si le type est numérique.
TrueType HasReduce
Indique si le type peut être subir une réduction.
TrueType HasReduce
Indique si le type peut être subir une réduction.
static constexpr eDataType type()
Retourne le type de la variable.
static bool getValue(Type &v, const String &s)
Stocke la conversion de la chaîne s en le type Type dans v.
TrueType HasDump
Indique si le type peut être sauvé et relu.
Int64 Type
Type du paramètre template.
TrueType IsNumeric
Indique si le type est numérique.
TrueType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
static void dumpValue(String &s, const Type &v)
Ecrit dans la chaîne s la valeur de v.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
TrueType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
TrueType HasReduce
Indique si le type peut être subir une réduction.
static constexpr eDataType type()
Retourne le type de la variable.
TrueType HasDump
Indique si le type peut être sauvé et relu.
static void dumpValue(String &s, const Type &)
Ecrit dans la chaîne s la valeur de v.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
Real2 Type
Type du paramètre template.
static bool getValue(Type &v, const String &s)
Stocke la conversion de la chaîne s en le type Type dans v.
TrueType IsNumeric
Indique si le type est numérique.
static constexpr eDataType type()
Retourne le type de la variable.
TrueType IsNumeric
Indique si le type est numérique.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
TrueType HasReduce
Indique si le type peut être subir une réduction.
TrueType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
Real2x2 Type
Type du paramètre template.
static bool getValue(Type &, const String &)
Stocke la conversion de la chaîne s en le type Type dans v.
TrueType HasDump
Indique si le type peut être sauvé et relu.
static void dumpValue(String &s, const Type &)
Ecrit dans la chaîne s la valeur de v.
static void dumpValue(String &s, const Type &)
Ecrit dans la chaîne s la valeur de v.
TrueType IsNumeric
Indique si le type est numérique.
TrueType HasReduce
Indique si le type peut être subir une réduction.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
static bool getValue(Type &v, const String &s)
Stocke la conversion de la chaîne s en le type Type dans v.
static constexpr eDataType type()
Retourne le type de la variable.
TrueType HasDump
Indique si le type peut être sauvé et relu.
TrueType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
Real3 Type
Type du paramètre template.
TrueType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
TrueType HasDump
Indique si le type peut être sauvé et relu.
static constexpr eDataType type()
Retourne le type de la variable.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
TrueType HasReduce
Indique si le type peut être subir une réduction.
Real3x3 Type
Type du paramètre template.
static bool getValue(Type &, const String &)
Stocke la conversion de la chaîne s en le type Type dans v.
static void dumpValue(String &s, const Type &)
Ecrit dans la chaîne s la valeur de v.
TrueType IsNumeric
Indique si le type est numérique.
static bool getValue(Type &v, const String &s)
Stocke la conversion de la chaîne s en le type Type dans v.
static void dumpValue(String &s, const Type &v)
Ecrit dans la chaîne s la valeur de v.
static constexpr eDataType type()
Retourne le type de la variable.
TrueType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
TrueType IsNumeric
Indique si le type est numérique.
TrueType HasDump
Indique si le type peut être sauvé et relu.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
Real Type
Type du paramètre template.
TrueType HasReduce
Indique si le type peut être subir une réduction.
FalseType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
static constexpr eDataType type()
Retourne le type de la variable.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
FalseType IsNumeric
Indique si le type est numérique.
TrueType HasDump
Indique si le type peut être sauvé et relu.
FalseType HasReduce
Indique si le type peut être subir une réduction.
static void dumpValue(String &s, const Type &v)
Ecrit dans la chaîne s la valeur de v.
static bool getValue(Type &v, const String &s)
Stocke la conversion de la chaîne s en le type Type dans v.
String Type
Type du paramètre template.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
void builtInDumpValue(String &s, const DataType &v)
Ecriture dans la chaine s d'un type basique de valeur v.
unsigned char Byte
Type d'un octet.
eDataType
Type d'une donnée.
@ DT_Real2x2
Donnée de type tenseur 3x3.
@ DT_Int16
Donnée de type entier 16 bits.
@ DT_Real3x3
Donnée de type tenseur 3x3.
@ DT_Int32
Donnée de type entier 32 bits.
@ DT_Real3
Donnée de type vecteur 3.
@ DT_Int64
Donnée de type entier 64 bits.
@ DT_Unknown
Donnée de type inconnue ou non initialisée.
@ DT_String
Donnée de type chaîne de caractère UTF-8.
@ DT_Real2
Donnée de type vecteur 2.
@ DT_Real
Donnée de type réel.
@ DT_Byte
Donnée de type octet.
double Real
Type représentant un réel.
Real y
deuxième composante du couple
Real x
première composante du couple
Real y
deuxième composante du triplet
Real z
troisième composante du triplet
Real x
première composante du triplet