Add nullifyNanAndInf parameter to FBCxxUtils
Summary: There was an issue with syncing our internal files to github. A change was made in the utils that wasn't synced out, despite the sonar code using the new API. This brings the util update to github, while I fix the syncing issue. After that there will be a single source of truth so no more sync issues like this can occur. Reviewed By: priteshrnandgaonkar Differential Revision: D8541128 fbshipit-source-id: d8509b65035569c4ee9707e5d7eab99fa325da88
This commit is contained in:
committed by
Facebook Github Bot
parent
54fa6aa8f2
commit
94f03f182b
@@ -14,7 +14,7 @@
|
||||
namespace facebook {
|
||||
namespace cxxutils {
|
||||
|
||||
folly::dynamic convertIdToFollyDynamic(id json);
|
||||
folly::dynamic convertIdToFollyDynamic(id json, bool nullifyNanAndInf = false);
|
||||
id convertFollyDynamicToId(const folly::dynamic &dyn);
|
||||
|
||||
} }
|
||||
|
||||
@@ -45,7 +45,7 @@ id convertFollyDynamicToId(const folly::dynamic &dyn) {
|
||||
}
|
||||
}
|
||||
|
||||
folly::dynamic convertIdToFollyDynamic(id json)
|
||||
folly::dynamic convertIdToFollyDynamic(id json, bool nullifyNanAndInf)
|
||||
{
|
||||
if (json == nil || json == (id)kCFNull) {
|
||||
return nullptr;
|
||||
@@ -63,7 +63,11 @@ folly::dynamic convertIdToFollyDynamic(id json)
|
||||
if ([json isKindOfClass:[@YES class]]) {
|
||||
return (bool) [json boolValue];
|
||||
} else {
|
||||
return [json longLongValue];
|
||||
const auto value = [json longLongValue];
|
||||
if (nullifyNanAndInf && (isnan(value) || isinf(value))) {
|
||||
return nullptr;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
case _C_UCHR:
|
||||
case _C_SHT:
|
||||
@@ -73,12 +77,22 @@ folly::dynamic convertIdToFollyDynamic(id json)
|
||||
case _C_LNG:
|
||||
case _C_ULNG:
|
||||
case _C_LNG_LNG:
|
||||
case _C_ULNG_LNG:
|
||||
return [json longLongValue];
|
||||
case _C_ULNG_LNG: {
|
||||
const auto value = [json longLongValue];
|
||||
if (nullifyNanAndInf && (isnan(value) || isinf(value))) {
|
||||
return nullptr;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
case _C_FLT:
|
||||
case _C_DBL:
|
||||
return [json doubleValue];
|
||||
case _C_DBL: {
|
||||
const auto value = [json doubleValue];
|
||||
if (nullifyNanAndInf && (isnan(value) || isinf(value))) {
|
||||
return nullptr;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
// default:
|
||||
// fall through
|
||||
@@ -90,15 +104,15 @@ folly::dynamic convertIdToFollyDynamic(id json)
|
||||
} else if ([json isKindOfClass:[NSArray class]]) {
|
||||
folly::dynamic array = folly::dynamic::array;
|
||||
for (id element in json) {
|
||||
array.push_back(convertIdToFollyDynamic(element));
|
||||
array.push_back(convertIdToFollyDynamic(element, nullifyNanAndInf));
|
||||
}
|
||||
return array;
|
||||
} else if ([json isKindOfClass:[NSDictionary class]]) {
|
||||
__block folly::dynamic object = folly::dynamic::object();
|
||||
|
||||
[json enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, __unused BOOL *stop) {
|
||||
object.insert(convertIdToFollyDynamic(key),
|
||||
convertIdToFollyDynamic(value));
|
||||
object.insert(convertIdToFollyDynamic(key, nullifyNanAndInf),
|
||||
convertIdToFollyDynamic(value, nullifyNanAndInf));
|
||||
}];
|
||||
|
||||
return object;
|
||||
|
||||
Reference in New Issue
Block a user