From 5039da0b91a981b438cbb1c7a7325fde12e2632b Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Fri, 14 Jun 2013 11:27:15 -0400 Subject: [PATCH] Add QPDFObjectHandle::getObjGen() This is safer than getObjectID() and getGeneration() for many uses. --- ChangeLog | 4 ++++ include/qpdf/QPDFObjectHandle.hh | 13 ++++++++++++- libqpdf/QPDFObjectHandle.cc | 6 ++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 28bf6840..a71b3f18 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2013-06-14 Jay Berkenbilt + * Add new QPDFObjectHandle::getObjGen() method and indiciate in + comments that its use is favored over getObjectID() and + getGeneration() for most cases. + * Add new QPDFObjGen object to represent an object ID/generation pair. diff --git a/include/qpdf/QPDFObjectHandle.hh b/include/qpdf/QPDFObjectHandle.hh index ed02d3bb..81400056 100644 --- a/include/qpdf/QPDFObjectHandle.hh +++ b/include/qpdf/QPDFObjectHandle.hh @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -454,7 +455,17 @@ class QPDFObjectHandle QPDFObjectHandle const& filter, QPDFObjectHandle const& decode_parms); - // return 0 for direct objects + // Access object ID and generation. For direct objects, return + // object ID 0. + + // NOTE: Be careful about calling getObjectID() and + // getGeneration() directly as this can lead to the pattern of + // depending on object ID or generation without the other. In + // general, when keeping track of object IDs, it's better to use + // QPDFObjGen instead. + + QPDF_DLL + QPDFObjGen getObjGen() const; QPDF_DLL int getObjectID() const; QPDF_DLL diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index 373cd7bd..9a1aae4a 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -535,6 +535,12 @@ QPDFObjectHandle::replaceStreamData(PointerHolder provider, provider, filter, decode_parms); } +QPDFObjGen +QPDFObjectHandle::getObjGen() const +{ + return QPDFObjGen(this->objid, this->generation); +} + int QPDFObjectHandle::getObjectID() const {