Commit 89061d5b33baa7e8f4e3486d0c7ccf2447500b13

Authored by m-holger
1 parent ae6e484e

Change QPDF_Unresolved::create method to take QPDF* and QPDFObjGen parameters

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&amp; 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
... ...