addition in cooldown parsing logic

This commit is contained in:
jorenchik
2024-11-30 21:40:47 +02:00
parent 430ad46483
commit 7b2d9c6ec0

View File

@@ -3,6 +3,8 @@
#include <exception> #include <exception>
#include <iomanip> #include <iomanip>
#include <iostream> #include <iostream>
#include <regex>
#include <stdexcept>
#include <string> #include <string>
#include <vector> #include <vector>
#include <map> #include <map>
@@ -192,10 +194,23 @@ Result<ParseInfo> parseQuestions(const std::vector<Token>& tokens) {
// Apstrādā pārtraukumu, ja tāds ir. // Apstrādā pārtraukumu, ja tāds ir.
if (isInBounds(i + 1) && tokens[i + 1].tokenType == TokenType::CooldownStart) { if (isInBounds(i + 1) && tokens[i + 1].tokenType == TokenType::CooldownStart) {
try { try {
cooldown = std::stod(tokens[i + 2].content); auto cooldownContent = tokens[i + 2].content;
// Pārbauda, vai dotais pārtraukums ir viens skaitlis, kas ir:
// - pozitīvs;
// - viens no: vesels skaitlis vai ar punktu atdalīts skatilis
// ar norādīto vai bez norādītās veselās daļas.
static const std::regex decimalNumExp(
"^\\d*(\\.\\d+)?$",
std::regex_constants::ECMAScript | std::regex_constants::icase
);
if (!std::regex_match(cooldownContent, decimalNumExp)) {
throw std::invalid_argument("Nekorekts pārtraukuma formāts");
}
cooldown = std::stod(cooldownContent);
} catch (std::exception e) { } catch (std::exception e) {
return makeResult( return makeResult(
"Kļūda nolasot pārtraukumu", "Nekorekts pārtraukums. Pārtraukums ir viens pozitīvs "
"decimāls skaitlis ar punktu vai bez punkta",
tokens[i + 1] tokens[i + 1]
); );
} }