Commit 5e292cfff7b107cec7616faeab713ef861c0f3e2

Authored by m-holger
1 parent 0be4a8e7

Move `Resolver` to `QPDF::Doc` and update references

Relocate `Resolver` to `QPDF::Doc` for improved encapsulation of resolution logic. Adjust all references accordingly to use the new placement.
include/qpdf/QPDF.hh
... ... @@ -791,7 +791,6 @@ class QPDF
791 791  
792 792 class Doc;
793 793 class Writer;
794   - class Resolver;
795 794 class StreamCopier;
796 795 class Pipe;
797 796 class JobSetter;
... ...
libqpdf/qpdf/QPDFObjectHandle_private.hh
... ... @@ -577,7 +577,7 @@ namespace qpdf
577 577 return &std::get<T>(obj->value);
578 578 }
579 579 if (std::holds_alternative<QPDF_Unresolved>(obj->value)) {
580   - return BaseHandle(QPDF::Resolver::resolved(obj->qpdf, obj->og)).as<T>();
  580 + return BaseHandle(QPDF::Doc::Resolver::resolved(obj->qpdf, obj->og)).as<T>();
581 581 }
582 582 if (std::holds_alternative<QPDF_Reference>(obj->value)) {
583 583 // see comment in QPDF_Reference.
... ... @@ -676,7 +676,7 @@ namespace qpdf
676 676 return ::ot_uninitialized;
677 677 }
678 678 if (raw_type_code() == ::ot_unresolved) {
679   - return QPDF::Resolver::resolved(obj->qpdf, obj->og)->getTypeCode();
  679 + return QPDF::Doc::Resolver::resolved(obj->qpdf, obj->og)->getTypeCode();
680 680 }
681 681 return raw_type_code();
682 682 }
... ... @@ -688,7 +688,7 @@ namespace qpdf
688 688 return ::ot_uninitialized;
689 689 }
690 690 if (raw_type_code() == ::ot_unresolved) {
691   - return QPDF::Resolver::resolved(obj->qpdf, obj->og)->getTypeCode();
  691 + return QPDF::Doc::Resolver::resolved(obj->qpdf, obj->og)->getTypeCode();
692 692 }
693 693 if (raw_type_code() == ::ot_reference) {
694 694 return std::get<QPDF_Reference>(obj->value).obj->getTypeCode();
... ... @@ -728,7 +728,7 @@ inline qpdf_object_type_e
728 728 QPDFObject::getResolvedTypeCode() const
729 729 {
730 730 if (getTypeCode() == ::ot_unresolved) {
731   - return QPDF::Resolver::resolved(qpdf, og)->getTypeCode();
  731 + return QPDF::Doc::Resolver::resolved(qpdf, og)->getTypeCode();
732 732 }
733 733 if (getTypeCode() == ::ot_reference) {
734 734 return std::get<QPDF_Reference>(value).obj->getTypeCode();
... ...
libqpdf/qpdf/QPDF_private.hh
... ... @@ -13,21 +13,6 @@
13 13  
14 14 using namespace qpdf;
15 15  
16   -// The Resolver class is restricted to QPDFObject so that only it can resolve indirect
17   -// references.
18   -class QPDF::Resolver
19   -{
20   - friend class QPDFObject;
21   - friend class qpdf::BaseHandle;
22   -
23   - private:
24   - static std::shared_ptr<QPDFObject> const&
25   - resolved(QPDF* qpdf, QPDFObjGen og)
26   - {
27   - return qpdf->resolve(og);
28   - }
29   -};
30   -
31 16 // StreamCopier class is restricted to QPDFObjectHandle so it can copy stream data.
32 17 class QPDF::StreamCopier
33 18 {
... ... @@ -383,6 +368,7 @@ class QPDF::Doc
383 368 {
384 369 public:
385 370 class ParseGuard;
  371 + class Resolver;
386 372  
387 373 Doc() = delete;
388 374 Doc(Doc const&) = delete;
... ... @@ -540,6 +526,21 @@ class QPDF::Members
540 526 std::map<QPDFObjGen, std::set<ObjUser>> object_to_obj_users;
541 527 };
542 528  
  529 +// The Resolver class is restricted to QPDFObject and BaseHandle so that only it can resolve
  530 +// indirect references.
  531 +class QPDF::Doc::Resolver
  532 +{
  533 + friend class QPDFObject;
  534 + friend class qpdf::BaseHandle;
  535 +
  536 + private:
  537 + static std::shared_ptr<QPDFObject> const&
  538 + resolved(QPDF* qpdf, QPDFObjGen og)
  539 + {
  540 + return qpdf->resolve(og);
  541 + }
  542 +};
  543 +
543 544 // JobSetter class is restricted to QPDFJob.
544 545 class QPDF::JobSetter
545 546 {
... ...