Commit 6a5992763677b55620e823e0859c166209dad7f8

Authored by m-holger
1 parent eda40d87

In JSON::checkSchemaInternal refactor: Modernize loop structures and error handling

Replaced manual key-value access with structured bindings in loops for better readability and modern C++ practices. Simplified error handling using `emplace_back` instead of `push_back`. Improved consistency and clarity in schema validation logic.
Showing 1 changed file with 13 additions and 16 deletions
libqpdf/JSON.cc
@@ -490,24 +490,22 @@ JSON::checkSchemaInternal( @@ -490,24 +490,22 @@ JSON::checkSchemaInternal(
490 } 490 }
491 } 491 }
492 492
493 - if (sch_dict && (!pattern_key.empty())) { 493 + if (sch_dict && !pattern_key.empty()) {
494 auto pattern_schema = sch_dict->members[pattern_key].m->value.get(); 494 auto pattern_schema = sch_dict->members[pattern_key].m->value.get();
495 - for (auto const& iter: this_dict->members) {  
496 - std::string const& key = iter.first; 495 + for (auto const& [key, val]: this_dict->members) {
497 checkSchemaInternal( 496 checkSchemaInternal(
498 - this_dict->members[key].m->value.get(), 497 + val.m->value.get(),
499 pattern_schema, 498 pattern_schema,
500 flags, 499 flags,
501 errors, 500 errors,
502 prefix + "." + key); 501 prefix + "." + key);
503 } 502 }
504 } else if (sch_dict) { 503 } else if (sch_dict) {
505 - for (auto& iter: sch_dict->members) {  
506 - std::string const& key = iter.first;  
507 - if (this_dict->members.count(key)) { 504 + for (auto& [key, val]: sch_dict->members) {
  505 + if (this_dict->members.contains(key)) {
508 checkSchemaInternal( 506 checkSchemaInternal(
509 this_dict->members[key].m->value.get(), 507 this_dict->members[key].m->value.get(),
510 - iter.second.m->value.get(), 508 + val.m->value.get(),
511 flags, 509 flags,
512 errors, 510 errors,
513 prefix + "." + key); 511 prefix + "." + key);
@@ -516,17 +514,16 @@ JSON::checkSchemaInternal( @@ -516,17 +514,16 @@ JSON::checkSchemaInternal(
516 QTC::TC("libtests", "JSON optional key"); 514 QTC::TC("libtests", "JSON optional key");
517 } else { 515 } else {
518 QTC::TC("libtests", "JSON key missing in object"); 516 QTC::TC("libtests", "JSON key missing in object");
519 - errors.push_back( 517 + errors.emplace_back(
520 err_prefix + ": key \"" + key + 518 err_prefix + ": key \"" + key +
521 "\" is present in schema but missing in object"); 519 "\" is present in schema but missing in object");
522 } 520 }
523 } 521 }
524 } 522 }
525 - for (auto const& iter: this_dict->members) {  
526 - std::string const& key = iter.first;  
527 - if (sch_dict->members.count(key) == 0) { 523 + for (auto const& [key, val]: this_dict->members) {
  524 + if (!sch_dict->members.contains(key)) {
528 QTC::TC("libtests", "JSON key extra in object"); 525 QTC::TC("libtests", "JSON key extra in object");
529 - errors.push_back( 526 + errors.emplace_back(
530 err_prefix + ": key \"" + key + 527 err_prefix + ": key \"" + key +
531 "\" is not present in schema but appears in object"); 528 "\" is not present in schema but appears in object");
532 } 529 }
@@ -554,9 +551,9 @@ JSON::checkSchemaInternal( @@ -554,9 +551,9 @@ JSON::checkSchemaInternal(
554 checkSchemaInternal( 551 checkSchemaInternal(
555 this_v, sch_arr->elements.at(0).m->value.get(), flags, errors, prefix); 552 this_v, sch_arr->elements.at(0).m->value.get(), flags, errors, prefix);
556 } 553 }
557 - } else if (!this_arr || (this_arr->elements.size() != n_elements)) { 554 + } else if (!this_arr || this_arr->elements.size() != n_elements) {
558 QTC::TC("libtests", "JSON schema array length mismatch"); 555 QTC::TC("libtests", "JSON schema array length mismatch");
559 - errors.push_back( 556 + errors.emplace_back(
560 err_prefix + " is supposed to be an array of length " + std::to_string(n_elements)); 557 err_prefix + " is supposed to be an array of length " + std::to_string(n_elements));
561 return false; 558 return false;
562 } else { 559 } else {
@@ -576,7 +573,7 @@ JSON::checkSchemaInternal( @@ -576,7 +573,7 @@ JSON::checkSchemaInternal(
576 } 573 }
577 } else if (!sch_str) { 574 } else if (!sch_str) {
578 QTC::TC("libtests", "JSON schema other type"); 575 QTC::TC("libtests", "JSON schema other type");
579 - errors.push_back(err_prefix + " schema value is not dictionary, array, or string"); 576 + errors.emplace_back(err_prefix + " schema value is not dictionary, array, or string");
580 return false; 577 return false;
581 } 578 }
582 579