number_u deleted
This commit is contained in:
parent
a4c21984d5
commit
f2cdd3c4b6
@ -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) {
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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++;
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user