🛰️航天仿真算法库 SpaceAST 0.3.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
184AST_UTIL_API std::string aFormatBytes(uint64_t bytes);
185
186
187// alias
188// 下面是内联函数的实现
189
190
194A_ALWAYS_INLINE
195std::string aFormatBool(bool value)
196{
197 std::string str;
198 aFormatBool(value, str);
199 return str;
200}
201
202
206A_ALWAYS_INLINE
207std::string aFormatInt(int value)
208{
209 std::string str;
210 errc_t err = aFormatInt(value, str);
211 if (A_UNLIKELY(err != eNoError))
212 {
213 aWarning(_("格式化整数值失败,错误 = %d"), err);
214 }
215 return str;
216}
217
218
223A_ALWAYS_INLINE
224std::string aFormatDouble(double value, int precision = kDefaultFormatDoubleEps)
225{
226 std::string str;
227 errc_t err = aFormatDouble(value, str, precision);
228 if (A_UNLIKELY(err != eNoError))
229 {
230 aWarning(_("格式化双精度浮点数值失败,错误 = %d"), err);
231 }
232 return str;
233}
234
238A_ALWAYS_INLINE
239std::string aFormatColor(Color value)
240{
241 std::string str;
242 errc_t err = aFormatColor(value, str);
243 if (A_UNLIKELY(err != eNoError))
244 {
245 aWarning(_("格式化颜色值失败,错误 = %d"), err);
246 }
247 return str;
248}
249
250
254A_ALWAYS_INLINE
256{
257 bool value;
258 errc_t err = aParseBool(str, value);
259 if (A_UNLIKELY(err != eNoError))
260 {
261 aWarning(_("从 '%.*s' 解析布尔值失败,错误 = %d"), str.size(), str.data(), err);
262 }
263 return value;
264}
265
269A_ALWAYS_INLINE
271{
272 int value;
273 errc_t err = aParseInt(str, value);
274 if (A_UNLIKELY(err != eNoError))
275 {
276 aWarning(_("从 '%.*s' 解析整数值失败,错误 = %d"), str.size(), str.data(), err);
277 }
278 return value;
279}
280
281
285A_ALWAYS_INLINE
287{
288 double value;
289 errc_t err = aParseDouble(str, value);
290 if (A_UNLIKELY(err != eNoError))
291 {
292 aWarning(_("从 '%.*s' 解析双精度浮点数值失败,错误 = %d"), str.size(), str.data(), err);
293 }
294 return value;
295}
296
300A_ALWAYS_INLINE
302{
303 double value;
304 errc_t err = aParseFortranDouble(str, value);
305 if (A_UNLIKELY(err != eNoError))
306 {
307 aWarning(_("从 '%.*s' 解析 Fortran 双精度浮点数值失败,错误 = %d"), str.size(), str.data(), err);
308 }
309 return value;
310}
311
312
316A_ALWAYS_INLINE
318{
319 Color value;
320 errc_t err = aParseColor(str, value);
321 if (A_UNLIKELY(err != eNoError))
322 {
323 aWarning(_("从 '%.*s' 解析颜色值失败,错误 = %d"), str.size(), str.data(), err);
324 }
325 return value;
326}
327
328
329A_ALWAYS_INLINE
330errc_t aFormatScalar(double value, std::string& str)
331{
332 return aFormatDouble(value, str);
333}
334
335
336A_ALWAYS_INLINE
337errc_t aFormatScalar(int value, std::string& str)
338{
339 return aFormatInt(value, str);
340}
341
342
343A_ALWAYS_INLINE
344void aFormatScalar(bool value, std::string& str)
345{
346 return aFormatBool(value, str);
347}
348
349
350A_ALWAYS_INLINE
351std::string aFormatScalar(double value)
352{
353 return aFormatDouble(value);
354}
355
356A_ALWAYS_INLINE
357std::string aFormatScalar(int value)
358{
359 return aFormatInt(value);
360}
361
362
363A_ALWAYS_INLINE
364std::string aFormatScalar(bool value)
365{
366 return aFormatBool(value);
367}
368
371AST_NAMESPACE_END
颜色类
定义 Color.hpp:87
errc_t _aParseInt_StringStream(StringView str, int &value)
内部函数,将字符串转换为整数(基于 stringstream 流解析)
定义 ParseFormat.cpp:240
errc_t _aParseDouble_StringStream(StringView str, double &value)
内部函数,将字符串转换为双精度浮点数(基于 stringstream 流解析)
定义 ParseFormat.cpp:396
errc_t aParseFortranDouble(StringView sv, double &value)
解析Fortran格式的双精度浮点数,例如"1.23D-4"、"1.23d-4"等
定义 ParseFormat.cpp:275
errc_t aParseColor(StringView str, Color &value)
将字符串转换为颜色值
定义 ParseFormat.cpp:416
errc_t aFormatDouble(double value, std::string &str, int precision)
将双精度浮点数格式化为字符串
定义 ParseFormat.cpp:507
errc_t _aParseDouble_Scanf(StringView str, double &value)
内部函数,将字符串转换为双精度浮点数(基于 scanf 函数)
定义 ParseFormat.cpp:403
errc_t aFormatColor(Color value, std::string &str)
将颜色值格式化为字符串
定义 ParseFormat.cpp:518
errc_t aParseDouble(StringView str, double &value)
将字符串转换为双精度浮点数
定义 ParseFormat.cpp:260
errc_t _aParseDouble_LibC_1(StringView sv, double &value)
内部函数,将字符串转换为双精度浮点数(基于C标准库函数)
定义 ParseFormat.cpp:308
errc_t aParseBool(StringView str, bool &value)
将字符串转换为布尔值
定义 ParseFormat.cpp:57
errc_t _aParseInt_Simple(StringView str, int &value)
内部函数,将字符串转换为整数(简单实现)
定义 ParseFormat.cpp:186
errc_t aFormatInt(int value, std::string &str)
将整数格式化为字符串
定义 ParseFormat.cpp:460
errc_t _aParseInt_Scanf(StringView str, int &value)
内部函数,将字符串转换为整数(基于 scanf 函数)
定义 ParseFormat.cpp:247
errc_t _aParseInt_LibC_1(StringView sv, int &value)
内部函数,将字符串转换为整数(基于C标准库函数)
定义 ParseFormat.cpp:95
errc_t _aParseInt_LibC_3(StringView sv, int &value)
定义 ParseFormat.cpp:134
void aFormatBool(bool value, std::string &str)
将布尔值格式化为字符串
定义 ParseFormat.cpp:455
std::string aFormatBytes(uint64_t bytes)
将字节数格式化为易读字符串,如 "5.6 MB"
定义 ParseFormat.cpp:533
errc_t aParseInt(StringView str, int &value)
将字符串转换为整数
定义 ParseFormat.cpp:79
A_ALWAYS_INLINE const char * _(const char *msgid)
翻译文本(无上下文)
定义 I18n.hpp:88