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,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&amp; og) @@ -2183,9 +2183,8 @@ QPDF::getObject(QPDFObjGen const&amp; 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