Commit d7b470761b3fe6895888f44c15655e880e5afaa0
Committed by
Jay Berkenbilt
1 parent
432f4174
Remove QPDFObjectHandle::Factory and ObjAccessor
Showing
2 changed files
with
13 additions
and
61 deletions
include/qpdf/QPDFObjectHandle.hh
| @@ -1490,49 +1490,6 @@ class QPDFObjectHandle | @@ -1490,49 +1490,6 @@ class QPDFObjectHandle | ||
| 1490 | QPDF_DLL | 1490 | QPDF_DLL |
| 1491 | void warnIfPossible(std::string const& warning); | 1491 | void warnIfPossible(std::string const& warning); |
| 1492 | 1492 | ||
| 1493 | - // Initializers for objects. This Factory class gives the QPDF | ||
| 1494 | - // class specific permission to call factory methods without | ||
| 1495 | - // making it a friend of the whole QPDFObjectHandle class. | ||
| 1496 | - class Factory | ||
| 1497 | - { | ||
| 1498 | - friend class QPDF; | ||
| 1499 | - | ||
| 1500 | - private: | ||
| 1501 | - static QPDFObjectHandle | ||
| 1502 | - newIndirect(std::shared_ptr<QPDFObject> const& obj) | ||
| 1503 | - { | ||
| 1504 | - return QPDFObjectHandle(obj); | ||
| 1505 | - } | ||
| 1506 | - }; | ||
| 1507 | - | ||
| 1508 | - // Accessor for raw underlying object -- only QPDF is allowed to | ||
| 1509 | - // call this. | ||
| 1510 | - class ObjAccessor | ||
| 1511 | - { | ||
| 1512 | - friend class QPDF; | ||
| 1513 | - | ||
| 1514 | - private: | ||
| 1515 | - static std::shared_ptr<QPDFObject> | ||
| 1516 | - getObject(QPDFObjectHandle& o) | ||
| 1517 | - { | ||
| 1518 | - if (!o.dereference()) { | ||
| 1519 | - throw std::logic_error("attempted to dereference an" | ||
| 1520 | - " uninitialized QPDFObjectHandle"); | ||
| 1521 | - }; | ||
| 1522 | - return o.obj; | ||
| 1523 | - } | ||
| 1524 | - static QPDF_Array* | ||
| 1525 | - asArray(QPDFObjectHandle& oh) | ||
| 1526 | - { | ||
| 1527 | - return oh.asArray(); | ||
| 1528 | - } | ||
| 1529 | - static QPDF_Stream* | ||
| 1530 | - asStream(QPDFObjectHandle& oh) | ||
| 1531 | - { | ||
| 1532 | - return oh.asStream(); | ||
| 1533 | - } | ||
| 1534 | - }; | ||
| 1535 | - | ||
| 1536 | // Provide access to specific classes for recursive | 1493 | // Provide access to specific classes for recursive |
| 1537 | // disconnected(). | 1494 | // disconnected(). |
| 1538 | class DisconnectAccess | 1495 | class DisconnectAccess |
libqpdf/QPDF.cc
| @@ -1775,11 +1775,7 @@ QPDF::readObjectAtOffset( | @@ -1775,11 +1775,7 @@ QPDF::readObjectAtOffset( | ||
| 1775 | // skip_cache_if_in_xref. | 1775 | // skip_cache_if_in_xref. |
| 1776 | QTC::TC("qpdf", "QPDF skipping cache for known unchecked object"); | 1776 | QTC::TC("qpdf", "QPDF skipping cache for known unchecked object"); |
| 1777 | } else { | 1777 | } else { |
| 1778 | - updateCache( | ||
| 1779 | - og, | ||
| 1780 | - QPDFObjectHandle::ObjAccessor::getObject(oh), | ||
| 1781 | - end_before_space, | ||
| 1782 | - end_after_space); | 1778 | + updateCache(og, oh.getObj(), end_before_space, end_after_space); |
| 1783 | } | 1779 | } |
| 1784 | } | 1780 | } |
| 1785 | 1781 | ||
| @@ -1930,11 +1926,7 @@ QPDF::resolveObjectsInStream(int obj_stream_number) | @@ -1930,11 +1926,7 @@ QPDF::resolveObjectsInStream(int obj_stream_number) | ||
| 1930 | int offset = iter.second; | 1926 | int offset = iter.second; |
| 1931 | input->seek(offset, SEEK_SET); | 1927 | input->seek(offset, SEEK_SET); |
| 1932 | QPDFObjectHandle oh = readObject(input, "", og, true); | 1928 | QPDFObjectHandle oh = readObject(input, "", og, true); |
| 1933 | - updateCache( | ||
| 1934 | - og, | ||
| 1935 | - QPDFObjectHandle::ObjAccessor::getObject(oh), | ||
| 1936 | - end_before_space, | ||
| 1937 | - end_after_space); | 1929 | + updateCache(og, oh.getObj(), end_before_space, end_after_space); |
| 1938 | } else { | 1930 | } else { |
| 1939 | QTC::TC("qpdf", "QPDF not caching overridden objstm object"); | 1931 | QTC::TC("qpdf", "QPDF not caching overridden objstm object"); |
| 1940 | } | 1932 | } |
| @@ -1945,7 +1937,7 @@ QPDFObjectHandle | @@ -1945,7 +1937,7 @@ QPDFObjectHandle | ||
| 1945 | QPDF::newIndirect(QPDFObjGen const& og, std::shared_ptr<QPDFObject> const& obj) | 1937 | QPDF::newIndirect(QPDFObjGen const& og, std::shared_ptr<QPDFObject> const& obj) |
| 1946 | { | 1938 | { |
| 1947 | obj->setDefaultDescription(this, og); | 1939 | obj->setDefaultDescription(this, og); |
| 1948 | - return QPDFObjectHandle::Factory::newIndirect(obj); | 1940 | + return {obj}; |
| 1949 | } | 1941 | } |
| 1950 | 1942 | ||
| 1951 | void | 1943 | void |
| @@ -2000,8 +1992,11 @@ QPDF::makeIndirectFromQPDFObject(std::shared_ptr<QPDFObject> const& obj) | @@ -2000,8 +1992,11 @@ QPDF::makeIndirectFromQPDFObject(std::shared_ptr<QPDFObject> const& obj) | ||
| 2000 | QPDFObjectHandle | 1992 | QPDFObjectHandle |
| 2001 | QPDF::makeIndirectObject(QPDFObjectHandle oh) | 1993 | QPDF::makeIndirectObject(QPDFObjectHandle oh) |
| 2002 | { | 1994 | { |
| 2003 | - return makeIndirectFromQPDFObject( | ||
| 2004 | - QPDFObjectHandle::ObjAccessor::getObject(oh)); | 1995 | + if (!oh.isInitialized()) { |
| 1996 | + throw std::logic_error( | ||
| 1997 | + "attempted to make an uninitialized QPDFObjectHandle indirect"); | ||
| 1998 | + } | ||
| 1999 | + return makeIndirectFromQPDFObject(oh.getObj()); | ||
| 2005 | } | 2000 | } |
| 2006 | 2001 | ||
| 2007 | QPDFObjectHandle | 2002 | QPDFObjectHandle |
| @@ -2043,8 +2038,8 @@ QPDF::reserveObjectIfNotExists(QPDFObjGen const& og) | @@ -2043,8 +2038,8 @@ QPDF::reserveObjectIfNotExists(QPDFObjGen const& og) | ||
| 2043 | QPDFObjectHandle | 2038 | QPDFObjectHandle |
| 2044 | QPDF::reserveStream(QPDFObjGen const& og) | 2039 | QPDF::reserveStream(QPDFObjGen const& og) |
| 2045 | { | 2040 | { |
| 2046 | - return QPDFObjectHandle::Factory::newIndirect( | ||
| 2047 | - QPDF_Stream::create(this, og, QPDFObjectHandle::newDictionary(), 0, 0)); | 2041 | + return { |
| 2042 | + QPDF_Stream::create(this, og, QPDFObjectHandle::newDictionary(), 0, 0)}; | ||
| 2048 | } | 2043 | } |
| 2049 | 2044 | ||
| 2050 | QPDFObjectHandle | 2045 | QPDFObjectHandle |
| @@ -2085,12 +2080,12 @@ QPDF::replaceObject(int objid, int generation, QPDFObjectHandle oh) | @@ -2085,12 +2080,12 @@ QPDF::replaceObject(int objid, int generation, QPDFObjectHandle oh) | ||
| 2085 | void | 2080 | void |
| 2086 | QPDF::replaceObject(QPDFObjGen const& og, QPDFObjectHandle oh) | 2081 | QPDF::replaceObject(QPDFObjGen const& og, QPDFObjectHandle oh) |
| 2087 | { | 2082 | { |
| 2088 | - if (oh.isIndirect()) { | 2083 | + if (oh.isIndirect() || !oh.isInitialized()) { |
| 2089 | QTC::TC("qpdf", "QPDF replaceObject called with indirect object"); | 2084 | QTC::TC("qpdf", "QPDF replaceObject called with indirect object"); |
| 2090 | throw std::logic_error( | 2085 | throw std::logic_error( |
| 2091 | "QPDF::replaceObject called with indirect object handle"); | 2086 | "QPDF::replaceObject called with indirect object handle"); |
| 2092 | } | 2087 | } |
| 2093 | - updateCache(og, QPDFObjectHandle::ObjAccessor::getObject(oh), -1, -1); | 2088 | + updateCache(og, oh.getObj(), -1, -1); |
| 2094 | } | 2089 | } |
| 2095 | 2090 | ||
| 2096 | void | 2091 | void |
| @@ -2347,7 +2342,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign) | @@ -2347,7 +2342,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign) | ||
| 2347 | QPDF& foreign_stream_qpdf = | 2342 | QPDF& foreign_stream_qpdf = |
| 2348 | foreign.getQPDF("unable to retrieve owning qpdf from foreign stream"); | 2343 | foreign.getQPDF("unable to retrieve owning qpdf from foreign stream"); |
| 2349 | 2344 | ||
| 2350 | - auto stream = QPDFObjectHandle::ObjAccessor::asStream(foreign); | 2345 | + auto stream = foreign.getObjectPtr()->as<QPDF_Stream>(); |
| 2351 | if (stream == nullptr) { | 2346 | if (stream == nullptr) { |
| 2352 | throw std::logic_error("unable to retrieve underlying" | 2347 | throw std::logic_error("unable to retrieve underlying" |
| 2353 | " stream object from foreign stream"); | 2348 | " stream object from foreign stream"); |