12#ifndef ARCANE_CORE_VARIABLEDATATYPETRAITS_H
13#define ARCANE_CORE_VARIABLEDATATYPETRAITS_H
17#include "arcane/utils/PlatformUtils.h"
18#include "arcane/utils/ValueConvert.h"
19#include "arcane/utils/BFloat16.h"
20#include "arcane/utils/Float16.h"
21#include "arcane/utils/Float128.h"
22#include "arcane/utils/Int128.h"
39template <
typename DataType>
inline void
42 std::ostringstream sbuf;
55template <
typename DataType>
92 typedef Byte BasicType;
94 static constexpr Integer nbBasicType() {
return 1; }
99 static constexpr const char*
typeName() {
return "Byte"; }
111 static bool verifDifferent(
Byte v1,
Byte v2,
Byte& diff,
112 [[maybe_unused]]
bool is_nan_equal =
false)
115 if (math::isZero(v1))
116 diff = (
Byte)(v1 - v2);
118 diff = (
Byte)((v1 - v2) / v1);
124 static Byte normeMax(Byte v)
126 return (Byte)math::abs(v);
156 typedef Real BasicType;
158 static constexpr Integer nbBasicType() {
return 1; }
163 static constexpr const char*
typeName() {
return "Real"; }
175 static bool verifDifferent(Real v1, Real v2, Real& diff,
bool is_nan_equal =
false)
178 if (std::isnan(v1) && std::isnan(v2))
183 if (platform::isDenormalized(v1) || platform::isDenormalized(v2)) {
188 if (math::abs(v1) < 1.e-100)
191 diff = (v1 - v2) / v1;
197 static Real normeMax(Real v)
231 static constexpr Int32 nbBasicType() {
return 1; }
236 static constexpr const char*
typeName() {
return "Float128"; }
248 static bool verifDifferent(Type v1, Type v2, Type& diff,
bool is_nan_equal =
false)
255 if (math::abs(v1) < 1.e-100)
258 diff = (v1 - v2) / v1;
291 typedef Int8 BasicType;
293 static constexpr Int32 nbBasicType() {
return 1; }
298 static constexpr const char*
typeName() {
return "Int8"; }
309 static bool verifDifferent(
Int8 v1,
Int8 v2,
Int8& diff,
310 [[maybe_unused]]
bool is_nan_equal =
false)
313 if (math::isZero(v1))
314 diff = (
Int8)(v1 - v2);
316 diff = (
Int8)((v1 - v2) / v1);
321 static Int8 normeMax(Int8 v)
323 return static_cast<Int8>(math::abs(v));
353 typedef Int16 BasicType;
355 static constexpr Integer nbBasicType() {
return 1; }
360 static constexpr const char*
typeName() {
return "Int16"; }
371 static bool verifDifferent(Int16 v1, Int16 v2, Int16& diff,
372 [[maybe_unused]]
bool is_nan_equal =
false)
375 if (math::isZero(v1))
376 diff = (Int16)(v1 - v2);
378 diff = (Int16)((v1 - v2) / v1);
383 static Int16 normeMax(Int16 v)
415 typedef Int32 BasicType;
417 static constexpr Integer nbBasicType() {
return 1; }
422 static constexpr const char*
typeName() {
return "Int32"; }
433 static bool verifDifferent(Int32 v1, Int32 v2, Int32& diff,
434 [[maybe_unused]]
bool is_nan_equal =
false)
437 if (math::isZero(v1))
440 diff = (v1 - v2) / v1;
445 static Int32 normeMax(Int32 v)
477 typedef Int64 BasicType;
479 static constexpr Integer nbBasicType() {
return 1; }
484 static constexpr const char*
typeName() {
return "Int64"; }
496 static bool verifDifferent(Type v1, Type v2, Type& diff,
497 [[maybe_unused]]
bool is_nan_equal =
false)
500 if (math::isZero(v1))
503 diff = (v1 - v2) / v1;
508 static Int64 normeMax(Int64 v)
542 static constexpr Int32 nbBasicType() {
return 1; }
547 static constexpr const char*
typeName() {
return "Int128"; }
559 static bool verifDifferent(Type v1, Type v2, Type& diff,
560 [[maybe_unused]]
bool is_nan_equal =
false)
563 if (math::isZero(v1))
566 diff = (v1 - v2) / v1;
601 static constexpr Integer nbBasicType() {
return 1; }
606 static constexpr const char*
typeName() {
return "String"; }
618 static bool verifDifferent(
const Type v1,
const Type& v2, Type&,
619 [[maybe_unused]]
bool is_nan_equal =
false)
623 static const char* normeMax(
const char* v)
657 static constexpr Integer nbBasicType() {
return 1; }
662 static constexpr const char*
typeName() {
return "BFloat16"; }
674 static bool verifDifferent(
float v1,
float v2,
BFloat16& diff,
bool is_nan_equal =
false)
682 if (math::abs(v1)!=0.0)
685 fdiff = (v1 - v2) / v1;
686 diff =
static_cast<Type
>(fdiff);
692 static Real normeMax(Real v)
726 static constexpr Integer nbBasicType() {
return 1; }
731 static constexpr const char*
typeName() {
return "Float16"; }
743 static bool verifDifferent(
float v1,
float v2,
Float16& diff,
bool is_nan_equal =
false)
751 if (math::abs(v1)!=0.0)
754 fdiff = (v1 - v2) / v1;
755 diff =
static_cast<Type
>(fdiff);
761 static Real normeMax(Real v)
793 typedef Real BasicType;
795 static constexpr Integer nbBasicType() {
return 1; }
800 static constexpr const char*
typeName() {
return "Float32"; }
812 static bool verifDifferent(Type v1, Type v2, Type& diff,
bool is_nan_equal =
false)
815 if (std::isnan(v1) && std::isnan(v2))
820 if (platform::isDenormalized(v1) || platform::isDenormalized(v2)) {
825 if (math::abs(v1) < 1.e-40)
828 diff = (v1 - v2) / v1;
834 static Real normeMax(Real v)
866 typedef Real BasicType;
868 static constexpr Integer nbBasicType() {
return 2; }
877 static constexpr const char*
typeName() {
return "Real2"; }
889 static bool verifDifferent(
Real2 v1,
Real2 v2,
Real2& diff,
bool is_nan_equal =
false)
891 bool is_different =
false;
892 is_different |= SubTraits::verifDifferent(v1.
x, v2.
x, diff.
x, is_nan_equal);
893 is_different |= SubTraits::verifDifferent(v1.
y, v2.
y, diff.
y, is_nan_equal);
897 static Real normeMax(
const Real2& v)
899 Real vx = SubTraits::normeMax(v.x);
900 Real vy = SubTraits::normeMax(v.y);
901 return math::max(vx, vy);
931 typedef Real BasicType;
933 static constexpr Integer nbBasicType() {
return 3; }
942 static constexpr const char*
typeName() {
return "Real3"; }
954 static bool verifDifferent(
Real3 v1,
Real3 v2,
Real3& diff,
bool is_nan_equal =
false)
956 bool is_different =
false;
957 is_different |= SubTraits::verifDifferent(v1.
x, v2.
x, diff.
x, is_nan_equal);
958 is_different |= SubTraits::verifDifferent(v1.
y, v2.
y, diff.
y, is_nan_equal);
959 is_different |= SubTraits::verifDifferent(v1.
z, v2.
z, diff.
z, is_nan_equal);
963 static Real normeMax(
const Real3& v)
965 Real vx = SubTraits::normeMax(v.x);
966 Real vy = SubTraits::normeMax(v.y);
967 Real vz = SubTraits::normeMax(v.z);
968 return math::max(vx, math::max(vy, vz));
998 typedef Real BasicType;
1000 static constexpr Integer nbBasicType() {
return 4; }
1009 static constexpr const char*
typeName() {
return "Real2x2"; }
1023 bool is_different =
false;
1024 is_different |= SubTraits::verifDifferent(v1.
x, v2.
x, diff.
x, is_nan_equal);
1025 is_different |= SubTraits::verifDifferent(v1.
y, v2.
y, diff.
y, is_nan_equal);
1026 return is_different;
1029 static Real normeMax(
const Real2x2& v)
1031 Real vx = SubTraits::normeMax(v.x);
1032 Real vy = SubTraits::normeMax(v.y);
1033 return SubTraits::normeMax(Real2(vx, vy));
1063 typedef Real BasicType;
1065 static constexpr Integer nbBasicType() {
return 9; }
1074 static constexpr const char*
typeName() {
return "Real3x3"; }
1088 bool is_different =
false;
1089 is_different |= SubTraits::verifDifferent(v1.
x, v2.
x, diff.
x, is_nan_equal);
1090 is_different |= SubTraits::verifDifferent(v1.
y, v2.
y, diff.
y, is_nan_equal);
1091 is_different |= SubTraits::verifDifferent(v1.
z, v2.
z, diff.
z, is_nan_equal);
1092 return is_different;
1095 static Real normeMax(
const Real3x3& v)
1097 Real vx = SubTraits::normeMax(v.x);
1098 Real vy = SubTraits::normeMax(v.y);
1099 Real vz = SubTraits::normeMax(v.z);
1100 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
TrueType IsNumeric
Indique si le type est numérique.
static constexpr eDataType type()
Retourne le type de la variable.
BFloat16 Type
Type du paramètre template.
FalseType 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 void dumpValue(String &s, const Type &v)
Ecrit dans la chaîne s la valeur de v.
FalseType 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 constexpr const char * typeName()
Retourne le nom du type de la variable.
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.
FalseType 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.
FalseType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
TrueType HasDump
Indique si le type peut être sauvé et relu.
TrueType IsNumeric
Indique si le type est numérique.
Float128 Type
Type du paramètre template.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
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.
static constexpr eDataType type()
Retourne le type de la variable.
FalseType HasDump
Indique si le type peut être sauvé et relu.
static void dumpValue(String &s, const Type &v)
Ecrit dans la chaîne s la valeur de v.
FalseType 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.
Float16 Type
Type du paramètre template.
TrueType IsNumeric
Indique si le type est numérique.
FalseType HasReduce
Indique si le type peut être subir une réduction.
Float32 Type
Type du paramètre template.
TrueType HasReduce
Indique si le type peut être subir une réduction.
FalseType HasDump
Indique si le type peut être sauvé et relu.
TrueType IsNumeric
Indique si le type est numérique.
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.
static void dumpValue(String &s, const Type &v)
Ecrit dans la chaîne s la valeur de v.
TrueType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
FalseType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
TrueType IsNumeric
Indique si le type est numérique.
Int128 Type
Type du paramètre template.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
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.
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.
FalseType HasReduce
Indique si le type peut être subir une réduction.
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.
static bool getValue(Type &v, const String &s)
Stocke la conversion de la chaîne s en le type Type dans v.
Int8 Type
Type du paramètre template.
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.
TrueType IsNumeric
Indique si le type est numérique.
FalseType HasReduceMinMax
Indique si le type peut être subir une réduction Min/Max.
static constexpr const char * typeName()
Retourne le nom du type de la variable.
static constexpr eDataType type()
Retourne le 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.
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.
Type flottant sur 128 bits.
Type flottant demi-précision.
Type entier sur 128 bits.
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.
Arccore::Int8 Int8
Type représentant un entier sur 8 bits.
float Float32
Type flottant IEEE-753 simple précision (binary32)
unsigned char Byte
Type d'un octet.
eDataType
Type d'une donnée.
@ DT_Float32
Donnée de type 'Float32'.
@ DT_Int128
Donnée de type entier sur 128 bits.
@ DT_Real2x2
Donnée de type tenseur 3x3.
@ DT_Int16
Donnée de type entier 16 bits.
@ DT_Int8
Donnée de type entier sur 8 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_Float16
Donnée de type 'Float16'.
@ 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_BFloat16
Donnée de type 'BFloat16'.
@ DT_Real2
Donnée de type vecteur 2.
@ DT_Real
Donnée de type réel.
@ DT_Byte
Donnée de type octet.
@ DT_Float128
Donnée de type flottant sur 128 bits.
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