2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-12-22 19:08:59 +00:00

QPDFObjGen : tidy QPDFObjectHandle private methods

Change method signature to use QPDFObjGen.
This commit is contained in:
m-holger 2022-07-23 14:45:54 +01:00
parent b123f79dfd
commit 3404ca8ac8
4 changed files with 28 additions and 32 deletions

View File

@ -1429,21 +1429,20 @@ class QPDFObjectHandle
private: private:
static QPDFObjectHandle static QPDFObjectHandle
newIndirect(QPDF* qpdf, int objid, int generation) newIndirect(QPDF* qpdf, QPDFObjGen const& og)
{ {
return QPDFObjectHandle::newIndirect(qpdf, objid, generation); return QPDFObjectHandle::newIndirect(qpdf, og);
} }
static QPDFObjectHandle static QPDFObjectHandle
newStream( newStream(
QPDF* qpdf, QPDF* qpdf,
int objid, QPDFObjGen const& og,
int generation,
QPDFObjectHandle stream_dict, QPDFObjectHandle stream_dict,
qpdf_offset_t offset, qpdf_offset_t offset,
size_t length) size_t length)
{ {
return QPDFObjectHandle::newStream( return QPDFObjectHandle::newStream(
qpdf, objid, generation, stream_dict, offset, length); qpdf, og, stream_dict, offset, length);
} }
// Reserve an object with a specific ID // Reserve an object with a specific ID
static QPDFObjectHandle static QPDFObjectHandle
@ -1563,11 +1562,10 @@ class QPDFObjectHandle
}; };
// Private object factory methods // Private object factory methods
static QPDFObjectHandle newIndirect(QPDF*, int objid, int generation); static QPDFObjectHandle newIndirect(QPDF*, QPDFObjGen const& og);
static QPDFObjectHandle newStream( static QPDFObjectHandle newStream(
QPDF* qpdf, QPDF* qpdf,
int objid, QPDFObjGen const& og,
int generation,
QPDFObjectHandle stream_dict, QPDFObjectHandle stream_dict,
qpdf_offset_t offset, qpdf_offset_t offset,
size_t length); size_t length);

View File

@ -1404,9 +1404,8 @@ QPDF::fixDanglingReferences(bool force)
// For each non-scalar item to process, put it in the queue. // For each non-scalar item to process, put it in the queue.
std::list<QPDFObjectHandle> queue; std::list<QPDFObjectHandle> queue;
queue.push_back(this->m->trailer); queue.push_back(this->m->trailer);
for (auto const& iter: to_process) { for (auto const& og: to_process) {
QPDFObjectHandle obj = QPDFObjectHandle::Factory::newIndirect( QPDFObjectHandle obj = QPDFObjectHandle::Factory::newIndirect(this, og);
this, iter.getObj(), iter.getGen());
if (obj.isDictionary() || obj.isArray()) { if (obj.isDictionary() || obj.isArray()) {
queue.push_back(obj); queue.push_back(obj);
} else if (obj.isStream()) { } else if (obj.isStream()) {
@ -1472,10 +1471,7 @@ QPDF::getAllObjects()
std::vector<QPDFObjectHandle> result; std::vector<QPDFObjectHandle> result;
for (auto const& iter: this->m->obj_cache) { for (auto const& iter: this->m->obj_cache) {
QPDFObjGen const& og = iter.first; QPDFObjGen const& og = iter.first;
result.push_back( result.push_back(QPDFObjectHandle::Factory::newIndirect(this, og));
// line-break
QPDFObjectHandle::Factory::newIndirect(
this, og.getObj(), og.getGen()));
} }
return result; return result;
} }
@ -1662,7 +1658,11 @@ QPDF::readObject(
} }
} }
object = QPDFObjectHandle::Factory::newStream( object = QPDFObjectHandle::Factory::newStream(
this, objid, generation, object, stream_offset, length); this,
QPDFObjGen(objid, generation),
object,
stream_offset,
length);
} else { } else {
input->seek(cur_offset, SEEK_SET); input->seek(cur_offset, SEEK_SET);
} }
@ -2159,8 +2159,7 @@ QPDF::makeIndirectObject(QPDFObjectHandle oh)
QPDFObjGen next(max_objid + 1, 0); QPDFObjGen next(max_objid + 1, 0);
this->m->obj_cache[next] = this->m->obj_cache[next] =
ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh), -1, -1); ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh), -1, -1);
return QPDFObjectHandle::Factory::newIndirect( return QPDFObjectHandle::Factory::newIndirect(this, next);
this, next.getObj(), next.getGen());
} }
QPDFObjectHandle QPDFObjectHandle
@ -2178,19 +2177,19 @@ QPDFObjectHandle
QPDF::reserveStream(int objid, int gen) QPDF::reserveStream(int objid, int gen)
{ {
return QPDFObjectHandle::Factory::newStream( return QPDFObjectHandle::Factory::newStream(
this, objid, gen, QPDFObjectHandle::newDictionary(), 0, 0); this, QPDFObjGen(objid, gen), QPDFObjectHandle::newDictionary(), 0, 0);
} }
QPDFObjectHandle QPDFObjectHandle
QPDF::getObjectByObjGen(QPDFObjGen const& og) QPDF::getObjectByObjGen(QPDFObjGen const& og)
{ {
return getObjectByID(og.getObj(), og.getGen()); return QPDFObjectHandle::Factory::newIndirect(this, og);
} }
QPDFObjectHandle QPDFObjectHandle
QPDF::getObjectByID(int objid, int generation) QPDF::getObjectByID(int objid, int generation)
{ {
return QPDFObjectHandle::Factory::newIndirect(this, objid, generation); return getObjectByObjGen(QPDFObjGen(objid, generation));
} }
void void

View File

@ -2180,8 +2180,9 @@ QPDFObjectHandle::parseInternal(
// Try to resolve indirect objects // Try to resolve indirect objects
object = newIndirect( object = newIndirect(
context, context,
olist.at(olist.size() - 2).getIntValueAsInt(), QPDFObjGen(
olist.at(olist.size() - 1).getIntValueAsInt()); olist.at(olist.size() - 2).getIntValueAsInt(),
olist.at(olist.size() - 1).getIntValueAsInt()));
olist.remove_last(); olist.remove_last();
olist.remove_last(); olist.remove_last();
} else if ((value == "endobj") && (state == st_top)) { } else if ((value == "endobj") && (state == st_top)) {
@ -2469,9 +2470,9 @@ QPDFObjectHandle::setParsedOffset(qpdf_offset_t offset)
} }
QPDFObjectHandle QPDFObjectHandle
QPDFObjectHandle::newIndirect(QPDF* qpdf, int objid, int generation) QPDFObjectHandle::newIndirect(QPDF* qpdf, QPDFObjGen const& og)
{ {
if (objid == 0) { if (!og.isIndirect()) {
// Special case: QPDF uses objid 0 as a sentinel for direct // Special case: QPDF uses objid 0 as a sentinel for direct
// objects, and the PDF specification doesn't allow for object // objects, and the PDF specification doesn't allow for object
// 0. Treat indirect references to object 0 as null so that we // 0. Treat indirect references to object 0 as null so that we
@ -2480,7 +2481,7 @@ QPDFObjectHandle::newIndirect(QPDF* qpdf, int objid, int generation)
return newNull(); return newNull();
} }
return QPDFObjectHandle(qpdf, QPDFObjGen(objid, generation)); return QPDFObjectHandle(qpdf, og);
} }
QPDFObjectHandle QPDFObjectHandle
@ -2628,14 +2629,13 @@ QPDFObjectHandle::newDictionary(
QPDFObjectHandle QPDFObjectHandle
QPDFObjectHandle::newStream( QPDFObjectHandle::newStream(
QPDF* qpdf, QPDF* qpdf,
int objid, QPDFObjGen const& og,
int generation,
QPDFObjectHandle stream_dict, QPDFObjectHandle stream_dict,
qpdf_offset_t offset, qpdf_offset_t offset,
size_t length) size_t length)
{ {
QPDFObjectHandle result = QPDFObjectHandle(QPDF_Stream::create( QPDFObjectHandle result = QPDFObjectHandle(QPDF_Stream::create(
qpdf, objid, generation, stream_dict, offset, length)); qpdf, og.getObj(), og.getGen(), stream_dict, offset, length));
if (offset) { if (offset) {
result.setParsedOffset(offset); result.setParsedOffset(offset);
} }
@ -2683,8 +2683,7 @@ QPDFObjectHandle::newReserved(QPDF* qpdf)
// Reserve a spot for this object by assigning it an object // Reserve a spot for this object by assigning it an object
// number, but then return an unresolved handle to the object. // number, but then return an unresolved handle to the object.
QPDFObjectHandle reserved = qpdf->makeIndirectObject(makeReserved()); QPDFObjectHandle reserved = qpdf->makeIndirectObject(makeReserved());
QPDFObjectHandle result = QPDFObjectHandle result = newIndirect(qpdf, reserved.getObjGen());
newIndirect(qpdf, reserved.getObjectID(), reserved.getGeneration());
result.reserved = true; result.reserved = true;
return result; return result;
} }

View File

@ -138,7 +138,7 @@ QPDF::isLinearized()
} }
QPDFObjectHandle candidate = QPDFObjectHandle candidate =
QPDFObjectHandle::Factory::newIndirect(this, lindict_obj, 0); QPDFObjectHandle::Factory::newIndirect(this, QPDFObjGen(lindict_obj));
if (!candidate.isDictionary()) { if (!candidate.isDictionary()) {
return false; return false;
} }