1
0
Fork 0

Change: ParseInteger now checks for trailing junk chars.

pull/14161/head
frosch 2025-04-29 13:36:03 +02:00 committed by frosch
parent 79b2202f2e
commit 3973199879
2 changed files with 19 additions and 12 deletions

View File

@ -71,18 +71,6 @@ static IntervalTimer<TimerGameCalendar> _scheduled_monthly_timer = {{TimerGameCa
IConsoleCmdExec(fmt::format("exec {}", filename)); IConsoleCmdExec(fmt::format("exec {}", filename));
}}; }};
/**
* Change a string into its number representation. Supports decimal and hexadecimal numbers.
* @param arg The string to be converted.
* @param base The base for parsing the number, defaults to only decimal numbers. Use 0 to also allow hexadecimal.
* @return The number, or std::nullopt when it could not be parsed.
*/
static std::optional<uint32_t> ParseInteger(std::string_view arg, int base = 10)
{
return StringConsumer{arg}.TryReadIntegerBase<uint32_t>(base);
}
/** /**
* Parse an integer using #ParseInteger and convert it to the requested type. * Parse an integer using #ParseInteger and convert it to the requested type.
* @param arg The string to be converted. * @param arg The string to be converted.

View File

@ -892,4 +892,23 @@ public:
void SkipIntegerBase(int base); void SkipIntegerBase(int base);
}; };
/**
* Change a string into its number representation.
* Supports decimal and hexadecimal numbers.
* Accepts leading and trailing whitespace. Trailing junk is an error.
* @param arg The string to be converted.
* @param base The base for parsing the number, defaults to only decimal numbers. Use 0 to also allow hexadecimal.
* @return The number, or std::nullopt if it could not be parsed.
*/
template <class T = uint32_t>
static inline std::optional<T> ParseInteger(std::string_view arg, int base = 10)
{
StringConsumer consumer{arg};
consumer.SkipUntilCharNotIn(StringConsumer::WHITESPACE_NO_NEWLINE);
auto result = consumer.TryReadIntegerBase<T>(base);
consumer.SkipUntilCharNotIn(StringConsumer::WHITESPACE_NO_NEWLINE);
if (consumer.AnyBytesLeft()) return std::nullopt;
return result;
}
#endif /* STRING_CONSUMER_HPP */ #endif /* STRING_CONSUMER_HPP */