2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-31 01:10:51 +00:00

QPDFObjGen : tidy QPDF_Stream

Change method signatures to use QPDFObjGen.
Replace QPDF_Stream::objid and generation with QPDF_Stream::og.
This commit is contained in:
m-holger 2022-07-23 19:44:11 +01:00
parent f7978db1f6
commit 4b73d057fb
3 changed files with 24 additions and 35 deletions

View File

@ -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<QPDF_Stream*>(result.obj.get());
stream->setObjGen(result.getObjectID(), result.getGeneration());
stream->setObjGen(result.getObjGen());
return result;
}

View File

@ -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<QPDFObject>
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<QPDFObject>
@ -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,

View File

@ -19,8 +19,7 @@ class QPDF_Stream: public QPDFObject
virtual ~QPDF_Stream() = default;
static std::shared_ptr<QPDFObject> 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;