Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
ValueConvert.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* Functions to convert a character string into a given type. */
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::impl
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
42class ARCANE_UTILS_EXPORT StringViewInputStream
43: private std::streambuf
44{
45 public:
46
47 StringViewInputStream(StringView v);
48
49 public:
50
51 std::istream& stream() { return m_stream; }
52
53 private:
54
55 StringView m_view;
56 std::istream m_stream;
57};
58
59/*---------------------------------------------------------------------------*/
60/*---------------------------------------------------------------------------*/
61
69template <class T> inline bool
70builtInGetValueGeneric(T& v, StringView s)
71{
72 T read_val = T();
74 std::istream& sbuf = svis.stream();
75 sbuf >> read_val;
76 if (sbuf.fail() || sbuf.bad())
77 return true;
78 if (!sbuf.eof())
79 return true;
80 v = read_val;
81 return false;
82}
83
84/*---------------------------------------------------------------------------*/
85/*---------------------------------------------------------------------------*/
86
87} // namespace Arcane::impl
88
89/*---------------------------------------------------------------------------*/
90/*---------------------------------------------------------------------------*/
91
92namespace Arcane
93{
94
95/*---------------------------------------------------------------------------*/
96/*---------------------------------------------------------------------------*/
97
105template <class T> inline bool
106builtInGetValue(T& v, StringView s)
107{
108 return impl::builtInGetValueGeneric(v, s);
109}
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114template <> ARCANE_UTILS_EXPORT bool builtInGetValue(String& v, StringView s);
115template <> ARCANE_UTILS_EXPORT bool builtInGetValue(double& v, StringView s);
116template <> ARCANE_UTILS_EXPORT bool builtInGetValue(float& v, StringView s);
117template <> ARCANE_UTILS_EXPORT bool builtInGetValue(int& v, StringView s);
118template <> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned int& v, StringView s);
119template <> ARCANE_UTILS_EXPORT bool builtInGetValue(long& v, StringView s);
120template <> ARCANE_UTILS_EXPORT bool builtInGetValue(long long& v, StringView s);
121template <> ARCANE_UTILS_EXPORT bool builtInGetValue(short& v, StringView s);
122template <> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned short& v, StringView s);
123template <> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned long& v, StringView s);
124template <> ARCANE_UTILS_EXPORT bool builtInGetValue(unsigned long long& v, StringView s);
125template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float16& v, StringView s);
126template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BFloat16& v, StringView s);
127template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float128& v, StringView s);
128template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int128& v, StringView s);
129#ifdef ARCANE_REAL_NOT_BUILTIN
130template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real& v, StringView s);
131#endif
132template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2& v, StringView s);
133template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3& v, StringView s);
134template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2x2& v, StringView s);
135template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3x3& v, StringView s);
136
137template <> ARCANE_UTILS_EXPORT bool builtInGetValue(RealArray& v, StringView s);
138template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2Array& v, StringView s);
139template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3Array& v, StringView s);
140template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2x2Array& v, StringView s);
141template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3x3Array& v, StringView s);
142template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int8Array& v, StringView s);
143template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int16Array& v, StringView s);
144template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int32Array& v, StringView s);
145template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int64Array& v, StringView s);
146template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BFloat16Array& v, StringView s);
147template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float16Array& v, StringView s);
148template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float32Array& v, StringView s);
149template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Array<Float128>& v, StringView s);
150template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Array<Int128>& v, StringView s);
151template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BoolArray& v, StringView s);
152template <> ARCANE_UTILS_EXPORT bool builtInGetValue(StringArray& v, StringView s);
153
154template <> ARCANE_UTILS_EXPORT bool builtInGetValue(RealSharedArray& v, StringView s);
155template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2SharedArray& v, StringView s);
156template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3SharedArray& v, StringView s);
157template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2x2SharedArray& v, StringView s);
158template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3x3SharedArray& v, StringView s);
159template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int8SharedArray& v, StringView s);
160template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int16SharedArray& v, StringView s);
161template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int32SharedArray& v, StringView s);
162template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int64SharedArray& v, StringView s);
163template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BFloat16SharedArray& v, StringView s);
164template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float16SharedArray& v, StringView s);
165template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float32SharedArray& v, StringView s);
166template <> ARCANE_UTILS_EXPORT bool builtInGetValue(SharedArray<Float128>& v, StringView s);
167template <> ARCANE_UTILS_EXPORT bool builtInGetValue(SharedArray<Int128>& v, StringView s);
168template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BoolSharedArray& v, StringView s);
169template <> ARCANE_UTILS_EXPORT bool builtInGetValue(StringSharedArray& v, StringView s);
170
171template <> ARCANE_UTILS_EXPORT bool builtInGetValue(RealUniqueArray& v, StringView s);
172template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2UniqueArray& v, StringView s);
173template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3UniqueArray& v, StringView s);
174template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real2x2UniqueArray& v, StringView s);
175template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Real3x3UniqueArray& v, StringView s);
176template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int8UniqueArray& v, StringView s);
177template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int16UniqueArray& v, StringView s);
178template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int32UniqueArray& v, StringView s);
179template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Int64UniqueArray& v, StringView s);
180template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BFloat16UniqueArray& v, StringView s);
181template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float16UniqueArray& v, StringView s);
182template <> ARCANE_UTILS_EXPORT bool builtInGetValue(Float32UniqueArray& v, StringView s);
183template <> ARCANE_UTILS_EXPORT bool builtInGetValue(UniqueArray<Float128>& v, StringView s);
184template <> ARCANE_UTILS_EXPORT bool builtInGetValue(UniqueArray<Int128>& v, StringView s);
185template <> ARCANE_UTILS_EXPORT bool builtInGetValue(BoolUniqueArray& v, StringView s);
186template <> ARCANE_UTILS_EXPORT bool builtInGetValue(StringUniqueArray& v, StringView s);
187
188/*---------------------------------------------------------------------------*/
189/*---------------------------------------------------------------------------*/
190
199inline bool
200builtInGetValue(bool& v, StringView s)
201{
202 if (s.empty())
203 return true;
204 if (s == "false" || s == "faux" || s == "0") {
205 v = false;
206 return false;
207 }
208
209 if (s == "true" || s == "vrai" || s == "1") {
210 v = true;
211 return false;
212 }
213 return true;
214}
215
216/*---------------------------------------------------------------------------*/
217/*---------------------------------------------------------------------------*/
218
226template <class T> inline bool
227builtInGetValue(T& v, const String& s)
228{
229 return builtInGetValue(v, s.view());
230}
231
233template <> inline bool
234builtInGetValue(String& v, const String& s)
235{
236 v = s;
237 return false;
238}
239
240/*---------------------------------------------------------------------------*/
241/*---------------------------------------------------------------------------*/
242
250template <class T> inline bool
251builtInGetValue(T& v, const char* s)
252{
253 return builtInGetValue(v, StringView(s));
254}
255
256/*---------------------------------------------------------------------------*/
257/*---------------------------------------------------------------------------*/
258
260
266ARCANE_UTILS_EXPORT bool builtInPutValue(const String& v, String& s);
267ARCANE_UTILS_EXPORT bool builtInPutValue(double v, String& s);
268ARCANE_UTILS_EXPORT bool builtInPutValue(float v, String& s);
269ARCANE_UTILS_EXPORT bool builtInPutValue(int v, String& s);
270ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned int v, String& s);
271ARCANE_UTILS_EXPORT bool builtInPutValue(long v, String& s);
272ARCANE_UTILS_EXPORT bool builtInPutValue(long long v, String& s);
273ARCANE_UTILS_EXPORT bool builtInPutValue(short v, String& s);
274ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned short v, String& s);
275ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned long v, String& s);
276ARCANE_UTILS_EXPORT bool builtInPutValue(unsigned long long v, String& s);
277#ifdef ARCANE_REAL_NOT_BUILTIN
278ARCANE_UTILS_EXPORT bool builtInPutValue(Real v, String& s);
279#endif
280ARCANE_UTILS_EXPORT bool builtInPutValue(Real2 v, String& s);
281ARCANE_UTILS_EXPORT bool builtInPutValue(Real3 v, String& s);
282ARCANE_UTILS_EXPORT bool builtInPutValue(const Real2x2& v, String& s);
283ARCANE_UTILS_EXPORT bool builtInPutValue(const Real3x3& v, String& s);
284ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real> v, String& s);
285ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real2> v, String& s);
286ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real3> v, String& s);
287ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real2x2> v, String& s);
288ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Real3x3> v, String& s);
289ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Int16> v, String& s);
290ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Int32> v, String& s);
291ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const Int64> v, String& s);
292ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const bool> v, String& s);
293ARCANE_UTILS_EXPORT bool builtInPutValue(Span<const String> v, String& s);
295
296/*---------------------------------------------------------------------------*/
297/*---------------------------------------------------------------------------*/
298
299inline const char* typeToName(bool)
300{
301 return "boolean";
302}
303inline const char* typeToName(Real)
304{
305 return "real";
306}
307inline const char* typeToName(Real2)
308{
309 return "real2";
310}
311inline const char* typeToName(Real3)
312{
313 return "real3";
314}
315inline const char* typeToName(Real2x2)
316{
317 return "real2x2";
318}
319inline const char* typeToName(Real3x3)
320{
321 return "real3x3";
322}
323inline const char* typeToName(short)
324{
325 return "short";
326}
327inline const char* typeToName(unsigned short)
328{
329 return "unsigned short";
330}
331inline const char* typeToName(int)
332{
333 return "integer";
334}
335inline const char* typeToName(long)
336{
337 return "long";
338}
339inline const char* typeToName(unsigned long)
340{
341 return "unsigned long";
342}
343inline const char* typeToName(unsigned long long)
344{
345 return "unsigned long long";
346}
347inline const char* typeToName(const String&)
348{
349 return "string";
350}
351inline const char* typeToName(long long)
352{
353 return "long long";
354}
355inline const char* typeToName(unsigned int)
356{
357 return "unsigned integer";
358}
359inline const char* typeToName(BFloat16)
360{
361 return "bfloat16";
362}
363inline const char* typeToName(Float16)
364{
365 return "float16";
366}
367inline const char* typeToName(Float32)
368{
369 return "float32";
370}
371inline const char* typeToName(Float128)
372{
373 return "float128";
374}
375inline const char* typeToName(Int128)
376{
377 return "int128";
378}
379inline const char* typeToName(const StringArray&)
380{
381 return "string[]";
382}
383inline const char* typeToName(const BoolArray&)
384{
385 return "boolean[]";
386}
387inline const char* typeToName(const RealArray&)
388{
389 return "real[]";
390}
391inline const char* typeToName(const Real2Array&)
392{
393 return "real2[]";
394}
395inline const char* typeToName(const Real3Array&)
396{
397 return "real3[]";
398}
399inline const char* typeToName(const Real2x2Array&)
400{
401 return "real2x2[]";
402}
403inline const char* typeToName(const Real3x3Array&)
404{
405 return "real3x3[]";
406}
407inline const char* typeToName(const Int16Array&)
408{
409 return "Int16[]";
410}
411inline const char* typeToName(const Int32Array&)
412{
413 return "Int32[]";
414}
415inline const char* typeToName(const Int64Array&)
416{
417 return "Int64[]";
418}
419
420/*---------------------------------------------------------------------------*/
421/*---------------------------------------------------------------------------*/
422
423} // End namespace Arcane
424
425/*---------------------------------------------------------------------------*/
426/*---------------------------------------------------------------------------*/
427
428#endif
Half-precision floating-point type.
Class managing a 2-dimensional real vector.
Definition Real2.h:122
Class managing a 2x2 matrix of reals.
Definition Real2x2.h:55
Class managing a 3-dimensional real vector.
Definition Real3.h:132
Class managing a 3x3 real matrix.
Definition Real3x3.h:67
View of a UTF-8 character string.
Definition StringView.h:44
constexpr bool empty() const ARCCORE_NOEXCEPT
True if the string is null or empty.
Definition StringView.h:102
StringView view() const
Returns a view of the current string.
Definition String.cc:369
Encapsulates an std::istream for a StringView.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
SharedArray< Int64 > Int64SharedArray
Dynamic 1D array of 64-bit integers.
Definition UtilsTypes.h:379
Array< Real2 > Real2Array
Dynamic one-dimensional array of rank 2 vectors.
Definition UtilsTypes.h:147
UniqueArray< Real2x2 > Real2x2UniqueArray
Dynamic 1D array of rank 2 tensors.
Definition UtilsTypes.h:365
Array< Int64 > Int64Array
Dynamic one-dimensional array of 64-bit integers.
Definition UtilsTypes.h:125
bool builtInPutValue(const String &v, String &s)
Converti la valeur v dans la chaîne s.
SharedArray< Real > RealSharedArray
Dynamic 1D array of reals.
Definition UtilsTypes.h:389
UniqueArray< Real3x3 > Real3x3UniqueArray
Dynamic 1D array of rank 3 tensors.
Definition UtilsTypes.h:367
SharedArray< Float32 > Float32SharedArray
Dynamic 1D array of 'float'.
Definition UtilsTypes.h:395
UniqueArray< Float32 > Float32UniqueArray
Dynamic 1D array of 'float'.
Definition UtilsTypes.h:355
UniqueArray< Int64 > Int64UniqueArray
Dynamic 1D array of 64-bit integers.
Definition UtilsTypes.h:339
UniqueArray< BFloat16 > BFloat16UniqueArray
Dynamic 1D array of 'bfloat16'.
Definition UtilsTypes.h:351
Array< String > StringArray
Dynamic one-dimensional array of strings.
Definition UtilsTypes.h:145
UniqueArray< Float16 > Float16UniqueArray
Dynamic 1D array of 'float16'.
Definition UtilsTypes.h:353
SharedArray< Float16 > Float16SharedArray
Dynamic 1D array of 'float16'.
Definition UtilsTypes.h:393
Array< bool > BoolArray
Dynamic one-dimensional array of booleans.
Definition UtilsTypes.h:143
SharedArray< Int8 > Int8SharedArray
Dynamic 1D array of 8-bit integers.
Definition UtilsTypes.h:385
Array< Real3x3 > Real3x3Array
Dynamic one-dimensional array of rank 3 tensors.
Definition UtilsTypes.h:153
Array< Int16 > Int16Array
Dynamic one-dimensional array of 16-bit integers.
Definition UtilsTypes.h:129
Array< Float16 > Float16Array
Dynamic one-dimensional array of 'float16'.
Definition UtilsTypes.h:139
Array< BFloat16 > BFloat16Array
Dynamic one-dimensional array of 'bfloat16'.
Definition UtilsTypes.h:137
UniqueArray< Real3 > Real3UniqueArray
Dynamic 1D array of rank 3 vectors.
Definition UtilsTypes.h:363
SharedArray< Real3 > Real3SharedArray
Dynamic 1D array of rank 3 vectors.
Definition UtilsTypes.h:403
UniqueArray< Int16 > Int16UniqueArray
Dynamic 1D array of 16-bit integers.
Definition UtilsTypes.h:343
UniqueArray< bool > BoolUniqueArray
Dynamic 1D array of booleans.
Definition UtilsTypes.h:357
Array< Int8 > Int8Array
Dynamic one-dimensional array of 8-bit integers.
Definition UtilsTypes.h:131
SharedArray< String > StringSharedArray
Dynamic 1D array of strings.
Definition UtilsTypes.h:399
SharedArray< BFloat16 > BFloat16SharedArray
Dynamic 1D array of 'bfloat16'.
Definition UtilsTypes.h:391
SharedArray< Int32 > Int32SharedArray
Dynamic 1D array of 32-bit integers.
Definition UtilsTypes.h:381
UniqueArray< Int32 > Int32UniqueArray
Dynamic 1D array of 32-bit integers.
Definition UtilsTypes.h:341
SharedArray< Real3x3 > Real3x3SharedArray
Dynamic 1D array of rank 3 tensors.
Definition UtilsTypes.h:407
SharedArray< bool > BoolSharedArray
Dynamic 1D array of booleans.
Definition UtilsTypes.h:397
UniqueArray< Real > RealUniqueArray
Dynamic 1D array of reals.
Definition UtilsTypes.h:349
double Real
Type representing a real number.
Array< Real2x2 > Real2x2Array
Dynamic one-dimensional array of rank 2 tensors.
Definition UtilsTypes.h:151
Array< Int32 > Int32Array
Dynamic one-dimensional array of 32-bit integers.
Definition UtilsTypes.h:127
Array< Real > RealArray
Dynamic one-dimensional array of reals.
Definition UtilsTypes.h:135
UniqueArray< String > StringUniqueArray
Dynamic 1D array of strings.
Definition UtilsTypes.h:359
float Float32
IEEE-753 single-precision floating-point type.
SharedArray< Int16 > Int16SharedArray
Dynamic 1D array of 16-bit integers.
Definition UtilsTypes.h:383
SharedArray< Real2x2 > Real2x2SharedArray
Dynamic 1D array of rank 2 tensors.
Definition UtilsTypes.h:405
UniqueArray< Real2 > Real2UniqueArray
Dynamic 1D array of rank 2 vectors.
Definition UtilsTypes.h:361
SharedArray< Real2 > Real2SharedArray
Dynamic 1D array of rank 2 vectors.
Definition UtilsTypes.h:401
Array< Float32 > Float32Array
Dynamic one-dimensional array of 'float'.
Definition UtilsTypes.h:141
UniqueArray< Int8 > Int8UniqueArray
Dynamic 1D array of 8-bit integers.
Definition UtilsTypes.h:345
Array< Real3 > Real3Array
Dynamic one-dimensional array of rank 3 vectors.
Definition UtilsTypes.h:149