- add chars format argument for floating point overload of ParserHelper::TryParse. - add overload for ParserHelper::Parse to match with ParserHelper::TryParse. - fix the issue that we can not specify c++ standard in command line when configuring project. - update documentation for changes. - change following function's argument from const yycc_char8_t* to const yycc_u8string_view&. - StringHelper::Split, StringHelper::SplitView - StringHelper::Lower, StringHelper::Upper - StringHelper::Join - StringHelper::Replace - use iterator type, not std::vector<yycc_u8string> for specialized StringHelper::Join to have more wide usage.
88 lines
3.7 KiB
Plaintext
88 lines
3.7 KiB
Plaintext
namespace YYCC::ParserHelper {
|
|
/**
|
|
|
|
\page parser_helper Parser Helper
|
|
|
|
This helper is served for the convertion between number and string.
|
|
|
|
\section parser_helper_supported_types Supported Types
|
|
|
|
Functions located in this helper support the convertion between string and following types:
|
|
|
|
\li Integral types (except \c bool): \c int, \c uint32_t, \c char and etc.
|
|
\li Floating point types: \c float, \c double and etc.
|
|
\li \c bool
|
|
|
|
Please note in C++, \c bool is integral type but we list it individually because parser will treat it specially.
|
|
For \c bool type, parser will try doing convertion between it and \c "true" \c "false" string.
|
|
(\b case-insensitive. It means that \c true can be converted from \c "true", \c "True" or \c "TRUE".)
|
|
|
|
\section parser_helper__try_parse Try Parse
|
|
|
|
#TryParse will try to parse string into caller specified type.
|
|
All of them accept an UTF8 string view at first argument,
|
|
require that you provide a container receiving converted result in the second argument,
|
|
and return a bool value to indicate whether the convertion is successful.
|
|
There are some examples:
|
|
|
|
\code
|
|
uint32_t val;
|
|
YYCC::ParserHelper::TryParse<uint32_t>(YYCC_U8("123"), val);
|
|
YYCC::ParserHelper::TryParse<uint32_t>(YYCC_U8("7fff"), val, 16);
|
|
\endcode
|
|
|
|
For floating point type, this function allows caller to specify extra argument providing the format of given number string (\c std::chars_format).
|
|
For integral type, this function allows caller to specify extra argument providing the base of given number string.
|
|
|
|
\section parser_helper__parse Parse
|
|
|
|
#Parse is similar to #TryParse.
|
|
But it will not return bool value to indicate success and doesn't have the argument receiving result.
|
|
It only accepts an UTF8 string view as the only one argument, and return result directly.
|
|
If the convertion failed, the return value is \b undefined (but usually is the default value of given type).
|
|
There is an example:
|
|
|
|
\code
|
|
uint32_t val = YYCC::ParserHelper::Parse<uint32_t>(YYCC_U8("123"));
|
|
\endcode
|
|
|
|
For integral and floating point value,
|
|
it has same extra argument with #TryParse to provide more number infomation.
|
|
|
|
Using this function is dangerous if the validation of your input is important.
|
|
In this case, please use #TryParse instead.
|
|
|
|
\section parser_helper__to_string To String
|
|
|
|
#ToString basically is the reversed operation of #Parse.
|
|
It gets the string representation of given type.
|
|
The only argument of these functions is the type which need to be converted to its string representation.
|
|
And they will return yycc_u8string as result.
|
|
There is an example:
|
|
|
|
\code
|
|
auto result = YYCC::ParserHelper::ToString<uint32_t>(UINT32_C(114));
|
|
\endcode
|
|
|
|
For floating point type, this function allows caller to specify extra arguments
|
|
which provides the format (\c std::chars_format) and precision when getting string representation.
|
|
For integral type, this function allows caller to specify extra argument
|
|
providing the base of number when getting string representation.
|
|
|
|
\section parser_helper__notes Notes
|
|
|
|
All functions within this helper are implementated by standard library functions.
|
|
These functions just make a good wrapper for complex standard library functions.
|
|
And give you a experience like C\# parser functions.
|
|
|
|
Basically, all functions located in this helper have possibility to throw exception.
|
|
But this possibility are more close to the possibility that \c new statement throw \c std::bad_alloc.
|
|
So in most cases you can assume these functions will not throw any exception.
|
|
|
|
All functions are template functions.
|
|
The argument of template is the type these functions need to be processed.
|
|
Although C++ have \e smart template type deduction,
|
|
it would be better to specify template argument manually to explicitly specify your desired type.
|
|
|
|
*/
|
|
} |