refactor
This commit is contained in:
parent
48982e3478
commit
8950f4ecd5
@ -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_
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -352,3 +352,11 @@ Value::~Value() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Value Value::of(number_u value) {
|
||||
if (std::holds_alternative<integer_t>(value)) {
|
||||
return Value(valtype::integer, std::get<integer_t>(value));
|
||||
} else {
|
||||
return Value(valtype::number, std::get<number_t>(value));
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,9 +13,6 @@ namespace dynamic {
|
||||
class List;
|
||||
class Value;
|
||||
|
||||
using number_t = double;
|
||||
using integer_t = int64_t;
|
||||
|
||||
enum class valtype {
|
||||
none, map, list, number, integer, string, boolean
|
||||
};
|
||||
@ -35,6 +32,8 @@ namespace dynamic {
|
||||
valvalue value;
|
||||
Value(valtype type, valvalue value);
|
||||
~Value();
|
||||
|
||||
static Value of(number_u value);
|
||||
};
|
||||
|
||||
class List {
|
||||
|
||||
@ -19,26 +19,8 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) {
|
||||
map.emplace("camera.sensitivity", &settings.camera.sensitivity);
|
||||
}
|
||||
|
||||
dynamic::Value SettingsHandler::getValue(std::string name) const {
|
||||
using dynamic::valtype;
|
||||
|
||||
auto found = map.find(name);
|
||||
if (found == map.end()) {
|
||||
return dynamic::Value(valtype::none, 0);
|
||||
}
|
||||
auto setting = found->second;
|
||||
if (auto number = dynamic_cast<NumberSetting<float>*>(setting)) {
|
||||
return dynamic::Value(valtype::number, number->get());
|
||||
} else if (auto number = dynamic_cast<NumberSetting<double>*>(setting)) {
|
||||
return dynamic::Value(valtype::number, number->get());
|
||||
}
|
||||
|
||||
return dynamic::Value(valtype::none, 0);
|
||||
}
|
||||
|
||||
|
||||
toml::Wrapper* create_wrapper(EngineSettings& settings) {
|
||||
std::unique_ptr<toml::Wrapper> wrapper (new toml::Wrapper());
|
||||
auto wrapper = std::make_unique<toml::Wrapper>();
|
||||
|
||||
toml::Section& audio = wrapper->add("audio");
|
||||
audio.add("enabled", &settings.audio.enabled);
|
||||
|
||||
@ -15,7 +15,8 @@ class SettingsHandler {
|
||||
public:
|
||||
SettingsHandler(EngineSettings& settings);
|
||||
|
||||
dynamic::Value getValue(std::string name) const;
|
||||
dynamic::Value getValue(const std::string& name) const;
|
||||
void setValue(const std::string& name, dynamic::Value value);
|
||||
};
|
||||
|
||||
extern std::string write_controls();
|
||||
|
||||
@ -3,10 +3,19 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <variant>
|
||||
|
||||
|
||||
/// @brief dynamic integer type (64 bit signed integer)
|
||||
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;
|
||||
|
||||
// use for bytes arrays
|
||||
/// @brief use for bytes arrays
|
||||
using ubyte = uint8_t;
|
||||
|
||||
// content indices
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user