Commit 89061d5b33baa7e8f4e3486d0c7ccf2447500b13
1 parent
ae6e484e
Change QPDF_Unresolved::create method to take QPDF* and QPDFObjGen parameters
Showing
4 changed files
with
38 additions
and
12 deletions
include/qpdf/QPDFValue.hh
| ... | ... | @@ -25,6 +25,7 @@ |
| 25 | 25 | #include <qpdf/Constants.h> |
| 26 | 26 | #include <qpdf/DLL.h> |
| 27 | 27 | #include <qpdf/JSON.hh> |
| 28 | +#include <qpdf/QPDFObjGen.hh> | |
| 28 | 29 | #include <qpdf/Types.h> |
| 29 | 30 | |
| 30 | 31 | #include <string> |
| ... | ... | @@ -73,11 +74,21 @@ class QPDFValue |
| 73 | 74 | { |
| 74 | 75 | return parsed_offset; |
| 75 | 76 | } |
| 77 | + QPDF* | |
| 78 | + getQPDF() | |
| 79 | + { | |
| 80 | + return qpdf; | |
| 81 | + } | |
| 82 | + QPDFObjGen | |
| 83 | + getObjGen() | |
| 84 | + { | |
| 85 | + return og; | |
| 86 | + } | |
| 76 | 87 | |
| 77 | 88 | protected: |
| 78 | 89 | QPDFValue() : |
| 79 | 90 | type_code(::ot_uninitialized), |
| 80 | - type_name("uninitilized") | |
| 91 | + type_name("uninitialized") | |
| 81 | 92 | { |
| 82 | 93 | } |
| 83 | 94 | QPDFValue(qpdf_object_type_e type_code, char const* type_name) : |
| ... | ... | @@ -85,7 +96,17 @@ class QPDFValue |
| 85 | 96 | type_name(type_name) |
| 86 | 97 | { |
| 87 | 98 | } |
| 88 | - | |
| 99 | + QPDFValue( | |
| 100 | + qpdf_object_type_e type_code, | |
| 101 | + char const* type_name, | |
| 102 | + QPDF* qpdf, | |
| 103 | + QPDFObjGen const& og) : | |
| 104 | + type_code(type_code), | |
| 105 | + type_name(type_name), | |
| 106 | + qpdf(qpdf), | |
| 107 | + og(og) | |
| 108 | + { | |
| 109 | + } | |
| 89 | 110 | virtual void |
| 90 | 111 | releaseResolved() |
| 91 | 112 | { |
| ... | ... | @@ -100,6 +121,10 @@ class QPDFValue |
| 100 | 121 | qpdf_offset_t parsed_offset{-1}; |
| 101 | 122 | const qpdf_object_type_e type_code; |
| 102 | 123 | char const* type_name; |
| 124 | + | |
| 125 | + protected: | |
| 126 | + QPDF* qpdf{nullptr}; | |
| 127 | + QPDFObjGen og; | |
| 103 | 128 | }; |
| 104 | 129 | |
| 105 | 130 | #endif // QPDFVALUE_HH | ... | ... |
libqpdf/QPDF.cc
| ... | ... | @@ -2183,9 +2183,8 @@ QPDF::getObject(QPDFObjGen const& og) |
| 2183 | 2183 | if (!og.isIndirect()) { |
| 2184 | 2184 | return QPDFObjectHandle::newNull(); |
| 2185 | 2185 | } |
| 2186 | - // auto obj = (og.getObj() != 0) ? resolve(og) : QPDF_Null::create(); | |
| 2187 | - if (!m->obj_cache.count(og)) { | |
| 2188 | - m->obj_cache[og] = ObjCache(QPDF_Unresolved::create(), -1, -1); | |
| 2186 | + if (!isCached(og)) { | |
| 2187 | + m->obj_cache[og] = ObjCache(QPDF_Unresolved::create(this, og), -1, -1); | |
| 2189 | 2188 | } |
| 2190 | 2189 | return newIndirect(og, m->obj_cache[og].object); |
| 2191 | 2190 | } | ... | ... |
libqpdf/QPDF_Unresolved.cc
| ... | ... | @@ -2,21 +2,23 @@ |
| 2 | 2 | |
| 3 | 3 | #include <stdexcept> |
| 4 | 4 | |
| 5 | -QPDF_Unresolved::QPDF_Unresolved() : | |
| 6 | - QPDFValue(::ot_unresolved, "unresolved") | |
| 5 | +QPDF_Unresolved::QPDF_Unresolved(QPDF* qpdf, QPDFObjGen const& og) : | |
| 6 | + QPDFValue(::ot_unresolved, "unresolved", qpdf, og) | |
| 7 | 7 | { |
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | std::shared_ptr<QPDFObject> |
| 11 | -QPDF_Unresolved::create() | |
| 11 | +QPDF_Unresolved::create(QPDF* qpdf, QPDFObjGen const& og) | |
| 12 | 12 | { |
| 13 | - return do_create(new QPDF_Unresolved()); | |
| 13 | + return do_create(new QPDF_Unresolved(qpdf, og)); | |
| 14 | 14 | } |
| 15 | 15 | |
| 16 | 16 | std::shared_ptr<QPDFObject> |
| 17 | 17 | QPDF_Unresolved::shallowCopy() |
| 18 | 18 | { |
| 19 | - return create(); | |
| 19 | + throw std::logic_error( | |
| 20 | + "attempted to shallow copy unresolved QPDFObjectHandle"); | |
| 21 | + return create(qpdf, og); | |
| 20 | 22 | } |
| 21 | 23 | |
| 22 | 24 | std::string | ... | ... |
libqpdf/qpdf/QPDF_Unresolved.hh
| ... | ... | @@ -7,13 +7,13 @@ class QPDF_Unresolved: public QPDFValue |
| 7 | 7 | { |
| 8 | 8 | public: |
| 9 | 9 | virtual ~QPDF_Unresolved() = default; |
| 10 | - static std::shared_ptr<QPDFObject> create(); | |
| 10 | + static std::shared_ptr<QPDFObject> create(QPDF* qpdf, QPDFObjGen const& og); | |
| 11 | 11 | virtual std::shared_ptr<QPDFObject> shallowCopy(); |
| 12 | 12 | virtual std::string unparse(); |
| 13 | 13 | virtual JSON getJSON(int json_version); |
| 14 | 14 | |
| 15 | 15 | private: |
| 16 | - QPDF_Unresolved(); | |
| 16 | + QPDF_Unresolved(QPDF* qpdf, QPDFObjGen const& og); | |
| 17 | 17 | }; |
| 18 | 18 | |
| 19 | 19 | #endif // QPDF_UNRESOLVED_HH | ... | ... |