diff --git a/revision.txt b/revision.txt index 1e8b314..7f8f011 100644 --- a/revision.txt +++ b/revision.txt @@ -1 +1 @@ -6 +7 diff --git a/src/JsonDecoder.cpp b/src/JsonDecoder.cpp index 5d97b98..3912949 100644 --- a/src/JsonDecoder.cpp +++ b/src/JsonDecoder.cpp @@ -718,23 +718,19 @@ void JsonDecoder::decodeNumber(const std::string& json, uint32_t& pos, PVariable else if(exponent > 308) exponent = 308; value->floatValue = (exponent >= 0) ? value->floatValue * Math::Pow10(exponent) : value->floatValue / Math::Pow10(-exponent); if(minus) value->floatValue *= -1; - value->integerValue = std::lround(value->floatValue); value->integerValue64 = std::llround(value->floatValue); + value->integerValue = std::lround(value->floatValue); } else { if(value->type == VariableType::tInteger && (number > 2147483647 || number < -2147483648)) { value->type = VariableType::tInteger64; - value->integerValue64 = minus ? -number : number; - value->floatValue = value->integerValue64; - } - else - { - value->integerValue = minus ? -number : number; - value->integerValue64 = value->integerValue; - value->floatValue = value->integerValue; } + + value->integerValue64 = minus ? -number : number; + value->integerValue = value->integerValue64; + value->floatValue = value->integerValue64; } } @@ -847,12 +843,19 @@ void JsonDecoder::decodeNumber(const std::vector& json, uint32_t& pos, PVa else if(exponent > 308) exponent = 308; value->floatValue = (exponent >= 0) ? value->floatValue * Math::Pow10(exponent) : value->floatValue / Math::Pow10(-exponent); if(minus) value->floatValue *= -1; + value->integerValue64 = std::llround(value->floatValue); value->integerValue = std::lround(value->floatValue); } else { - value->integerValue = minus ? -number : number; - value->floatValue = value->integerValue; + if(value->type == VariableType::tInteger && (number > 2147483647 || number < -2147483648)) + { + value->type = VariableType::tInteger64; + } + + value->integerValue64 = minus ? -number : number; + value->integerValue = value->integerValue64; + value->floatValue = value->integerValue64; } } diff --git a/src/Variable.h b/src/Variable.h index 33bd31a..49694d7 100755 --- a/src/Variable.h +++ b/src/Variable.h @@ -93,10 +93,10 @@ class Variable Variable() { type = VariableType::tVoid; arrayValue = PArray(new Array()); structValue = PStruct(new Struct()); } Variable(Variable const& rhs); Variable(VariableType variableType) : Variable() { type = variableType; if(type == VariableType::tVariant) type = VariableType::tVoid; } - Variable(uint8_t integer) : Variable() { type = VariableType::tInteger; integerValue = (int32_t)integer; } - Variable(int32_t integer) : Variable() { type = VariableType::tInteger; integerValue = integer; integerValue64 = integer; } - Variable(uint32_t integer) : Variable() { type = VariableType::tInteger; integerValue = (int32_t)integer; integerValue64 = integer; } - Variable(int64_t integer) : Variable() { type = VariableType::tInteger64; integerValue = (int32_t)integer; integerValue64 = integer; } + Variable(uint8_t integer) : Variable() { type = VariableType::tInteger; integerValue = (int32_t)integer; integerValue64 = (int64_t)integer; } + Variable(int32_t integer) : Variable() { type = VariableType::tInteger; integerValue = (int32_t)integer; integerValue64 = (int64_t)integer; } + Variable(uint32_t integer) : Variable() { type = VariableType::tInteger; integerValue = (int32_t)integer; integerValue64 = (int64_t)integer; } + Variable(int64_t integer) : Variable() { type = VariableType::tInteger64; integerValue = (int32_t)integer; integerValue64 = (int64_t)integer; } Variable(uint64_t integer) : Variable() { type = VariableType::tInteger64; integerValue = (int32_t)integer; integerValue64 = (int64_t)integer; } Variable(std::string string) : Variable() { type = VariableType::tString; stringValue = string; } Variable(const char* string) : Variable() { type = VariableType::tString; stringValue = std::string(string); }