From 4b73d057fb637bb2c2810aaf9fefdfe9b8beaef6 Mon Sep 17 00:00:00 2001 From: m-holger Date: Sat, 23 Jul 2022 19:44:11 +0100 Subject: QPDFObjGen : tidy QPDF_Stream Change method signatures to use QPDFObjGen. Replace QPDF_Stream::objid and generation with QPDF_Stream::og. --- libqpdf/QPDFObjectHandle.cc | 10 +++++----- libqpdf/QPDF_Stream.cc | 38 +++++++++++++++----------------------- libqpdf/qpdf/QPDF_Stream.hh | 11 ++++------- 3 files changed, 24 insertions(+), 35 deletions(-) (limited to 'libqpdf') diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index e7a98090..e883dcd0 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -2634,8 +2634,8 @@ QPDFObjectHandle::newStream( qpdf_offset_t offset, size_t length) { - QPDFObjectHandle result = QPDFObjectHandle(QPDF_Stream::create( - qpdf, og.getObj(), og.getGen(), stream_dict, offset, length)); + QPDFObjectHandle result = QPDFObjectHandle( + QPDF_Stream::create(qpdf, og, stream_dict, offset, length)); if (offset) { result.setParsedOffset(offset); } @@ -2651,11 +2651,11 @@ QPDFObjectHandle::newStream(QPDF* qpdf) } QTC::TC("qpdf", "QPDFObjectHandle newStream"); QPDFObjectHandle stream_dict = newDictionary(); - QPDFObjectHandle result = qpdf->makeIndirectObject( - QPDFObjectHandle(QPDF_Stream::create(qpdf, 0, 0, stream_dict, 0, 0))); + QPDFObjectHandle result = qpdf->makeIndirectObject(QPDFObjectHandle( + QPDF_Stream::create(qpdf, QPDFObjGen(), stream_dict, 0, 0))); result.dereference(); QPDF_Stream* stream = dynamic_cast(result.obj.get()); - stream->setObjGen(result.getObjectID(), result.getGeneration()); + stream->setObjGen(result.getObjGen()); return result; } diff --git a/libqpdf/QPDF_Stream.cc b/libqpdf/QPDF_Stream.cc index c8290286..aed9370d 100644 --- a/libqpdf/QPDF_Stream.cc +++ b/libqpdf/QPDF_Stream.cc @@ -110,14 +110,12 @@ StreamBlobProvider::operator()(Pipeline* p) QPDF_Stream::QPDF_Stream( QPDF* qpdf, - int objid, - int generation, + QPDFObjGen const& og, QPDFObjectHandle stream_dict, qpdf_offset_t offset, size_t length) : qpdf(qpdf), - objid(objid), - generation(generation), + og(og), filter_on_write(true), stream_dict(stream_dict), offset(offset), @@ -128,22 +126,18 @@ QPDF_Stream::QPDF_Stream( "object for dictionary"); } setDescription( - this->qpdf, - this->qpdf->getFilename() + ", stream object " + - QPDFObjGen(objid, generation).unparse(' ')); + qpdf, qpdf->getFilename() + ", stream object " + og.unparse(' ')); } std::shared_ptr QPDF_Stream::create( QPDF* qpdf, - int objid, - int generation, + QPDFObjGen const& og, QPDFObjectHandle stream_dict, qpdf_offset_t offset, size_t length) { - return do_create( - new QPDF_Stream(qpdf, objid, generation, stream_dict, offset, length)); + return do_create(new QPDF_Stream(qpdf, og, stream_dict, offset, length)); } std::shared_ptr @@ -180,22 +174,21 @@ QPDF_Stream::releaseResolved() } void -QPDF_Stream::setObjGen(int objid, int generation) +QPDF_Stream::setObjGen(QPDFObjGen const& og) { - if (!((this->objid == 0) && (this->generation == 0))) { + if (this->og.isIndirect()) { throw std::logic_error( "attempt to set object ID and generation of a stream" " that already has them"); } - this->objid = objid; - this->generation = generation; + this->og = og; } std::string QPDF_Stream::unparse() { // Unparse stream objects as indirect references - return QPDFObjGen(objid, generation).unparse(' ') + " R"; + return og.unparse(' ') + " R"; } JSON @@ -617,8 +610,8 @@ QPDF_Stream::pipeStreamData( Pl_Count count("stream provider count", pipeline); if (this->stream_provider->supportsRetry()) { if (!this->stream_provider->provideStreamData( - this->objid, - this->generation, + og.getObj(), + og.getGen(), &count, suppress_warnings, will_retry)) { @@ -627,7 +620,7 @@ QPDF_Stream::pipeStreamData( } } else { this->stream_provider->provideStreamData( - this->objid, this->generation, &count); + og.getObj(), og.getGen(), &count); } qpdf_offset_t actual_length = count.getCount(); qpdf_offset_t desired_length = 0; @@ -640,9 +633,8 @@ QPDF_Stream::pipeStreamData( // This would be caused by programmer error on the // part of a library user, not by invalid input data. throw std::runtime_error( - "stream data provider for " + - QPDFObjGen(objid, generation).unparse(' ') + " provided " + - QUtil::int_to_string(actual_length) + + "stream data provider for " + og.unparse(' ') + + " provided " + QUtil::int_to_string(actual_length) + " bytes instead of expected " + QUtil::int_to_string(desired_length) + " bytes"); } @@ -658,7 +650,7 @@ QPDF_Stream::pipeStreamData( QTC::TC("qpdf", "QPDF_Stream pipe original stream data"); if (!QPDF::Pipe::pipeStreamData( this->qpdf, - QPDFObjGen(this->objid, this->generation), + og, this->offset, this->length, this->stream_dict, diff --git a/libqpdf/qpdf/QPDF_Stream.hh b/libqpdf/qpdf/QPDF_Stream.hh index 3b7cf358..8980c751 100644 --- a/libqpdf/qpdf/QPDF_Stream.hh +++ b/libqpdf/qpdf/QPDF_Stream.hh @@ -19,8 +19,7 @@ class QPDF_Stream: public QPDFObject virtual ~QPDF_Stream() = default; static std::shared_ptr create( QPDF*, - int objid, - int generation, + QPDFObjGen const& og, QPDFObjectHandle stream_dict, qpdf_offset_t offset, size_t length); @@ -78,7 +77,7 @@ class QPDF_Stream: public QPDFObject // Replace object ID and generation. This may only be called if // object ID and generation are 0. It is used by QPDFObjectHandle // when adding streams to files. - void setObjGen(int objid, int generation); + void setObjGen(QPDFObjGen const& og); protected: virtual void releaseResolved(); @@ -86,8 +85,7 @@ class QPDF_Stream: public QPDFObject private: QPDF_Stream( QPDF*, - int objid, - int generation, + QPDFObjGen const& og, QPDFObjectHandle stream_dict, qpdf_offset_t offset, size_t length); @@ -111,8 +109,7 @@ class QPDF_Stream: public QPDFObject void setDictDescription(); QPDF* qpdf; - int objid; - int generation; + QPDFObjGen og; bool filter_on_write; QPDFObjectHandle stream_dict; qpdf_offset_t offset; -- cgit v1.2.3-54-g00ecf