提交 f7df408a 编写于 作者: C Christopher Dunn 提交者: GitHub

Merge pull request #593 from AlB80/master

Optimize Value::isIntegral() method
...@@ -1360,11 +1360,23 @@ bool Value::isUInt64() const { ...@@ -1360,11 +1360,23 @@ bool Value::isUInt64() const {
} }
bool Value::isIntegral() const { bool Value::isIntegral() const {
switch (type_) {
case intValue:
case uintValue:
return true;
case realValue:
#if defined(JSON_HAS_INT64) #if defined(JSON_HAS_INT64)
return isInt64() || isUInt64(); // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
// double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
// require the value to be strictly less than the limit.
return value_.real_ >= double(minInt64) && value_.real_ < maxUInt64AsDouble && IsIntegral(value_.real_);
#else #else
return isInt() || isUInt(); return value_.real_ >= minInt && value_.real_ <= maxUInt && IsIntegral(value_.real_);
#endif #endif // JSON_HAS_INT64
default:
break;
}
return false;
} }
bool Value::isDouble() const { return type_ == intValue || type_ == uintValue || type_ == realValue; } bool Value::isDouble() const { return type_ == intValue || type_ == uintValue || type_ == realValue; }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册