This commit is contained in:
MihailRis
2024-03-31 23:05:38 +03:00
parent 48982e3478
commit 8950f4ecd5
9 changed files with 40 additions and 46 deletions
+8 -8
View File
@@ -231,20 +231,20 @@ bool BasicParser::parseNumber(int sign, number_u& out) {
if (c == '0' && pos + 1 < source.length() &&
(base = is_box(source[pos+1])) != 10) {
pos += 2;
out.ival = parseSimpleInt(base);
out = parseSimpleInt(base);
return true;
} else if (c == 'i' && pos + 2 < source.length() && source[pos+1] == 'n' && source[pos+2] == 'f') {
pos += 3;
out.fval = INFINITY * sign;
out = INFINITY * sign;
return false;
} else if (c == 'n' && pos + 2 < source.length() && source[pos+1] == 'a' && source[pos+2] == 'n') {
pos += 3;
out.fval = NAN * sign;
out = NAN * sign;
return false;
}
int64_t value = parseSimpleInt(base);
if (!hasNext()) {
out.ival = value * sign;
out = value * sign;
return true;
}
c = source[pos];
@@ -257,7 +257,7 @@ bool BasicParser::parseNumber(int sign, number_u& out) {
} else if (peek() == '+'){
pos++;
}
out.fval = sign * value * power(10.0, s * parseSimpleInt(10));
out = sign * value * power(10.0, s * parseSimpleInt(10));
return false;
}
if (c == '.') {
@@ -284,13 +284,13 @@ bool BasicParser::parseNumber(int sign, number_u& out) {
} else if (peek() == '+'){
pos++;
}
out.fval = sign * dvalue * power(10.0, s * parseSimpleInt(10));
out = sign * dvalue * power(10.0, s * parseSimpleInt(10));
return false;
}
out.fval = sign * dvalue;
out = sign * dvalue;
return false;
}
out.ival = sign * value;
out = sign * value;
return true;
}
+1 -6
View File
@@ -5,11 +5,6 @@
#include <stdexcept>
#include "../typedefs.h"
union number_u {
double fval;
int64_t ival;
};
inline int is_box(int c) {
switch (c) {
case 'B':
@@ -105,4 +100,4 @@ protected:
BasicParser(std::string filename, std::string source);
};
#endif // CODERS_COMMONS_H_
#endif // CODERS_COMMONS_H_
+4 -4
View File
@@ -190,10 +190,10 @@ Value* Parser::parseValue() {
number_u num;
valtype type;
if (parseNumber(next == '-' ? -1 : 1, num)) {
val = num.ival;
val = std::get<integer_t>(num);
type = valtype::integer;
} else {
val = num.fval;
val = std::get<number_t>(num);
type = valtype::number;
}
return new Value(type, val);
@@ -227,10 +227,10 @@ Value* Parser::parseValue() {
number_u num;
valtype type;
if (parseNumber(1, num)) {
val = num.ival;
val = std::get<integer_t>(num);
type = valtype::integer;
} else {
val = num.fval;
val = std::get<number_t>(num);
type = valtype::number;
}
return new Value(type, val);
+4 -4
View File
@@ -206,10 +206,10 @@ void Reader::readSection(Section* section /*nullable*/) {
number_u num;
if (parseNumber(1, num)) {
if (section)
section->set(name, (double)num.ival);
section->set(name, (double)std::get<integer_t>(num));
} else {
if (section)
section->set(name, num.fval);
section->set(name, std::get<number_t>(num));
}
} else if (c == '-' || c == '+') {
int sign = c == '-' ? -1 : 1;
@@ -217,10 +217,10 @@ void Reader::readSection(Section* section /*nullable*/) {
number_u num;
if (parseNumber(sign, num)) {
if (section)
section->set(name, (double)num.ival);
section->set(name, (double)std::get<integer_t>(num));
} else {
if (section)
section->set(name, num.fval);
section->set(name, std::get<number_t>(num));
}
} else if (is_identifier_start(c)) {
string identifier = parseName();