diff --git a/src/coders/commons.cpp b/src/coders/commons.cpp index 2f700b57..ff86b5a3 100644 --- a/src/coders/commons.cpp +++ b/src/coders/commons.cpp @@ -212,27 +212,23 @@ int64_t BasicParser::parseSimpleInt(int base) { return value; } -bool BasicParser::parseNumber(int sign, number_u& out) { +dynamic::Value BasicParser::parseNumber(int sign) { char c = peek(); int base = 10; if (c == '0' && pos + 1 < source.length() && (base = is_box(source[pos+1])) != 10) { pos += 2; - out = parseSimpleInt(base); - return true; + return parseSimpleInt(base); } else if (c == 'i' && pos + 2 < source.length() && source[pos+1] == 'n' && source[pos+2] == 'f') { pos += 3; - out = INFINITY * sign; - return false; + return INFINITY * sign; } else if (c == 'n' && pos + 2 < source.length() && source[pos+1] == 'a' && source[pos+2] == 'n') { pos += 3; - out = NAN * sign; - return false; + return NAN * sign; } int64_t value = parseSimpleInt(base); if (!hasNext()) { - out = value * sign; - return true; + return value * sign; } c = source[pos]; if (c == 'e' || c == 'E') { @@ -244,8 +240,7 @@ bool BasicParser::parseNumber(int sign, number_u& out) { } else if (peek() == '+'){ pos++; } - out = sign * value * power(10.0, s * parseSimpleInt(10)); - return false; + return sign * value * power(10.0, s * parseSimpleInt(10)); } if (c == '.') { pos++; @@ -271,14 +266,11 @@ bool BasicParser::parseNumber(int sign, number_u& out) { } else if (peek() == '+'){ pos++; } - out = sign * dvalue * power(10.0, s * parseSimpleInt(10)); - return false; + return sign * dvalue * power(10.0, s * parseSimpleInt(10)); } - out = sign * dvalue; - return false; + return sign * dvalue; } - out = sign * value; - return true; + return sign * value; } std::string BasicParser::parseString(char quote, bool closeRequired) { diff --git a/src/coders/commons.hpp b/src/coders/commons.hpp index dc1998eb..afebda89 100644 --- a/src/coders/commons.hpp +++ b/src/coders/commons.hpp @@ -1,6 +1,7 @@ #ifndef CODERS_COMMONS_HPP_ #define CODERS_COMMONS_HPP_ +#include "../data/dynamic.hpp" #include "../typedefs.hpp" #include @@ -88,7 +89,7 @@ protected: void goBack(); int64_t parseSimpleInt(int base); - bool parseNumber(int sign, number_u& out); + dynamic::Value parseNumber(int sign); std::string parseString(char chr, bool closeRequired=true); parsing_error error(std::string message); diff --git a/src/coders/json.cpp b/src/coders/json.cpp index 376c5f13..36313314 100644 --- a/src/coders/json.cpp +++ b/src/coders/json.cpp @@ -195,12 +195,7 @@ Value Parser::parseValue() { char next = peek(); if (next == '-' || next == '+') { pos++; - number_u num; - if (parseNumber(next == '-' ? -1 : 1, num)) { - return std::get(num); - } else { - return std::get(num); - } + return parseNumber(next == '-' ? -1 : 1); } if (is_identifier_start(next)) { std::string literal = parseName(); @@ -222,12 +217,7 @@ Value Parser::parseValue() { return List_sptr(parseList().release()); } if (is_digit(next)) { - number_u num; - if (parseNumber(1, num)) { - return std::get(num); - } else { - return std::get(num); - } + return parseNumber(1); } if (next == '"' || next == '\'') { pos++; diff --git a/src/coders/toml.cpp b/src/coders/toml.cpp index 9bccdd8a..26bc5d17 100644 --- a/src/coders/toml.cpp +++ b/src/coders/toml.cpp @@ -44,26 +44,16 @@ class Reader : public BasicParser { expect('='); c = peek(); if (is_digit(c)) { - number_u num; - parseNumber(1, num); + auto num = parseNumber(1); if (handler.has(name)) { - if (std::holds_alternative(num)) { - handler.setValue(name, std::get(num)); - } else { - handler.setValue(name, std::get(num)); - } + handler.setValue(name, num); } } else if (c == '-' || c == '+') { int sign = c == '-' ? -1 : 1; pos++; - number_u num; - parseNumber(sign, num); + auto num = parseNumber(sign); if (handler.has(name)) { - if (std::holds_alternative(num)) { - handler.setValue(name, std::get(num)); - } else { - handler.setValue(name, std::get(num)); - } + handler.setValue(name, num); } } else if (is_identifier_start(c)) { std::string identifier = parseName(); diff --git a/src/typedefs.hpp b/src/typedefs.hpp index 23129fd6..655661fb 100644 --- a/src/typedefs.hpp +++ b/src/typedefs.hpp @@ -13,8 +13,6 @@ using observer_handler = std::shared_ptr; using integer_t = int64_t; /// @brief dynamic floating-point type (64 bit floating point) using number_t = double; -/// @brief dynamic numeric types union (integer and floating-point) -using number_u = std::variant; using uint = unsigned int;