14#include "arcane/utils/ValueConvert.h"
16#include "arcane/utils/Convert.h"
17#include "arcane/utils/Iostream.h"
18#include "arcane/utils/NotImplementedException.h"
19#include "arcane/utils/OStringStream.h"
20#include "arcane/utils/PlatformUtils.h"
21#include "arcane/utils/FatalErrorException.h"
22#include "arcane/utils/internal/ValueConvertInternal.h"
34#ifdef ARCANE_REAL_NOT_BUILTIN
35template<> ARCANE_UTILS_EXPORT
bool
36builtInGetValue(Real& v,
const String& s)
40 if (builtInGetValue(vz,s))
43 cout <<
"** CONVERT DOUBLE TO REAL s=" << s <<
" vz=" << vz <<
" v=" << v <<
'\n';
47 if (builtInGetValue(vz,s))
49 v =
Real((
char*)s.localstr(),1000);
50 cout <<
"** CONVERT DOUBLE TO REAL s=" << s <<
'\n';
59builtInGetValue(String& v,
const String& s)
69bool _builtInGetBoolArrayValue(
BoolArray& v,
const String& s)
78 if (builtInGetValue(sa,s))
80 for( Integer i=0, is=sa.size(); i<is; ++i ){
81 bool read_val =
false;
82 if (builtInGetValue(read_val,sa[i]))
90_builtInGetStringArrayValue(
StringArray& v,
const String& s)
93 String read_val = String();
94 std::istringstream sbuf(s.localstr());
102 read_val = StringView(s2.c_str());
109template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
RealArray& v,
const String& s)
111 return builtInGetArrayValue(v,s);
114template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Real2Array& v,
const String& s)
116 return builtInGetArrayValue(v,s);
119template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Real3Array& v,
const String& s)
121 return builtInGetArrayValue(v,s);
124template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Real2x2Array& v,
const String& s)
126 return builtInGetArrayValue(v,s);
129template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Real3x3Array& v,
const String& s)
131 return builtInGetArrayValue(v,s);
134template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Int32Array& v,
const String& s)
136 return builtInGetArrayValue(v,s);
139template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Int64Array& v,
const String& s)
141 return builtInGetArrayValue(v,s);
144template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
BoolArray& v,
const String& s)
146 return _builtInGetBoolArrayValue(v,s);
149template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
StringArray& v,
const String& s)
151 return _builtInGetStringArrayValue(v,s);
157template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
RealUniqueArray& v,
const String& s)
159 return builtInGetArrayValue(v,s);
162template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Real2UniqueArray& v,
const String& s)
164 return builtInGetArrayValue(v,s);
167template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Real3UniqueArray& v,
const String& s)
169 return builtInGetArrayValue(v,s);
172template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Real2x2UniqueArray& v,
const String& s)
174 return builtInGetArrayValue(v,s);
177template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Real3x3UniqueArray& v,
const String& s)
179 return builtInGetArrayValue(v,s);
182template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Int16UniqueArray& v,
const String& s)
184 return builtInGetArrayValue(v,s);
187template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Int32UniqueArray& v,
const String& s)
189 return builtInGetArrayValue(v,s);
192template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Int64UniqueArray& v,
const String& s)
194 return builtInGetArrayValue(v,s);
197template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
BoolUniqueArray& v,
const String& s)
199 return _builtInGetBoolArrayValue(v,s);
202template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
StringUniqueArray& v,
const String& s)
204 return _builtInGetStringArrayValue(v,s);
210template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
RealSharedArray& v,
const String& s)
212 return builtInGetArrayValue(v,s);
215template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Real2SharedArray& v,
const String& s)
217 return builtInGetArrayValue(v,s);
222 return builtInGetArrayValue(v,s);
227 return builtInGetArrayValue(v,s);
230template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Real3x3SharedArray& v,
const String& s)
232 return builtInGetArrayValue(v,s);
235template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
Int16SharedArray& v,
const String& s)
237 return builtInGetArrayValue(v,s);
242 return builtInGetArrayValue(v,s);
247 return builtInGetArrayValue(v,s);
250template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
BoolSharedArray& v,
const String& s)
252 return _builtInGetBoolArrayValue(v,s);
255template<> ARCANE_UTILS_EXPORT
bool builtInGetValue(
StringSharedArray& v,
const String& s)
257 return _builtInGetStringArrayValue(v,s);
265template<
class T>
inline bool
266_builtInPutValue(
const T& v,String& s)
270 if (ostr().fail() || ostr().bad())
275template<
class T>
inline bool
276_builtInPutArrayValue(Span<const T> v,String& s)
279 for( Int64 i=0, n=v.size(); i<n; ++i ){
284 if (ostr().fail() || ostr().bad())
292{
return _builtInPutValue(v,s); }
294{
return _builtInPutValue(v,s); }
296{
return _builtInPutValue(v,s); }
298{
return _builtInPutValue(v,s); }
300{
return _builtInPutValue(v,s); }
302{
return _builtInPutValue(v,s); }
304{
return _builtInPutValue(v,s); }
306{
return _builtInPutValue(v,s); }
308{
return _builtInPutValue(v,s); }
310{
return _builtInPutValue(v,s); }
312{
return _builtInPutValue(v,s); }
313#ifdef ARCANE_REAL_NOT_BUILTIN
315{
return _builtInPutValue(v,s); }
318{
return _builtInPutValue(v,s); }
320{
return _builtInPutValue(v,s); }
322{
return _builtInPutValue(v,s); }
324{
return _builtInPutValue(v,s); }
327{
return _builtInPutArrayValue(v,s); }
329{
return _builtInPutArrayValue(v,s); }
331{
return _builtInPutArrayValue(v,s); }
333{
return _builtInPutArrayValue(v,s); }
335{
return _builtInPutArrayValue(v,s); }
337{
return _builtInPutArrayValue(v,s); }
339{
return _builtInPutArrayValue(v,s); }
341{
return _builtInPutArrayValue(v,s); }
343{
return _builtInPutArrayValue(v,s); }
345{
return _builtInPutArrayValue(v,s); }
351static char global_hexa[16] = {
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
352 'a',
'b',
'c',
'd',
'e',
'f' };
360_toHexaString(Span<const std::byte> input)
362 UniqueArray<Byte> out_buf;
363 Int64
len = input.size();
364 out_buf.resize((len*2)+1);
365 for( Int64 i=0; i<
len; ++i ){
366 int v = std::to_integer<int>(input[i]);
367 out_buf[(i*2)] = global_hexa[v/16];
368 out_buf[(i*2)+1] = global_hexa[v%16];
370 out_buf[
len*2] =
'\0';
371 return String(out_buf);
381 return _toHexaString(input);
399 for (Integer i=0; i<8; ++i ){
401 output[(i*2)] = global_hexa[v/16];
402 output[(i*2)+1] = global_hexa[v%16];
422template<
typename T> std::optional<T>
428 bool is_bad = builtInGetValue(v,s);
434template<
typename T> std::optional<T>
437 String env_value = platform::getEnvironmentVariable(s);
438 if (env_value.
null())
440 auto v = tryParse(env_value);
441 if (!v && throw_if_invalid)
442 ARCANE_FATAL(
"Invalid value '{0}' for environment variable {1}. Can not convert to type '{2}'",
443 env_value,s,typeToName(T{}));
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
static std::optional< T > tryParseFromEnvironment(StringView s, bool throw_if_invalid)
Convertit la valeur de la variable d'environnement s en le type T.
static std::optional< T > tryParse(StringView s)
Convertit s en le type T.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Vue constante d'un tableau de type T.
Vecteur 1D de données avec sémantique par référence.
Vue d'un tableau d'éléments de type T.
Vue sur une chaîne de caractères UTF-8.
constexpr bool empty() const ARCCORE_NOEXCEPT
Vrai si la chaîne est nulle ou vide.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Integer len(const char *s)
Retourne la longueur de la chaîne s.
String toHexaString(ByteConstArrayView input)
Converti un tableau d'octet en sa représentation hexadécimale.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Array< Real2 > Real2Array
Tableau dynamique à une dimension de vecteurs de rang 2.
UniqueArray< Real2x2 > Real2x2UniqueArray
Tableau dynamique à une dimension de tenseurs de rang 2.
Array< Int64 > Int64Array
Tableau dynamique à une dimension d'entiers 64 bits.
bool builtInPutValue(const String &v, String &s)
Converti la valeur v dans la chaîne s.
SharedArray< Real > RealSharedArray
Tableau dynamique à une dimension de réels.
UniqueArray< Real3x3 > Real3x3UniqueArray
Tableau dynamique à une dimension de tenseurs de rang 3.
UniqueArray< Int64 > Int64UniqueArray
Tableau dynamique à une dimension d'entiers 64 bits.
Array< String > StringArray
Tableau dynamique à une dimension de chaînes de caractères.
Array< bool > BoolArray
Tableau dynamique à une dimension de booléens.
Array< Real3x3 > Real3x3Array
Tableau dynamique à une dimension de tenseurs de rang 3.
UniqueArray< Real3 > Real3UniqueArray
Tableau dynamique à une dimension de vecteurs de rang 3.
UniqueArray< Int16 > Int16UniqueArray
Tableau dynamique à une dimension d'entiers 16 bits.
UniqueArray< bool > BoolUniqueArray
Tableau dynamique à une dimension de booléens.
SharedArray< String > StringSharedArray
Tableau dynamique à une dimension de chaînes de caractères.
ConstArrayView< Byte > ByteConstArrayView
Equivalent C d'un tableau à une dimension de caractères.
UniqueArray< Int32 > Int32UniqueArray
Tableau dynamique à une dimension d'entiers 32 bits.
SharedArray< Real3x3 > Real3x3SharedArray
Tableau dynamique à une dimension de tenseurs de rang 3.
SharedArray< bool > BoolSharedArray
Tableau dynamique à une dimension de booléens.
UniqueArray< Real > RealUniqueArray
Tableau dynamique à une dimension de réels.
unsigned char Byte
Type d'un octet.
Array< Real2x2 > Real2x2Array
Tableau dynamique à une dimension de tenseurs de rang 2.
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
Array< Real > RealArray
Tableau dynamique à une dimension de réels.
UniqueArray< String > StringUniqueArray
Tableau dynamique à une dimension de chaînes de caractères.
SharedArray< Int16 > Int16SharedArray
Tableau dynamique à une dimension d'entiers 16 bits.
UniqueArray< Real2 > Real2UniqueArray
Tableau dynamique à une dimension de vecteurs de rang 2.
SharedArray< Real2 > Real2SharedArray
Tableau dynamique à une dimension de vecteurs de rang 2.
Array< Real3 > Real3Array
Tableau dynamique à une dimension de vecteurs de rang 3.
double Real
Type représentant un réel.