🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
ParseFormat.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/StringView.hpp"
25#include "AstUtil/Logger.hpp"
26#include "AstUtil/Color.hpp"
27#include <string>
28
29
30AST_NAMESPACE_BEGIN
31
47AST_UTIL_CAPI errc_t aParseBool(StringView str, bool& value);
48
49
54AST_UTIL_CAPI errc_t aParseInt(StringView str, int& value);
55
56
61AST_UTIL_CAPI errc_t _aParseInt_LibC_1(StringView str, int& value); // 基于 strtol 函数(stol函数),堆内存
62AST_UTIL_CAPI errc_t _aParseInt_LibC_2(StringView str, int& value); // 基于 atoi 函数
63AST_UTIL_CAPI errc_t _aParseInt_LibC_3(StringView str, int& value); // 基于 strtol 函数(stol函数),栈内存
64
65
66#ifdef A_CXX17
67AST_UTIL_CAPI errc_t _aParseInt_FromChars(StringView str, int& value); // 基于 std::from_chars 函数
68#endif
69
70
75AST_UTIL_CAPI errc_t _aParseInt_Simple(StringView str, int& value);
76
77
82AST_UTIL_CAPI errc_t _aParseInt_StringStream(StringView str, int& value);
83
84
89AST_UTIL_CAPI errc_t _aParseInt_Scanf(StringView str, int& value); // 基于 scanf 函数
90
91
96AST_UTIL_CAPI errc_t aParseDouble(StringView str, double& value);
97
98
103AST_UTIL_CAPI errc_t aParseFortranDouble(StringView str, double& value);
104AST_UTIL_CAPI errc_t _aParseFortranDouble_1(StringView str, double& value); // 堆内存
105AST_UTIL_CAPI errc_t _aParseFortranDouble_2(StringView str, double& value); // 栈内存
106
107
108
113AST_UTIL_CAPI errc_t _aParseDouble_LibC_1(StringView str, double& value); // 基于 strtod 函数(stod函数),堆内存
114AST_UTIL_CAPI errc_t _aParseDouble_LibC_2(StringView str, double& value); // 基于 atof 函数
115AST_UTIL_CAPI errc_t _aParseDouble_LibC_3(StringView str, double& value); // 基于 strtod 函数(stod函数),栈内存
116
117
118#ifdef A_CXX17
119AST_UTIL_CAPI errc_t _aParseDouble_FromChars(StringView str, double& value); // 基于 std::from_chars 函数
120#endif
121
122#ifdef AST_WITH_ABSEIL
123AST_UTIL_CAPI errc_t _aParseDouble_FromChars_Abseil(StringView str, double& value);
124#endif
125
130AST_UTIL_CAPI errc_t _aParseDouble_StringStream(StringView str, double& value);
131
132
133
138AST_UTIL_CAPI errc_t _aParseDouble_Scanf(StringView str, double& value); // 基于 scanf 函数
139
140
141
146AST_UTIL_CAPI errc_t aParseColor(StringView str, Color& value);
147
148
149
153AST_UTIL_CAPI void aFormatBool(bool value, std::string& str);
154
155
156
161AST_UTIL_CAPI errc_t aFormatInt(int value, std::string& str);
162
163
164enum {kDefaultFormatDoubleEps = -1};
165
171AST_UTIL_CAPI errc_t aFormatDouble(double value, std::string& str, int precision = kDefaultFormatDoubleEps);
172
173
178AST_UTIL_CAPI errc_t aFormatColor(Color value, std::string& str);
179
180
181// alias
182// 下面是内联函数的实现
183
184
188A_ALWAYS_INLINE
189std::string aFormatBool(bool value)
190{
191 std::string str;
192 aFormatBool(value, str);
193 return str;
194}
195
196
200A_ALWAYS_INLINE
201std::string aFormatInt(int value)
202{
203 std::string str;
204 errc_t err = aFormatInt(value, str);
205 if (A_UNLIKELY(err != eNoError))
206 {
207 aWarning("failed to format int value, err = %d", err);
208 }
209 return str;
210}
211
212
217A_ALWAYS_INLINE
218std::string aFormatDouble(double value, int precision = kDefaultFormatDoubleEps)
219{
220 std::string str;
221 errc_t err = aFormatDouble(value, str, precision);
222 if (A_UNLIKELY(err != eNoError))
223 {
224 aWarning("failed to format double value, err = %d", err);
225 }
226 return str;
227}
228
232A_ALWAYS_INLINE
233std::string aFormatColor(Color value)
234{
235 std::string str;
236 errc_t err = aFormatColor(value, str);
237 if (A_UNLIKELY(err != eNoError))
238 {
239 aWarning("failed to format color value, err = %d", err);
240 }
241 return str;
242}
243
244
248A_ALWAYS_INLINE
250{
251 bool value;
252 errc_t err = aParseBool(str, value);
253 if (A_UNLIKELY(err != eNoError))
254 {
255 aWarning("failed to parse bool value from '%.*s', err = %d", str.size(), str.data(), err);
256 }
257 return value;
258}
259
263A_ALWAYS_INLINE
265{
266 int value;
267 errc_t err = aParseInt(str, value);
268 if (A_UNLIKELY(err != eNoError))
269 {
270 aWarning("failed to parse int value from '%.*s', err = %d", str.size(), str.data(), err);
271 }
272 return value;
273}
274
275
279A_ALWAYS_INLINE
281{
282 double value;
283 errc_t err = aParseDouble(str, value);
284 if (A_UNLIKELY(err != eNoError))
285 {
286 aWarning("failed to parse double value from '%.*s', err = %d", str.size(), str.data(), err);
287 }
288 return value;
289}
290
294A_ALWAYS_INLINE
296{
297 double value;
298 errc_t err = aParseFortranDouble(str, value);
299 if (A_UNLIKELY(err != eNoError))
300 {
301 aWarning("failed to parse fortran double value from '%.*s', err = %d", str.size(), str.data(), err);
302 }
303 return value;
304}
305
306
310A_ALWAYS_INLINE
312{
313 Color value;
314 errc_t err = aParseColor(str, value);
315 if (A_UNLIKELY(err != eNoError))
316 {
317 aWarning("failed to parse color value from '%.*s', err = %d", str.size(), str.data(), err);
318 }
319 return value;
320}
321
322
323A_ALWAYS_INLINE
324errc_t aFormatScalar(double value, std::string& str)
325{
326 return aFormatDouble(value, str);
327}
328
329
330A_ALWAYS_INLINE
331errc_t aFormatScalar(int value, std::string& str)
332{
333 return aFormatInt(value, str);
334}
335
336
337A_ALWAYS_INLINE
338void aFormatScalar(bool value, std::string& str)
339{
340 return aFormatBool(value, str);
341}
342
343
344A_ALWAYS_INLINE
345std::string aFormatScalar(double value)
346{
347 return aFormatDouble(value);
348}
349
350A_ALWAYS_INLINE
351std::string aFormatScalar(int value)
352{
353 return aFormatInt(value);
354}
355
356
357A_ALWAYS_INLINE
358std::string aFormatScalar(bool value)
359{
360 return aFormatBool(value);
361}
362
365AST_NAMESPACE_END
颜色类
定义 Color.hpp:87
errc_t _aParseInt_StringStream(StringView str, int &value)
内部函数,将字符串转换为整数(基于 stringstream 流解析)
定义 ParseFormat.cpp:233
errc_t _aParseDouble_StringStream(StringView str, double &value)
内部函数,将字符串转换为双精度浮点数(基于 stringstream 流解析)
定义 ParseFormat.cpp:389
errc_t aParseFortranDouble(StringView sv, double &value)
解析Fortran格式的双精度浮点数,例如"1.23D-4"、"1.23d-4"等
定义 ParseFormat.cpp:268
errc_t aParseColor(StringView str, Color &value)
将字符串转换为颜色值
定义 ParseFormat.cpp:409
errc_t aFormatDouble(double value, std::string &str, int precision)
将双精度浮点数格式化为字符串
定义 ParseFormat.cpp:500
errc_t _aParseDouble_Scanf(StringView str, double &value)
内部函数,将字符串转换为双精度浮点数(基于 scanf 函数)
定义 ParseFormat.cpp:396
errc_t aFormatColor(Color value, std::string &str)
将颜色值格式化为字符串
定义 ParseFormat.cpp:511
errc_t aParseDouble(StringView str, double &value)
将字符串转换为双精度浮点数
定义 ParseFormat.cpp:253
errc_t _aParseDouble_LibC_1(StringView sv, double &value)
内部函数,将字符串转换为双精度浮点数(基于C标准库函数)
定义 ParseFormat.cpp:301
errc_t aParseBool(StringView str, bool &value)
将字符串转换为布尔值
定义 ParseFormat.cpp:50
errc_t _aParseInt_Simple(StringView str, int &value)
内部函数,将字符串转换为整数(简单实现)
定义 ParseFormat.cpp:179
errc_t aFormatInt(int value, std::string &str)
将整数格式化为字符串
定义 ParseFormat.cpp:453
errc_t _aParseInt_Scanf(StringView str, int &value)
内部函数,将字符串转换为整数(基于 scanf 函数)
定义 ParseFormat.cpp:240
errc_t _aParseInt_LibC_1(StringView sv, int &value)
内部函数,将字符串转换为整数(基于C标准库函数)
定义 ParseFormat.cpp:88
errc_t _aParseInt_LibC_3(StringView sv, int &value)
定义 ParseFormat.cpp:127
void aFormatBool(bool value, std::string &str)
将布尔值格式化为字符串
定义 ParseFormat.cpp:448
errc_t aParseInt(StringView str, int &value)
将字符串转换为整数
定义 ParseFormat.cpp:72