number_u deleted

This commit is contained in:
MihailRis 2024-05-07 18:50:36 +03:00
parent a4c21984d5
commit f2cdd3c4b6
5 changed files with 17 additions and 46 deletions

View File

@ -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) {

View File

@ -1,6 +1,7 @@
#ifndef CODERS_COMMONS_HPP_
#define CODERS_COMMONS_HPP_
#include "../data/dynamic.hpp"
#include "../typedefs.hpp"
#include <string>
@ -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);

View File

@ -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<integer_t>(num);
} else {
return std::get<number_t>(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<integer_t>(num);
} else {
return std::get<number_t>(num);
}
return parseNumber(1);
}
if (next == '"' || next == '\'') {
pos++;

View File

@ -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<integer_t>(num)) {
handler.setValue(name, std::get<integer_t>(num));
} else {
handler.setValue(name, std::get<number_t>(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<integer_t>(num)) {
handler.setValue(name, std::get<integer_t>(num));
} else {
handler.setValue(name, std::get<number_t>(num));
}
handler.setValue(name, num);
}
} else if (is_identifier_start(c)) {
std::string identifier = parseName();

View File

@ -13,8 +13,6 @@ using observer_handler = std::shared_ptr<int>;
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<integer_t, number_t>;
using uint = unsigned int;