refactor
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user