diff options
author | Jay Berkenbilt <ejb@ql.org> | 2012-06-21 15:12:51 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2012-06-21 21:01:02 +0200 |
commit | df493c352f3936b7b6597791c289175dffb3db57 (patch) | |
tree | b34592f54ea1e3f130d06ce5d7acd2a054c81f2c /libqpdf | |
parent | 5d3f93be29800dd0eb876c3062451d32e7798948 (diff) | |
download | qpdf-df493c352f3936b7b6597791c289175dffb3db57.tar.zst |
Refactor optimizePagesTree
Split optimizePagesTree into a simpler top-level routine and a
recursive internal routine.
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDF_optimization.cc | 32 |
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 |