Arcane  v3.15.0.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-2025 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-2025 */
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/NumericTypes.h"
21#include "arcane/utils/Convert.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane
27{
28
29namespace impl
30{
41class ARCANE_UTILS_EXPORT StringViewInputStream
42: private std::streambuf
43{
44 public:
45
47
48 public:
49
50 std::istream& stream() { return m_stream; }
51
52 private:
53
54 StringView m_view;
55 std::istream m_stream;
56};
57
58/*---------------------------------------------------------------------------*/
59/*---------------------------------------------------------------------------*/
67template <class T> inline bool
68builtInGetValueGeneric(T& v, StringView s)
69{
70 T read_val = T();
72 std::istream& sbuf = svis.stream();
73 sbuf >> read_val;
74 if (sbuf.fail() || sbuf.bad())
75 return true;
76 if (!sbuf.eof())
77 return true;
78 v = read_val;
79 return false;
80}
81
82/*---------------------------------------------------------------------------*/
83/*---------------------------------------------------------------------------*/
84
85} // namespace impl
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
96template <class T> inline bool
97builtInGetValue(T& v, StringView s)
98{
99 return impl::builtInGetValueGeneric(v, s);
100}
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
105template <> ARCANE_UTILS_EXPORT bool builtInGetValue(String& v, StringView s);
106template <> ARCANE_UTILS_EXPORT bool builtInGetValue(double& v, StringView s);
107template <> ARCANE_UTILS_EXPORT bool builtInGetValue(float& v, StringView s);
108template <> ARCANE_UTILS_EXPORT bool builtInGetValue(int& v, StringView s);
109template <> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned int& v, StringView s);
110template <> ARCANE_UTILS_EXPORT bool builtInGetValue(long& v, StringView s);
111template <> ARCANE_UTILS_EXPORT bool builtInGetValue(long long& v, StringView s);
112template <> ARCANE_UTILS_EXPORT bool builtInGetValue(short& v, StringView s);
113template <> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned short& v, StringView s);
114template <> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned long& v, StringView s);
115template <> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned long long& v, StringView s);
116template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float16& v, StringView s);
117template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BFloat16& v, StringView s);
118template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float128& v, StringView s);
119template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int128& v, StringView s);
120#ifdef ARCANE_REAL_NOT_BUILTIN
121template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real& v, StringView s);
122#endif
123template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2& v, StringView s);
124template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3& v, StringView s);
125template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2x2& v, StringView s);
126template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3x3& v, StringView s);
127
128template <> ARCANE_UTILS_EXPORT bool builtInGetValue(RealArray& v, StringView s);
129template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2Array& v, StringView s);
130template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3Array& v, StringView s);
131template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2x2Array& v, StringView s);
132template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3x3Array& v, StringView s);
133template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int8Array& v, StringView s);
134template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int16Array& v, StringView s);
135template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int32Array& v, StringView s);
136template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int64Array& v, StringView s);
137template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BFloat16Array& v, StringView s);
138template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float16Array& v, StringView s);
139template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float32Array& v, StringView s);
140template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Array<Float128>& v, StringView s);
141template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Array<Int128>& v, StringView s);
142template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BoolArray& v, StringView s);
143template <> ARCANE_UTILS_EXPORT bool builtInGetValue(StringArray& v, StringView s);
144
145template <> ARCANE_UTILS_EXPORT bool builtInGetValue(RealSharedArray& v, StringView s);
146template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2SharedArray& v, StringView s);
147template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3SharedArray& v, StringView s);
148template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2x2SharedArray& v, StringView s);
149template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3x3SharedArray& v, StringView s);
150template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int8SharedArray& v, StringView s);
151template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int16SharedArray& v, StringView s);
152template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int32SharedArray& v, StringView s);
153template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int64SharedArray& v, StringView s);
154template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BFloat16SharedArray& v, StringView s);
155template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float16SharedArray& v, StringView s);
156template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float32SharedArray& v, StringView s);
157template <> ARCANE_UTILS_EXPORT bool builtInGetValue(SharedArray<Float128>& v, StringView s);
158template <> ARCANE_UTILS_EXPORT bool builtInGetValue(SharedArray<Int128>& v, StringView s);
159template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BoolSharedArray& v, StringView s);
160template <> ARCANE_UTILS_EXPORT bool builtInGetValue(StringSharedArray& v, StringView s);
161
162template <> ARCANE_UTILS_EXPORT bool builtInGetValue(RealUniqueArray& v, StringView s);
163template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2UniqueArray& v, StringView s);
164template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3UniqueArray& v, StringView s);
165template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2x2UniqueArray& v, StringView s);
166template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3x3UniqueArray& v, StringView s);
167template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int8UniqueArray& v, StringView s);
168template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int16UniqueArray& v, StringView s);
169template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int32UniqueArray& v, StringView s);
170template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int64UniqueArray& v, StringView s);
171template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BFloat16UniqueArray& v, StringView s);
172template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float16UniqueArray& v, StringView s);
173template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float32UniqueArray& v, StringView s);
174template <> ARCANE_UTILS_EXPORT bool builtInGetValue(UniqueArray<Float128>& v, StringView s);
175template <> ARCANE_UTILS_EXPORT bool builtInGetValue(UniqueArray<Int128>& v, StringView s);
176template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BoolUniqueArray& v, StringView s);
177template <> ARCANE_UTILS_EXPORT bool builtInGetValue(StringUniqueArray& v, StringView s);
178
179/*---------------------------------------------------------------------------*/
180/*---------------------------------------------------------------------------*/
189inline bool
190builtInGetValue(bool& v, StringView s)
191{
192 if (s.empty())
193 return true;
194 if (s == "false" || s == "faux" || s == "0") {
195 v = false;
196 return false;
197 }
198
199 if (s == "true" || s == "vrai" || s == "1") {
200 v = true;
201 return false;
202 }
203 return true;
204}
205
206/*---------------------------------------------------------------------------*/
207/*---------------------------------------------------------------------------*/
215template <class T> inline bool
216builtInGetValue(T& v, const String& s)
217{
218 return builtInGetValue(v, s.view());
219}
220
222template <> inline bool
223builtInGetValue(String& v, const String& s)
224{
225 v = s;
226 return false;
227}
228
229/*---------------------------------------------------------------------------*/
230/*---------------------------------------------------------------------------*/
238template <class T> inline bool
239builtInGetValue(T& v, const char* s)
240{
241 return builtInGetValue(v, StringView(s));
242}
243
244/*---------------------------------------------------------------------------*/
245/*---------------------------------------------------------------------------*/
246
248
254ARCANE_UTILS_EXPORT bool builtInPutValue(const String& v, String& s);
255ARCANE_UTILS_EXPORT bool builtInPutValue(double v, String& s);
256ARCANE_UTILS_EXPORT bool builtInPutValue(float v, String& s);
257ARCANE_UTILS_EXPORT bool builtInPutValue(int v, String& s);
258ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned int v, String& s);
259ARCANE_UTILS_EXPORT bool builtInPutValue(long v, String& s);
260ARCANE_UTILS_EXPORT bool builtInPutValue(long long v, String& s);
261ARCANE_UTILS_EXPORT bool builtInPutValue(short v, String& s);
262ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned short v, String& s);
263ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned long v, String& s);
264ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned long long v, String& s);
265#ifdef ARCANE_REAL_NOT_BUILTIN
266ARCANE_UTILS_EXPORT bool builtInPutValue(Real v, String& s);
267#endif
268ARCANE_UTILS_EXPORT bool builtInPutValue(Real2 v, String& s);
269ARCANE_UTILS_EXPORT bool builtInPutValue(Real3 v, String& s);
270ARCANE_UTILS_EXPORT bool builtInPutValue(const Real2x2& v, String& s);
271ARCANE_UTILS_EXPORT bool builtInPutValue(const Real3x3& v, String& s);
272ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real> v, String& s);
273ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real2> v, String& s);
274ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real3> v, String& s);
275ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real2x2> v, String& s);
276ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real3x3> v, String& s);
277ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Int16> v, String& s);
278ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Int32> v, String& s);
279ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Int64> v, String& s);
280ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const bool> v, String& s);
281ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const String> v, String& s);
283
284/*---------------------------------------------------------------------------*/
285/*---------------------------------------------------------------------------*/
286
287inline const char* typeToName(bool)
288{
289 return "boolean";
290}
291inline const char* typeToName(Real)
292{
293 return "real";
294}
295inline const char* typeToName(Real2)
296{
297 return "real2";
298}
299inline const char* typeToName(Real3)
300{
301 return "real3";
302}
303inline const char* typeToName(Real2x2)
304{
305 return "real2x2";
306}
307inline const char* typeToName(Real3x3)
308{
309 return "real3x3";
310}
311inline const char* typeToName(short)
312{
313 return "short";
314}
315inline const char* typeToName(unsigned short)
316{
317 return "unsigned short";
318}
319inline const char* typeToName(int)
320{
321 return "integer";
322}
323inline const char* typeToName(long)
324{
325 return "long";
326}
327inline const char* typeToName(unsigned long)
328{
329 return "unsigned long";
330}
331inline const char* typeToName(unsigned long long)
332{
333 return "unsigned long long";
334}
335inline const char* typeToName(const String&)
336{
337 return "string";
338}
339inline const char* typeToName(long long)
340{
341 return "long long";
342}
343inline const char* typeToName(unsigned int)
344{
345 return "unsigned integer";
346}
347inline const char* typeToName(BFloat16)
348{
349 return "bfloat16";
350}
351inline const char* typeToName(Float16)
352{
353 return "float16";
354}
355inline const char* typeToName(Float32)
356{
357 return "float32";
358}
359inline const char* typeToName(Float128)
360{
361 return "float128";
362}
363inline const char* typeToName(Int128)
364{
365 return "int128";
366}
367inline const char* typeToName(const StringArray&)
368{
369 return "string[]";
370}
371inline const char* typeToName(const BoolArray&)
372{
373 return "boolean[]";
374}
375inline const char* typeToName(const RealArray&)
376{
377 return "real[]";
378}
379inline const char* typeToName(const Real2Array&)
380{
381 return "real2[]";
382}
383inline const char* typeToName(const Real3Array&)
384{
385 return "real3[]";
386}
387inline const char* typeToName(const Real2x2Array&)
388{
389 return "real2x2[]";
390}
391inline const char* typeToName(const Real3x3Array&)
392{
393 return "real3x3[]";
394}
395inline const char* typeToName(const Int16Array&)
396{
397 return "Int16[]";
398}
399inline const char* typeToName(const Int32Array&)
400{
401 return "Int32[]";
402}
403inline const char* typeToName(const Int64Array&)
404{
405 return "Int64[]";
406}
407
408/*---------------------------------------------------------------------------*/
409/*---------------------------------------------------------------------------*/
410
411} // End namespace Arcane
412
413/*---------------------------------------------------------------------------*/
414/*---------------------------------------------------------------------------*/
415
416#endif
417
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Encapsule un std::istream pour un StringView.
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.
StringView view() const
Retourne une vue sur la chaîne actuelle.
Definition String.cc:367
-*- 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:590
Array< Real2 > Real2Array
Tableau dynamique à une dimension de vecteurs de rang 2.
Definition UtilsTypes.h:358
Arccore::Float128 Float128
Type représentant un floattan sur 128 bits.
UniqueArray< Real2x2 > Real2x2UniqueArray
Tableau dynamique à une dimension de tenseurs de rang 2.
Definition UtilsTypes.h:576
Array< Int64 > Int64Array
Tableau dynamique à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:336
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.
Definition UtilsTypes.h:600
UniqueArray< Real3x3 > Real3x3UniqueArray
Tableau dynamique à une dimension de tenseurs de rang 3.
Definition UtilsTypes.h:578
SharedArray< Float32 > Float32SharedArray
Tableau dynamique à une dimension de 'float'.
Definition UtilsTypes.h:606
UniqueArray< Float32 > Float32UniqueArray
Tableau dynamique à une dimension de 'float'.
Definition UtilsTypes.h:566
UniqueArray< Int64 > Int64UniqueArray
Tableau dynamique à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:550
UniqueArray< BFloat16 > BFloat16UniqueArray
Tableau dynamique à une dimension de 'bfloat16'.
Definition UtilsTypes.h:562
Array< String > StringArray
Tableau dynamique à une dimension de chaînes de caractères.
Definition UtilsTypes.h:356
UniqueArray< Float16 > Float16UniqueArray
Tableau dynamique à une dimension de 'float16'.
Definition UtilsTypes.h:564
SharedArray< Float16 > Float16SharedArray
Tableau dynamique à une dimension de 'float16'.
Definition UtilsTypes.h:604
Array< bool > BoolArray
Tableau dynamique à une dimension de booléens.
Definition UtilsTypes.h:354
SharedArray< Int8 > Int8SharedArray
Tableau dynamique à une dimension d'entiers 16 bits.
Definition UtilsTypes.h:596
Arccore::Float16 Float16
Type 'Float16' (binary16)
Array< Real3x3 > Real3x3Array
Tableau dynamique à une dimension de tenseurs de rang 3.
Definition UtilsTypes.h:364
Array< Int16 > Int16Array
Tableau dynamique à une dimension d'entiers 16 bits.
Definition UtilsTypes.h:340
Array< Float16 > Float16Array
Tableau dynamique à une dimension de 'float16'.
Definition UtilsTypes.h:350
Array< BFloat16 > BFloat16Array
Tableau dynamique à une dimension de 'bfloat16'.
Definition UtilsTypes.h:348
UniqueArray< Real3 > Real3UniqueArray
Tableau dynamique à une dimension de vecteurs de rang 3.
Definition UtilsTypes.h:574
SharedArray< Real3 > Real3SharedArray
Tableau dynamique à une dimension de vecteurs de rang 3.
Definition UtilsTypes.h:614
UniqueArray< Int16 > Int16UniqueArray
Tableau dynamique à une dimension d'entiers 16 bits.
Definition UtilsTypes.h:554
UniqueArray< bool > BoolUniqueArray
Tableau dynamique à une dimension de booléens.
Definition UtilsTypes.h:568
Array< Int8 > Int8Array
Tableau dynamique à une dimension d'entiers 8 bits.
Definition UtilsTypes.h:342
Arccore::BFloat16 BFloat16
Type 'Brain Float16'.
SharedArray< String > StringSharedArray
Tableau dynamique à une dimension de chaînes de caractères.
Definition UtilsTypes.h:610
SharedArray< BFloat16 > BFloat16SharedArray
Tableau dynamique à une dimension de 'bfloat16'.
Definition UtilsTypes.h:602
SharedArray< Int32 > Int32SharedArray
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:592
UniqueArray< Int32 > Int32UniqueArray
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:552
SharedArray< Real3x3 > Real3x3SharedArray
Tableau dynamique à une dimension de tenseurs de rang 3.
Definition UtilsTypes.h:618
SharedArray< bool > BoolSharedArray
Tableau dynamique à une dimension de booléens.
Definition UtilsTypes.h:608
UniqueArray< Real > RealUniqueArray
Tableau dynamique à une dimension de réels.
Definition UtilsTypes.h:560
float Float32
Type flottant IEEE-753 simple précision (binary32)
Array< Real2x2 > Real2x2Array
Tableau dynamique à une dimension de tenseurs de rang 2.
Definition UtilsTypes.h:362
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:338
Array< Real > RealArray
Tableau dynamique à une dimension de réels.
Definition UtilsTypes.h:346
UniqueArray< String > StringUniqueArray
Tableau dynamique à une dimension de chaînes de caractères.
Definition UtilsTypes.h:570
SharedArray< Int16 > Int16SharedArray
Tableau dynamique à une dimension d'entiers 16 bits.
Definition UtilsTypes.h:594
SharedArray< Real2x2 > Real2x2SharedArray
Tableau dynamique à une dimension de tenseurs de rang 2.
Definition UtilsTypes.h:616
UniqueArray< Real2 > Real2UniqueArray
Tableau dynamique à une dimension de vecteurs de rang 2.
Definition UtilsTypes.h:572
SharedArray< Real2 > Real2SharedArray
Tableau dynamique à une dimension de vecteurs de rang 2.
Definition UtilsTypes.h:612
Array< Float32 > Float32Array
Tableau dynamique à une dimension de 'float'.
Definition UtilsTypes.h:352
UniqueArray< Int8 > Int8UniqueArray
Tableau dynamique à une dimension d'entiers 16 bits.
Definition UtilsTypes.h:556
Arccore::Int128 Int128
Type représentant un entier sur 128 bits.
Array< Real3 > Real3Array
Tableau dynamique à une dimension de vecteurs de rang 3.
Definition UtilsTypes.h:360