Commit d7b470761b3fe6895888f44c15655e880e5afaa0

Authored by m-holger
Committed by Jay Berkenbilt
1 parent 432f4174

Remove QPDFObjectHandle::Factory and ObjAccessor

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&lt;QPDFObject&gt; const&amp; obj) @@ -2000,8 +1992,11 @@ QPDF::makeIndirectFromQPDFObject(std::shared_ptr&lt;QPDFObject&gt; const&amp; 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&amp; og) @@ -2043,8 +2038,8 @@ QPDF::reserveObjectIfNotExists(QPDFObjGen const&amp; 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");