Skip to content

Commit 3b416b0

Browse files
committed
optimize JsonWriter::validate #1171
1 parent b8cb888 commit 3b416b0

File tree

1 file changed

+21
-25
lines changed

1 file changed

+21
-25
lines changed

src/lib_json/json_writer.cpp

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1198,34 +1198,30 @@ StreamWriter* StreamWriterBuilder::newStreamWriter() const {
11981198
endingLineFeedSymbol, usf, emitUTF8, pre,
11991199
precisionType);
12001200
}
1201-
static void getValidWriterKeys(std::set<String>* valid_keys) {
1202-
valid_keys->clear();
1203-
valid_keys->insert("indentation");
1204-
valid_keys->insert("commentStyle");
1205-
valid_keys->insert("enableYAMLCompatibility");
1206-
valid_keys->insert("dropNullPlaceholders");
1207-
valid_keys->insert("useSpecialFloats");
1208-
valid_keys->insert("emitUTF8");
1209-
valid_keys->insert("precision");
1210-
valid_keys->insert("precisionType");
1211-
}
1201+
12121202
bool StreamWriterBuilder::validate(Json::Value* invalid) const {
1213-
Json::Value my_invalid;
1214-
if (!invalid)
1215-
invalid = &my_invalid; // so we do not need to test for NULL
1216-
Json::Value& inv = *invalid;
1217-
std::set<String> valid_keys;
1218-
getValidWriterKeys(&valid_keys);
1219-
Value::Members keys = settings_.getMemberNames();
1220-
size_t n = keys.size();
1221-
for (size_t i = 0; i < n; ++i) {
1222-
String const& key = keys[i];
1223-
if (valid_keys.find(key) == valid_keys.end()) {
1224-
inv[key] = settings_[key];
1225-
}
1203+
static const auto& valid_keys = *new std::set<String>{
1204+
"indentation",
1205+
"commentStyle",
1206+
"enableYAMLCompatibility",
1207+
"dropNullPlaceholders",
1208+
"useSpecialFloats",
1209+
"emitUTF8",
1210+
"precision",
1211+
"precisionType",
1212+
};
1213+
for (auto si = settings_.begin(); si != settings_.end(); ++si) {
1214+
auto key = si.name();
1215+
if (valid_keys.count(key))
1216+
continue;
1217+
if (invalid)
1218+
(*invalid)[std::move(key)] = *si;
1219+
else
1220+
return false;
12261221
}
1227-
return inv.empty();
1222+
return invalid ? invalid->empty() : true;
12281223
}
1224+
12291225
Value& StreamWriterBuilder::operator[](const String& key) {
12301226
return settings_[key];
12311227
}

0 commit comments

Comments
 (0)