Commit 5e292cfff7b107cec7616faeab713ef861c0f3e2
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.
Showing
3 changed files
with
20 additions
and
20 deletions
include/qpdf/QPDF.hh
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 | { | ... | ... |