Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ValueConvert.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/* ValueConvert.h (C) 2000-2022 */
9/* */
10/* Fonctions pour convertir une chaîne de caractère en un type donné. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_VALUECONVERT_H
13#define ARCANE_UTILS_VALUECONVERT_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Iostream.h"
18#include "arcane/utils/String.h"
19#include "arcane/utils/Array.h"
20#include "arcane/utils/Real2.h"
21#include "arcane/utils/Real3.h"
22#include "arcane/utils/Real2x2.h"
23#include "arcane/utils/Real3x3.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
40template<class T> inline bool
41builtInGetValue(T& v,const String& s)
42{
43 T read_val = T();
44 std::istringstream sbuf(s.localstr());
45 sbuf >> read_val;
46 if (sbuf.fail() || sbuf.bad())
47 return true;
48 if (!sbuf.eof())
49 return true;
50 v = read_val;
51 return false;
52}
53
54/*---------------------------------------------------------------------------*/
55/*---------------------------------------------------------------------------*/
56
57template<> ARCANE_UTILS_EXPORT bool builtInGetValue(String& v,const String& s);
58template<> ARCANE_UTILS_EXPORT bool builtInGetValue(double& v,const String& s);
59template<> ARCANE_UTILS_EXPORT bool builtInGetValue(float& v,const String& s);
60template<> ARCANE_UTILS_EXPORT bool builtInGetValue(int& v,const String& s);
61template<> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned int& v,const String& s);
62template<> ARCANE_UTILS_EXPORT bool builtInGetValue(long& v,const String& s);
63template<> ARCANE_UTILS_EXPORT bool builtInGetValue(long long& v,const String& s);
64template<> ARCANE_UTILS_EXPORT bool builtInGetValue(short& v,const String& s);
65template<> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned short& v,const String& s);
66template<> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned long& v,const String& s);
67template<> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned long long& v,const String& s);
68#ifdef ARCANE_REAL_NOT_BUILTIN
69template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real& v,const String& s);
70#endif
71template<> ARCANE_UTILS_EXPORT bool builtInGetValue(RealArray& v,const String& s);
72template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2Array& v,const String& s);
73template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3Array& v,const String& s);
74template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2x2Array& v,const String& s);
75template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3x3Array& v,const String& s);
76template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Int16Array& v,const String& s);
77template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Int32Array& v,const String& s);
78template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Int64Array& v,const String& s);
79template<> ARCANE_UTILS_EXPORT bool builtInGetValue(BoolArray& v,const String& s);
80template<> ARCANE_UTILS_EXPORT bool builtInGetValue(StringArray& v,const String& s);
81
82template<> ARCANE_UTILS_EXPORT bool builtInGetValue(RealSharedArray& v,const String& s);
83template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2SharedArray& v,const String& s);
84template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3SharedArray& v,const String& s);
85template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2x2SharedArray& v,const String& s);
86template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3x3SharedArray& v,const String& s);
87template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Int16SharedArray& v,const String& s);
88template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Int32SharedArray& v,const String& s);
89template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Int64SharedArray& v,const String& s);
90template<> ARCANE_UTILS_EXPORT bool builtInGetValue(BoolSharedArray& v,const String& s);
91template<> ARCANE_UTILS_EXPORT bool builtInGetValue(StringSharedArray& v,const String& s);
92
93template<> ARCANE_UTILS_EXPORT bool builtInGetValue(RealUniqueArray& v,const String& s);
94template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2UniqueArray& v,const String& s);
95template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3UniqueArray& v,const String& s);
96template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2x2UniqueArray& v,const String& s);
97template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3x3UniqueArray& v,const String& s);
98template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Int16UniqueArray& v,const String& s);
99template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Int32UniqueArray& v,const String& s);
100template<> ARCANE_UTILS_EXPORT bool builtInGetValue(Int64UniqueArray& v,const String& s);
101template<> ARCANE_UTILS_EXPORT bool builtInGetValue(BoolUniqueArray& v,const String& s);
102template<> ARCANE_UTILS_EXPORT bool builtInGetValue(StringUniqueArray& v,const String& s);
103
104/*---------------------------------------------------------------------------*/
105/*---------------------------------------------------------------------------*/
114inline bool
115builtInGetValue(bool& v,const String& s)
116{
117 if (s.null())
118 return true;
119 if (s=="false" || s=="faux" || s=="0"){
120 v = false;
121 return false;
122 }
123
124 if (s=="true" || s=="vrai" || s=="1"){
125 v = true;
126 return false;
127 }
128 return true;
129}
130
131/*---------------------------------------------------------------------------*/
132/*---------------------------------------------------------------------------*/
133
135
141ARCANE_UTILS_EXPORT bool builtInPutValue(const String& v,String& s);
142ARCANE_UTILS_EXPORT bool builtInPutValue(double v,String& s);
143ARCANE_UTILS_EXPORT bool builtInPutValue(float v,String& s);
144ARCANE_UTILS_EXPORT bool builtInPutValue(int v,String& s);
145ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned int v,String& s);
146ARCANE_UTILS_EXPORT bool builtInPutValue(long v,String& s);
147ARCANE_UTILS_EXPORT bool builtInPutValue(long long v,String& s);
148ARCANE_UTILS_EXPORT bool builtInPutValue(short v,String& s);
149ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned short v,String& s);
150ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned long v,String& s);
151ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned long long v,String& s);
152#ifdef ARCANE_REAL_NOT_BUILTIN
153ARCANE_UTILS_EXPORT bool builtInPutValue(Real v,String& s);
154#endif
155ARCANE_UTILS_EXPORT bool builtInPutValue(Real2 v,String& s);
156ARCANE_UTILS_EXPORT bool builtInPutValue(Real3 v,String& s);
157ARCANE_UTILS_EXPORT bool builtInPutValue(const Real2x2& v,String& s);
158ARCANE_UTILS_EXPORT bool builtInPutValue(const Real3x3& v,String& s);
159ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real> v,String& s);
160ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real2> v,String& s);
161ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real3> v,String& s);
162ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real2x2> v,String& s);
163ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real3x3> v,String& s);
164ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Int16> v,String& s);
165ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Int32> v,String& s);
166ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Int64> v,String& s);
167ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const bool> v,String& s);
168ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const String> v,String& s);
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
173
174inline const char* typeToName(bool){ return "boolean"; }
175inline const char* typeToName(Real){ return "real"; }
176inline const char* typeToName(Real2){ return "real2"; }
177inline const char* typeToName(Real3){ return "real3"; }
178inline const char* typeToName(Real2x2){ return "real2x2"; }
179inline const char* typeToName(Real3x3){ return "real3x3"; }
180inline const char* typeToName(short) { return "short"; }
181inline const char* typeToName(unsigned short) { return "unsigned short"; }
182inline const char* typeToName(int) { return "integer"; }
183inline const char* typeToName(long) { return "long"; }
184inline const char* typeToName(unsigned long) { return "unsigned long"; }
185inline const char* typeToName(unsigned long long) { return "unsigned long long"; }
186inline const char* typeToName(const String&) { return "string"; }
187inline const char* typeToName(long long) { return "long long"; }
188inline const char* typeToName(unsigned int) { return "unsigned integer"; }
189inline const char* typeToName(const StringArray&){ return "string[]"; }
190inline const char* typeToName(const BoolArray&){ return "boolean[]"; }
191inline const char* typeToName(const RealArray&){ return "real[]"; }
192inline const char* typeToName(const Real2Array&){ return "real2[]"; }
193inline const char* typeToName(const Real3Array&){ return "real3[]"; }
194inline const char* typeToName(const Real2x2Array&){ return "real2x2[]"; }
195inline const char* typeToName(const Real3x3Array&){ return "real3x3[]"; }
196inline const char* typeToName(const Int16Array&) { return "Int16[]"; }
197inline const char* typeToName(const Int32Array&) { return "Int32[]"; }
198inline const char* typeToName(const Int64Array&) { return "Int64[]"; }
199
200
201/*---------------------------------------------------------------------------*/
202/*---------------------------------------------------------------------------*/
203
204namespace Convert
205{
206
207template<typename T>
208class Type;
209
210template<typename T>
212{
213 public:
214
216 ARCANE_UTILS_EXPORT static std::optional<T> tryParse(StringView s);
217
223 static std::optional<T>
225 {
226 return (s.empty()) ? default_value : tryParse(s);
227 }
228
237 ARCANE_UTILS_EXPORT static std::optional<T>
239};
240
242template<> class Type<Int64> : public ScalarType<Int64>{};
243template<> class Type<Int32> : public ScalarType<Int32>{};
244template<> class Type<Real> : public ScalarType<Real>{};
245
246}
247
248/*---------------------------------------------------------------------------*/
249/*---------------------------------------------------------------------------*/
250
251} // End namespace Arcane
252
253/*---------------------------------------------------------------------------*/
254/*---------------------------------------------------------------------------*/
255
256#endif
257
static std::optional< T > tryParseFromEnvironment(StringView s, bool throw_if_invalid)
Convertit la valeur de la variable d'environnement s en le type T.
Definition Convert.cc:435
static std::optional< T > tryParseIfNotEmpty(StringView s, const T &default_value)
Convertit s en le type T.
static std::optional< T > tryParse(StringView s)
Convertit s en le type T.
Definition Convert.cc:423
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Vue sur une chaîne de caractères UTF-8.
Definition StringView.h:47
constexpr bool empty() const ARCCORE_NOEXCEPT
Vrai si la chaîne est nulle ou vide.
Definition StringView.h:105
Chaîne de caractères unicode.
const char * localstr() const
Retourne la conversion de l'instance dans l'encodage UTF-8.
Definition String.cc:227
bool null() const
Retourne true si la chaîne est nulle.
Definition String.cc:304
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
SharedArray< Int64 > Int64SharedArray
Tableau dynamique à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:545
Array< Real2 > Real2Array
Tableau dynamique à une dimension de vecteurs de rang 2.
Definition UtilsTypes.h:339
UniqueArray< Real2x2 > Real2x2UniqueArray
Tableau dynamique à une dimension de tenseurs de rang 2.
Definition UtilsTypes.h:531
Array< Int64 > Int64Array
Tableau dynamique à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:325
bool builtInPutValue(const String &v, String &s)
Converti la valeur v dans la chaîne s.
Definition Convert.cc:291
SharedArray< Real > RealSharedArray
Tableau dynamique à une dimension de réels.
Definition UtilsTypes.h:553
UniqueArray< Real3x3 > Real3x3UniqueArray
Tableau dynamique à une dimension de tenseurs de rang 3.
Definition UtilsTypes.h:533
UniqueArray< Int64 > Int64UniqueArray
Tableau dynamique à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:513
Array< String > StringArray
Tableau dynamique à une dimension de chaînes de caractères.
Definition UtilsTypes.h:337
Array< bool > BoolArray
Tableau dynamique à une dimension de booléens.
Definition UtilsTypes.h:335
Array< Real3x3 > Real3x3Array
Tableau dynamique à une dimension de tenseurs de rang 3.
Definition UtilsTypes.h:345
Array< Int16 > Int16Array
Tableau dynamique à une dimension d'entiers 16 bits.
Definition UtilsTypes.h:329
UniqueArray< Real3 > Real3UniqueArray
Tableau dynamique à une dimension de vecteurs de rang 3.
Definition UtilsTypes.h:529
SharedArray< Real3 > Real3SharedArray
Tableau dynamique à une dimension de vecteurs de rang 3.
Definition UtilsTypes.h:561
UniqueArray< Int16 > Int16UniqueArray
Tableau dynamique à une dimension d'entiers 16 bits.
Definition UtilsTypes.h:517
UniqueArray< bool > BoolUniqueArray
Tableau dynamique à une dimension de booléens.
Definition UtilsTypes.h:523
SharedArray< String > StringSharedArray
Tableau dynamique à une dimension de chaînes de caractères.
Definition UtilsTypes.h:557
SharedArray< Int32 > Int32SharedArray
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:547
UniqueArray< Int32 > Int32UniqueArray
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:515
SharedArray< Real3x3 > Real3x3SharedArray
Tableau dynamique à une dimension de tenseurs de rang 3.
Definition UtilsTypes.h:565
SharedArray< bool > BoolSharedArray
Tableau dynamique à une dimension de booléens.
Definition UtilsTypes.h:555
UniqueArray< Real > RealUniqueArray
Tableau dynamique à une dimension de réels.
Definition UtilsTypes.h:521
Array< Real2x2 > Real2x2Array
Tableau dynamique à une dimension de tenseurs de rang 2.
Definition UtilsTypes.h:343
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:327
Array< Real > RealArray
Tableau dynamique à une dimension de réels.
Definition UtilsTypes.h:333
UniqueArray< String > StringUniqueArray
Tableau dynamique à une dimension de chaînes de caractères.
Definition UtilsTypes.h:525
SharedArray< Int16 > Int16SharedArray
Tableau dynamique à une dimension d'entiers 16 bits.
Definition UtilsTypes.h:549
SharedArray< Real2x2 > Real2x2SharedArray
Tableau dynamique à une dimension de tenseurs de rang 2.
Definition UtilsTypes.h:563
UniqueArray< Real2 > Real2UniqueArray
Tableau dynamique à une dimension de vecteurs de rang 2.
Definition UtilsTypes.h:527
SharedArray< Real2 > Real2SharedArray
Tableau dynamique à une dimension de vecteurs de rang 2.
Definition UtilsTypes.h:559
Array< Real3 > Real3Array
Tableau dynamique à une dimension de vecteurs de rang 3.
Definition UtilsTypes.h:341