aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-08-02 23:57:33 +0200
committerm-holger <m-holger@kubitscheck.org>2022-09-01 15:27:46 +0200
commit27fae2b55e835a41277df78f090d4baf6fe05c1e (patch)
tree2cc00679f40d6a62a08f90999f7cdb539e7d2d13 /libqpdf/QPDF.cc
parent431bd666c0504af0c8a016a96a73b7efbf9737c9 (diff)
downloadqpdf-27fae2b55e835a41277df78f090d4baf6fe05c1e.tar.zst
Remove QPDF::ObjectChanged
Also change QPDF::replaceObject and QPDF::swapObjects such that the QPDFObject assigned to an og in the obj_cache is never replaced; only QPDFObject::value is updated.
Diffstat (limited to 'libqpdf/QPDF.cc')
-rw-r--r--libqpdf/QPDF.cc34
1 files changed, 3 insertions, 31 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index 22f62a8b..000dab5d 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -223,7 +223,6 @@ QPDF::Members::Members() :
immediate_copy_from(false),
in_parse(false),
parsed(false),
- ever_replaced_objects(false),
first_xref_item_offset(0),
uncompressed_after_compressed(false)
{
@@ -1928,28 +1927,6 @@ QPDF::readObjectAtOffset(
return oh;
}
-bool
-QPDF::objectChanged(QPDFObjGen const& og, std::shared_ptr<QPDFObject>& oph)
-{
- // See if the object cached at og, if any, is the one passed in.
- // QPDFObjectHandle uses this to detect outdated handles to
- // replaced or swapped objects. This is a somewhat expensive check
- // because it happens with every dereference of a
- // QPDFObjectHandle. To reduce the hit somewhat, short-circuit the
- // check if we never called a function that replaces an object
- // already in cache. It is important for functions that do this to
- // set ever_replaced_objects = true.
-
- if (!this->m->ever_replaced_objects) {
- return false;
- }
- auto c = this->m->obj_cache.find(og);
- if (c == this->m->obj_cache.end()) {
- return true;
- }
- return (c->second.object.get() != oph.get());
-}
-
std::shared_ptr<QPDFObject>
QPDF::resolve(QPDFObjGen const& og)
{
@@ -2207,14 +2184,12 @@ QPDF::replaceObject(QPDFObjGen const& og, QPDFObjectHandle oh)
throw std::logic_error(
"QPDF::replaceObject called with indirect object handle");
}
-
// Force new object to appear in the cache
resolve(og);
// Replace the object in the object cache
- this->m->ever_replaced_objects = true;
- this->m->obj_cache[og] =
- ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh), -1, -1);
+ m->obj_cache[og].object->assign(
+ QPDFObjectHandle::ObjAccessor::getObject(oh));
}
void
@@ -2536,10 +2511,7 @@ QPDF::swapObjects(QPDFObjGen const& og1, QPDFObjGen const& og2)
// cache.
resolve(og1);
resolve(og2);
- ObjCache t = this->m->obj_cache[og1];
- this->m->ever_replaced_objects = true;
- this->m->obj_cache[og1] = this->m->obj_cache[og2];
- this->m->obj_cache[og2] = t;
+ m->obj_cache[og1].object->swapWith(m->obj_cache[og2].object);
}
unsigned long long