Commit 906034d9b38dd74b06f0609fa95eb51a54dd705d

Authored by m-holger
1 parent 08d49887

Refactor `QPDFObjectHandle`: replace `getObj` with `BaseHandle::obj_sp` for impr…

…oved shared pointer handling, remove deprecated object methods, and update all references.
include/qpdf/ObjectHandle.hh
... ... @@ -105,6 +105,9 @@ namespace qpdf
105 105 void warn(QPDFExc&&) const;
106 106 void warn(std::string const& warning) const;
107 107  
  108 + inline std::shared_ptr<QPDFObject> const& obj_sp() const;
  109 + inline QPDFObjectHandle oh() const;
  110 +
108 111 protected:
109 112 BaseHandle() = default;
110 113 BaseHandle(std::shared_ptr<QPDFObject> const& obj) :
... ...
include/qpdf/QPDFObjectHandle.hh
... ... @@ -1321,21 +1321,6 @@ class QPDFObjectHandle: public qpdf::BaseHandle
1321 1321 {
1322 1322 return obj;
1323 1323 }
1324   - std::shared_ptr<QPDFObject>
1325   - getObj() const
1326   - {
1327   - return obj;
1328   - }
1329   - QPDFObject*
1330   - getObjectPtr()
1331   - {
1332   - return obj.get();
1333   - }
1334   - QPDFObject* const
1335   - getObjectPtr() const
1336   - {
1337   - return obj.get();
1338   - }
1339 1324  
1340 1325 void writeJSON(int json_version, JSON::Writer& p, bool dereference_indirect = false) const;
1341 1326  
... ...
libqpdf/QPDFFormFieldObjectHelper.cc
... ... @@ -765,7 +765,7 @@ QPDFFormFieldObjectHelper::generateTextAppearance(QPDFAnnotationObjectHelper&amp; ao
765 765 return;
766 766 }
767 767  
768   - if (AS.getObj().use_count() > 4) {
  768 + if (AS.obj_sp().use_count() > 3) {
769 769 aoh.warn("unable to generate text appearance from shared appearance stream for update");
770 770 return;
771 771 }
... ...
libqpdf/QPDFObjectHandle.cc
... ... @@ -318,7 +318,7 @@ BaseHandle::copy(bool shallow) const
318 318 throw std::logic_error("attempted to shallow copy QPDFObjectHandle from destroyed QPDF");
319 319 return {}; // does not return
320 320 case ::ot_reference:
321   - return obj->qpdf->getObject(obj->og).getObj();
  321 + return obj->qpdf->getObject(obj->og).obj_sp();
322 322 }
323 323 return {}; // unreachable
324 324 }
... ... @@ -470,7 +470,7 @@ BaseHandle::write_json(int json_version, JSON::Writer&amp; p) const
470 470 p.writeNext() << "null";
471 471 }
472 472 p.writeNext();
473   - auto item_og = value.getObj()->getObjGen();
  473 + auto item_og = value.id_gen();
474 474 if (item_og.isIndirect()) {
475 475 p << "\"" << item_og.unparse(' ') << " R\"";
476 476 } else {
... ...
libqpdf/QPDFParser.cc
... ... @@ -626,8 +626,8 @@ QPDFParser::fixMissingKeys()
626 626 {
627 627 std::set<std::string> names;
628 628 for (auto& obj: frame->olist) {
629   - if (obj.getObj()->getTypeCode() == ::ot_name) {
630   - names.insert(obj.getObj()->getStringValue());
  629 + if (obj.raw_type_code() == ::ot_name) {
  630 + names.insert(obj.obj_sp()->getStringValue());
631 631 }
632 632 }
633 633 int next_fake_key = 1;
... ...
libqpdf/QPDF_json.cc
... ... @@ -693,7 +693,7 @@ QPDF::JSONReactor::setObjectDescription(QPDFObjectHandle&amp; oh, JSON const&amp; value)
693 693 QPDFObject::JSON_Descr(j_descr.input, cur_object));
694 694 }
695 695  
696   - oh.getObjectPtr()->setDescription(&pdf, descr, value.getStart());
  696 + oh.obj_sp()->setDescription(&pdf, descr, value.getStart());
697 697 }
698 698  
699 699 QPDFObjectHandle
... ...
libqpdf/QPDF_objects.cc
... ... @@ -1554,7 +1554,7 @@ Objects::readObjectAtOffset(
1554 1554 break;
1555 1555 }
1556 1556 }
1557   - m->objects.updateCache(og, oh.getObj(), end_before_space, m->file->tell());
  1557 + m->objects.updateCache(og, oh.obj_sp(), end_before_space, m->file->tell());
1558 1558 }
1559 1559  
1560 1560 QPDFObjectHandle
... ... @@ -1613,7 +1613,7 @@ Objects::readObjectAtOffset(
1613 1613 break;
1614 1614 }
1615 1615 }
1616   - m->objects.updateCache(og, oh.getObj(), end_before_space, m->file->tell());
  1616 + m->objects.updateCache(og, oh.obj_sp(), end_before_space, m->file->tell());
1617 1617  
1618 1618 return oh;
1619 1619 }
... ... @@ -1805,7 +1805,7 @@ Objects::resolveObjectsInStream(int obj_stream_number)
1805 1805 entry->second.getObjStreamNumber() == obj_stream_number) {
1806 1806 is::OffsetBuffer in("", {b_start + obj_offset, obj_size}, obj_offset);
1807 1807 auto oh = readObjectInStream(in, obj_stream_number, obj_id);
1808   - updateCache(og, oh.getObj(), end_before_space, end_after_space);
  1808 + updateCache(og, oh.obj_sp(), end_before_space, end_after_space);
1809 1809 } else {
1810 1810 QTC::TC("qpdf", "QPDF not caching overridden objstm object");
1811 1811 }
... ... @@ -1874,7 +1874,7 @@ QPDF::makeIndirectObject(QPDFObjectHandle oh)
1874 1874 if (!oh) {
1875 1875 throw std::logic_error("attempted to make an uninitialized QPDFObjectHandle indirect");
1876 1876 }
1877   - return m->objects.makeIndirectFromQPDFObject(oh.getObj());
  1877 + return m->objects.makeIndirectFromQPDFObject(oh.obj_sp());
1878 1878 }
1879 1879  
1880 1880 std::shared_ptr<QPDFObject>
... ... @@ -1935,7 +1935,7 @@ QPDF::replaceObject(QPDFObjGen og, QPDFObjectHandle oh)
1935 1935 if (!oh || (oh.isIndirect() && !(oh.isStream() && oh.getObjGen() == og))) {
1936 1936 throw std::logic_error("QPDF::replaceObject called with indirect object handle");
1937 1937 }
1938   - m->objects.updateCache(og, oh.getObj(), -1, -1, false);
  1938 + m->objects.updateCache(og, oh.obj_sp(), -1, -1, false);
1939 1939 }
1940 1940  
1941 1941 void
... ...
libqpdf/qpdf/QPDFObjectHandle_private.hh
... ... @@ -621,6 +621,18 @@ namespace qpdf
621 621 {
622 622 }
623 623  
  624 + inline std::shared_ptr<QPDFObject> const&
  625 + BaseHandle::obj_sp() const
  626 + {
  627 + return obj;
  628 + }
  629 +
  630 + inline QPDFObjectHandle
  631 + BaseHandle::oh() const
  632 + {
  633 + return {obj};
  634 + }
  635 +
624 636 inline void
625 637 BaseHandle::assign(qpdf_object_type_e required, BaseHandle const& other)
626 638 {
... ...