aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF_optimization.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2012-06-21 15:12:51 +0200
committerJay Berkenbilt <ejb@ql.org>2012-06-21 21:01:02 +0200
commitdf493c352f3936b7b6597791c289175dffb3db57 (patch)
treeb34592f54ea1e3f130d06ce5d7acd2a054c81f2c /libqpdf/QPDF_optimization.cc
parent5d3f93be29800dd0eb876c3062451d32e7798948 (diff)
downloadqpdf-df493c352f3936b7b6597791c289175dffb3db57.tar.zst
Refactor optimizePagesTree
Split optimizePagesTree into a simpler top-level routine and a recursive internal routine.
Diffstat (limited to 'libqpdf/QPDF_optimization.cc')
-rw-r--r--libqpdf/QPDF_optimization.cc32
1 files changed, 20 insertions, 12 deletions
diff --git a/libqpdf/QPDF_optimization.cc b/libqpdf/QPDF_optimization.cc
index 572cf1ae..10b56b60 100644
--- a/libqpdf/QPDF_optimization.cc
+++ b/libqpdf/QPDF_optimization.cc
@@ -167,15 +167,7 @@ QPDF::optimize(std::map<int, int> const& object_stream_data,
// Traverse pages tree pushing all inherited resources down to the
// page level.
-
- // key_ancestors is a mapping of page attribute keys to a stack of
- // Pages nodes that contain values for them. pageno is the
- // current page sequence number numbered from 0.
- std::map<std::string, std::vector<QPDFObjectHandle> > key_ancestors;
- int pageno = 0;
- optimizePagesTree(this->trailer.getKey("/Root").getKey("/Pages"),
- key_ancestors, pageno, allow_changes);
- assert(key_ancestors.empty());
+ optimizePagesTree(allow_changes);
// Traverse document-level items
std::set<std::string> keys = this->trailer.getKeys();
@@ -220,7 +212,23 @@ QPDF::optimize(std::map<int, int> const& object_stream_data,
}
void
-QPDF::optimizePagesTree(
+QPDF::optimizePagesTree(bool allow_changes)
+{
+ // Traverse pages tree pushing all inherited resources down to the
+ // page level.
+
+ // key_ancestors is a mapping of page attribute keys to a stack of
+ // Pages nodes that contain values for them. pageno is the
+ // current page sequence number numbered from 0.
+ std::map<std::string, std::vector<QPDFObjectHandle> > key_ancestors;
+ int pageno = 0;
+ optimizePagesTreeInternal(this->trailer.getKey("/Root").getKey("/Pages"),
+ key_ancestors, pageno, allow_changes);
+ assert(key_ancestors.empty());
+}
+
+void
+QPDF::optimizePagesTreeInternal(
QPDFObjectHandle cur_pages,
std::map<std::string, std::vector<QPDFObjectHandle> >& key_ancestors,
int& pageno, bool allow_changes)
@@ -293,8 +301,8 @@ QPDF::optimizePagesTree(
int n = kids.getArrayNItems();
for (int i = 0; i < n; ++i)
{
- optimizePagesTree(kids.getArrayItem(i), key_ancestors, pageno,
- allow_changes);
+ optimizePagesTreeInternal(
+ kids.getArrayItem(i), key_ancestors, pageno, allow_changes);
}
// For each inheritable key, pop the stack. If the stack