@@ -1198,34 +1198,30 @@ StreamWriter* StreamWriterBuilder::newStreamWriter() const {
1198
1198
endingLineFeedSymbol, usf, emitUTF8, pre,
1199
1199
precisionType);
1200
1200
}
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
+
1212
1202
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 ;
1226
1221
}
1227
- return inv. empty ();
1222
+ return invalid ? invalid-> empty () : true ;
1228
1223
}
1224
+
1229
1225
Value& StreamWriterBuilder::operator [](const String& key) {
1230
1226
return settings_[key];
1231
1227
}
0 commit comments