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,6 +25,7 @@ | ||
| 25 | #include <qpdf/Constants.h> | 25 | #include <qpdf/Constants.h> |
| 26 | #include <qpdf/DLL.h> | 26 | #include <qpdf/DLL.h> |
| 27 | #include <qpdf/JSON.hh> | 27 | #include <qpdf/JSON.hh> |
| 28 | +#include <qpdf/QPDFObjGen.hh> | ||
| 28 | #include <qpdf/Types.h> | 29 | #include <qpdf/Types.h> |
| 29 | 30 | ||
| 30 | #include <string> | 31 | #include <string> |
| @@ -73,11 +74,21 @@ class QPDFValue | @@ -73,11 +74,21 @@ class QPDFValue | ||
| 73 | { | 74 | { |
| 74 | return parsed_offset; | 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 | protected: | 88 | protected: |
| 78 | QPDFValue() : | 89 | QPDFValue() : |
| 79 | type_code(::ot_uninitialized), | 90 | type_code(::ot_uninitialized), |
| 80 | - type_name("uninitilized") | 91 | + type_name("uninitialized") |
| 81 | { | 92 | { |
| 82 | } | 93 | } |
| 83 | QPDFValue(qpdf_object_type_e type_code, char const* type_name) : | 94 | QPDFValue(qpdf_object_type_e type_code, char const* type_name) : |
| @@ -85,7 +96,17 @@ class QPDFValue | @@ -85,7 +96,17 @@ class QPDFValue | ||
| 85 | type_name(type_name) | 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 | virtual void | 110 | virtual void |
| 90 | releaseResolved() | 111 | releaseResolved() |
| 91 | { | 112 | { |
| @@ -100,6 +121,10 @@ class QPDFValue | @@ -100,6 +121,10 @@ class QPDFValue | ||
| 100 | qpdf_offset_t parsed_offset{-1}; | 121 | qpdf_offset_t parsed_offset{-1}; |
| 101 | const qpdf_object_type_e type_code; | 122 | const qpdf_object_type_e type_code; |
| 102 | char const* type_name; | 123 | char const* type_name; |
| 124 | + | ||
| 125 | + protected: | ||
| 126 | + QPDF* qpdf{nullptr}; | ||
| 127 | + QPDFObjGen og; | ||
| 103 | }; | 128 | }; |
| 104 | 129 | ||
| 105 | #endif // QPDFVALUE_HH | 130 | #endif // QPDFVALUE_HH |
libqpdf/QPDF.cc
| @@ -2183,9 +2183,8 @@ QPDF::getObject(QPDFObjGen const& og) | @@ -2183,9 +2183,8 @@ QPDF::getObject(QPDFObjGen const& og) | ||
| 2183 | if (!og.isIndirect()) { | 2183 | if (!og.isIndirect()) { |
| 2184 | return QPDFObjectHandle::newNull(); | 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 | return newIndirect(og, m->obj_cache[og].object); | 2189 | return newIndirect(og, m->obj_cache[og].object); |
| 2191 | } | 2190 | } |
libqpdf/QPDF_Unresolved.cc
| @@ -2,21 +2,23 @@ | @@ -2,21 +2,23 @@ | ||
| 2 | 2 | ||
| 3 | #include <stdexcept> | 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 | std::shared_ptr<QPDFObject> | 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 | std::shared_ptr<QPDFObject> | 16 | std::shared_ptr<QPDFObject> |
| 17 | QPDF_Unresolved::shallowCopy() | 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 | std::string | 24 | std::string |
libqpdf/qpdf/QPDF_Unresolved.hh
| @@ -7,13 +7,13 @@ class QPDF_Unresolved: public QPDFValue | @@ -7,13 +7,13 @@ class QPDF_Unresolved: public QPDFValue | ||
| 7 | { | 7 | { |
| 8 | public: | 8 | public: |
| 9 | virtual ~QPDF_Unresolved() = default; | 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 | virtual std::shared_ptr<QPDFObject> shallowCopy(); | 11 | virtual std::shared_ptr<QPDFObject> shallowCopy(); |
| 12 | virtual std::string unparse(); | 12 | virtual std::string unparse(); |
| 13 | virtual JSON getJSON(int json_version); | 13 | virtual JSON getJSON(int json_version); |
| 14 | 14 | ||
| 15 | private: | 15 | private: |
| 16 | - QPDF_Unresolved(); | 16 | + QPDF_Unresolved(QPDF* qpdf, QPDFObjGen const& og); |
| 17 | }; | 17 | }; |
| 18 | 18 | ||
| 19 | #endif // QPDF_UNRESOLVED_HH | 19 | #endif // QPDF_UNRESOLVED_HH |