Commit 7b3cbacf5dc78b6f2b57204796f7dd0880a68b66
1 parent
a9ae8cad
Change from QPDF{Array,Dict}Items to aitems() and ditems()
Showing
9 changed files
with
99 additions
and
62 deletions
ChangeLog
| @@ -137,16 +137,15 @@ | @@ -137,16 +137,15 @@ | ||
| 137 | 137 | ||
| 138 | 2021-01-29 Jay Berkenbilt <ejb@ql.org> | 138 | 2021-01-29 Jay Berkenbilt <ejb@ql.org> |
| 139 | 139 | ||
| 140 | - * Add wrappers QPDFDictItems and QPDFArrayItems around | ||
| 141 | - QPDFObjectHandle that provide a C++ iterator API, including C++11 | ||
| 142 | - range-for iteration, over arrays and dictionaries. With this, you | ||
| 143 | - can do | 140 | + * Add methods to QPDFObjectHandle that provide a C++ iterator API, |
| 141 | + including C++11 range-for iteration, over arrays and dictionaries. | ||
| 142 | + With this, you can do | ||
| 144 | 143 | ||
| 145 | - for (auto i: QPDFDictItems(oh)) | 144 | + for (auto i: dict_oh.ditems()) |
| 146 | { | 145 | { |
| 147 | // i.first is a string, i.second is a QPDFObjectHandle | 146 | // i.first is a string, i.second is a QPDFObjectHandle |
| 148 | } | 147 | } |
| 149 | - for (auto i: QPDFArrayItems(oh)) | 148 | + for (auto i: array_oh.aitems()) |
| 150 | { | 149 | { |
| 151 | // i is a QPDFObjectHandle | 150 | // i is a QPDFObjectHandle |
| 152 | } | 151 | } |
examples/pdf-mod-info.cc
| @@ -32,7 +32,7 @@ void dumpInfoDict(QPDF& pdf, | @@ -32,7 +32,7 @@ void dumpInfoDict(QPDF& pdf, | ||
| 32 | QPDFObjectHandle trailer = pdf.getTrailer(); | 32 | QPDFObjectHandle trailer = pdf.getTrailer(); |
| 33 | if (trailer.hasKey("/Info")) | 33 | if (trailer.hasKey("/Info")) |
| 34 | { | 34 | { |
| 35 | - for (auto& it: QPDFDictItems(trailer.getKey("/Info"))) | 35 | + for (auto& it: trailer.getKey("/Info").ditems()) |
| 36 | { | 36 | { |
| 37 | std::string val; | 37 | std::string val; |
| 38 | if (it.second.isString()) | 38 | if (it.second.isString()) |
examples/pdf-name-number-tree.cc
| @@ -93,7 +93,7 @@ int main(int argc, char* argv[]) | @@ -93,7 +93,7 @@ int main(int argc, char* argv[]) | ||
| 93 | // look at it using dictionary and array iterators. | 93 | // look at it using dictionary and array iterators. |
| 94 | std::cout << "Keys in name tree object:" << std::endl; | 94 | std::cout << "Keys in name tree object:" << std::endl; |
| 95 | QPDFObjectHandle names; | 95 | QPDFObjectHandle names; |
| 96 | - for (auto const& i: QPDFDictItems(name_tree_oh)) | 96 | + for (auto const& i: name_tree_oh.ditems()) |
| 97 | { | 97 | { |
| 98 | std::cout << i.first << std::endl; | 98 | std::cout << i.first << std::endl; |
| 99 | if (i.first == "/Names") | 99 | if (i.first == "/Names") |
| @@ -103,7 +103,7 @@ int main(int argc, char* argv[]) | @@ -103,7 +103,7 @@ int main(int argc, char* argv[]) | ||
| 103 | } | 103 | } |
| 104 | // Values in names array: | 104 | // Values in names array: |
| 105 | std::cout << "Values in names:" << std::endl; | 105 | std::cout << "Values in names:" << std::endl; |
| 106 | - for (auto& i: QPDFArrayItems(names)) | 106 | + for (auto& i: names.aitems()) |
| 107 | { | 107 | { |
| 108 | std::cout << " " << i.unparse() << std::endl; | 108 | std::cout << " " << i.unparse() << std::endl; |
| 109 | } | 109 | } |
include/qpdf/QPDFObjectHandle.hh
| @@ -659,8 +659,19 @@ class QPDFObjectHandle | @@ -659,8 +659,19 @@ class QPDFObjectHandle | ||
| 659 | QPDF_DLL | 659 | QPDF_DLL |
| 660 | std::string getInlineImageValue(); | 660 | std::string getInlineImageValue(); |
| 661 | 661 | ||
| 662 | - // Methods for array objects; see also name and array objects. See | ||
| 663 | - // also QPDFArrayItems later in this file. | 662 | + // Methods for array objects; see also name and array objects. |
| 663 | + | ||
| 664 | + // Return an object that enables iteration over members. You can | ||
| 665 | + // do | ||
| 666 | + // | ||
| 667 | + // for (auto iter: obj.aitems()) | ||
| 668 | + // { | ||
| 669 | + // // iter is an array element | ||
| 670 | + // } | ||
| 671 | + class QPDFArrayItems; | ||
| 672 | + QPDF_DLL | ||
| 673 | + QPDFArrayItems aitems(); | ||
| 674 | + | ||
| 664 | QPDF_DLL | 675 | QPDF_DLL |
| 665 | int getArrayNItems(); | 676 | int getArrayNItems(); |
| 666 | QPDF_DLL | 677 | QPDF_DLL |
| @@ -684,8 +695,20 @@ class QPDFObjectHandle | @@ -684,8 +695,20 @@ class QPDFObjectHandle | ||
| 684 | QPDF_DLL | 695 | QPDF_DLL |
| 685 | Matrix getArrayAsMatrix(); | 696 | Matrix getArrayAsMatrix(); |
| 686 | 697 | ||
| 687 | - // Methods for dictionary objects. See also QPDFDictItems later in | ||
| 688 | - // this file. | 698 | + // Methods for dictionary objects. |
| 699 | + | ||
| 700 | + // Return an object that enables iteration over members. You can | ||
| 701 | + // do | ||
| 702 | + // | ||
| 703 | + // for (auto iter: obj.ditems()) | ||
| 704 | + // { | ||
| 705 | + // // iter.first is the key | ||
| 706 | + // // iter.second is the value | ||
| 707 | + // } | ||
| 708 | + class QPDFDictItems; | ||
| 709 | + QPDF_DLL | ||
| 710 | + QPDFDictItems ditems(); | ||
| 711 | + | ||
| 689 | QPDF_DLL | 712 | QPDF_DLL |
| 690 | bool hasKey(std::string const&); | 713 | bool hasKey(std::string const&); |
| 691 | QPDF_DLL | 714 | QPDF_DLL |
| @@ -1288,7 +1311,7 @@ class QPDFObjectHandle | @@ -1288,7 +1311,7 @@ class QPDFObjectHandle | ||
| 1288 | bool reserved; | 1311 | bool reserved; |
| 1289 | }; | 1312 | }; |
| 1290 | 1313 | ||
| 1291 | -class QPDFDictItems | 1314 | +class QPDFObjectHandle::QPDFDictItems |
| 1292 | { | 1315 | { |
| 1293 | // This class allows C++-style iteration, including range-for | 1316 | // This class allows C++-style iteration, including range-for |
| 1294 | // iteration, around dictionaries. You can write | 1317 | // iteration, around dictionaries. You can write |
| @@ -1379,7 +1402,7 @@ class QPDFDictItems | @@ -1379,7 +1402,7 @@ class QPDFDictItems | ||
| 1379 | QPDFObjectHandle oh; | 1402 | QPDFObjectHandle oh; |
| 1380 | }; | 1403 | }; |
| 1381 | 1404 | ||
| 1382 | -class QPDFArrayItems | 1405 | +class QPDFObjectHandle::QPDFArrayItems |
| 1383 | { | 1406 | { |
| 1384 | // This class allows C++-style iteration, including range-for | 1407 | // This class allows C++-style iteration, including range-for |
| 1385 | // iteration, around arrays. You can write | 1408 | // iteration, around arrays. You can write |
libqpdf/QPDFAcroFormDocumentHelper.cc
| @@ -439,7 +439,7 @@ QPDFAcroFormDocumentHelper::transformAnnotations( | @@ -439,7 +439,7 @@ QPDFAcroFormDocumentHelper::transformAnnotations( | ||
| 439 | } | 439 | } |
| 440 | }; | 440 | }; |
| 441 | 441 | ||
| 442 | - for (auto annot: QPDFArrayItems(old_annots)) | 442 | + for (auto annot: old_annots.aitems()) |
| 443 | { | 443 | { |
| 444 | if (annot.isStream()) | 444 | if (annot.isStream()) |
| 445 | { | 445 | { |
| @@ -620,7 +620,7 @@ QPDFAcroFormDocumentHelper::transformAnnotations( | @@ -620,7 +620,7 @@ QPDFAcroFormDocumentHelper::transformAnnotations( | ||
| 620 | }; | 620 | }; |
| 621 | if (apdict.isDictionary()) | 621 | if (apdict.isDictionary()) |
| 622 | { | 622 | { |
| 623 | - for (auto& ap: QPDFDictItems(apdict)) | 623 | + for (auto& ap: apdict.ditems()) |
| 624 | { | 624 | { |
| 625 | if (ap.second.isStream()) | 625 | if (ap.second.isStream()) |
| 626 | { | 626 | { |
| @@ -629,7 +629,7 @@ QPDFAcroFormDocumentHelper::transformAnnotations( | @@ -629,7 +629,7 @@ QPDFAcroFormDocumentHelper::transformAnnotations( | ||
| 629 | } | 629 | } |
| 630 | else if (ap.second.isDictionary()) | 630 | else if (ap.second.isDictionary()) |
| 631 | { | 631 | { |
| 632 | - for (auto& ap2: QPDFDictItems(ap.second)) | 632 | + for (auto& ap2: ap.second.ditems()) |
| 633 | { | 633 | { |
| 634 | if (ap2.second.isStream()) | 634 | if (ap2.second.isStream()) |
| 635 | { | 635 | { |
libqpdf/QPDFObjectHandle.cc
| @@ -705,6 +705,12 @@ QPDFObjectHandle::getInlineImageValue() | @@ -705,6 +705,12 @@ QPDFObjectHandle::getInlineImageValue() | ||
| 705 | 705 | ||
| 706 | // Array accessors | 706 | // Array accessors |
| 707 | 707 | ||
| 708 | +QPDFObjectHandle::QPDFArrayItems | ||
| 709 | +QPDFObjectHandle::aitems() | ||
| 710 | +{ | ||
| 711 | + return QPDFArrayItems(*this); | ||
| 712 | +} | ||
| 713 | + | ||
| 708 | int | 714 | int |
| 709 | QPDFObjectHandle::getArrayNItems() | 715 | QPDFObjectHandle::getArrayNItems() |
| 710 | { | 716 | { |
| @@ -931,6 +937,12 @@ QPDFObjectHandle::eraseItem(int at) | @@ -931,6 +937,12 @@ QPDFObjectHandle::eraseItem(int at) | ||
| 931 | 937 | ||
| 932 | // Dictionary accessors | 938 | // Dictionary accessors |
| 933 | 939 | ||
| 940 | +QPDFObjectHandle::QPDFDictItems | ||
| 941 | +QPDFObjectHandle::ditems() | ||
| 942 | +{ | ||
| 943 | + return QPDFDictItems(*this); | ||
| 944 | +} | ||
| 945 | + | ||
| 934 | bool | 946 | bool |
| 935 | QPDFObjectHandle::hasKey(std::string const& key) | 947 | QPDFObjectHandle::hasKey(std::string const& key) |
| 936 | { | 948 | { |
| @@ -3211,43 +3223,44 @@ QPDFObjectHandle::warn(QPDF* qpdf, QPDFExc const& e) | @@ -3211,43 +3223,44 @@ QPDFObjectHandle::warn(QPDF* qpdf, QPDFExc const& e) | ||
| 3211 | } | 3223 | } |
| 3212 | } | 3224 | } |
| 3213 | 3225 | ||
| 3214 | -QPDFDictItems::QPDFDictItems(QPDFObjectHandle const& oh) : | 3226 | +QPDFObjectHandle::QPDFDictItems::QPDFDictItems(QPDFObjectHandle const& oh) : |
| 3215 | oh(oh) | 3227 | oh(oh) |
| 3216 | { | 3228 | { |
| 3217 | } | 3229 | } |
| 3218 | 3230 | ||
| 3219 | -QPDFDictItems::iterator& | ||
| 3220 | -QPDFDictItems::iterator::operator++() | 3231 | +QPDFObjectHandle::QPDFDictItems::iterator& |
| 3232 | +QPDFObjectHandle::QPDFDictItems::iterator::operator++() | ||
| 3221 | { | 3233 | { |
| 3222 | ++this->m->iter; | 3234 | ++this->m->iter; |
| 3223 | updateIValue(); | 3235 | updateIValue(); |
| 3224 | return *this; | 3236 | return *this; |
| 3225 | } | 3237 | } |
| 3226 | 3238 | ||
| 3227 | -QPDFDictItems::iterator& | ||
| 3228 | -QPDFDictItems::iterator::operator--() | 3239 | +QPDFObjectHandle::QPDFDictItems::iterator& |
| 3240 | +QPDFObjectHandle::QPDFDictItems::iterator::operator--() | ||
| 3229 | { | 3241 | { |
| 3230 | --this->m->iter; | 3242 | --this->m->iter; |
| 3231 | updateIValue(); | 3243 | updateIValue(); |
| 3232 | return *this; | 3244 | return *this; |
| 3233 | } | 3245 | } |
| 3234 | 3246 | ||
| 3235 | -QPDFDictItems::iterator::reference | ||
| 3236 | -QPDFDictItems::iterator:: operator*() | 3247 | +QPDFObjectHandle::QPDFDictItems::iterator::reference |
| 3248 | +QPDFObjectHandle::QPDFDictItems::iterator:: operator*() | ||
| 3237 | { | 3249 | { |
| 3238 | updateIValue(); | 3250 | updateIValue(); |
| 3239 | return this->ivalue; | 3251 | return this->ivalue; |
| 3240 | } | 3252 | } |
| 3241 | 3253 | ||
| 3242 | -QPDFDictItems::iterator::pointer | ||
| 3243 | -QPDFDictItems::iterator::operator->() | 3254 | +QPDFObjectHandle::QPDFDictItems::iterator::pointer |
| 3255 | +QPDFObjectHandle::QPDFDictItems::iterator::operator->() | ||
| 3244 | { | 3256 | { |
| 3245 | updateIValue(); | 3257 | updateIValue(); |
| 3246 | return &this->ivalue; | 3258 | return &this->ivalue; |
| 3247 | } | 3259 | } |
| 3248 | 3260 | ||
| 3249 | bool | 3261 | bool |
| 3250 | -QPDFDictItems::iterator::operator==(iterator const& other) const | 3262 | +QPDFObjectHandle::QPDFDictItems::iterator::operator==( |
| 3263 | + iterator const& other) const | ||
| 3251 | { | 3264 | { |
| 3252 | if (this->m->is_end && other.m->is_end) | 3265 | if (this->m->is_end && other.m->is_end) |
| 3253 | { | 3266 | { |
| @@ -3260,14 +3273,15 @@ QPDFDictItems::iterator::operator==(iterator const& other) const | @@ -3260,14 +3273,15 @@ QPDFDictItems::iterator::operator==(iterator const& other) const | ||
| 3260 | return (this->ivalue.first == other.ivalue.first); | 3273 | return (this->ivalue.first == other.ivalue.first); |
| 3261 | } | 3274 | } |
| 3262 | 3275 | ||
| 3263 | -QPDFDictItems::iterator::iterator(QPDFObjectHandle& oh, bool for_begin) : | 3276 | +QPDFObjectHandle::QPDFDictItems::iterator::iterator( |
| 3277 | + QPDFObjectHandle& oh, bool for_begin) : | ||
| 3264 | m(new Members(oh, for_begin)) | 3278 | m(new Members(oh, for_begin)) |
| 3265 | { | 3279 | { |
| 3266 | updateIValue(); | 3280 | updateIValue(); |
| 3267 | } | 3281 | } |
| 3268 | 3282 | ||
| 3269 | void | 3283 | void |
| 3270 | -QPDFDictItems::iterator::updateIValue() | 3284 | +QPDFObjectHandle::QPDFDictItems::iterator::updateIValue() |
| 3271 | { | 3285 | { |
| 3272 | this->m->is_end = (this->m->iter == this->m->keys.end()); | 3286 | this->m->is_end = (this->m->iter == this->m->keys.end()); |
| 3273 | if (this->m->is_end) | 3287 | if (this->m->is_end) |
| @@ -3282,7 +3296,7 @@ QPDFDictItems::iterator::updateIValue() | @@ -3282,7 +3296,7 @@ QPDFDictItems::iterator::updateIValue() | ||
| 3282 | } | 3296 | } |
| 3283 | } | 3297 | } |
| 3284 | 3298 | ||
| 3285 | -QPDFDictItems::iterator::Members::Members( | 3299 | +QPDFObjectHandle::QPDFDictItems::iterator::Members::Members( |
| 3286 | QPDFObjectHandle& oh, bool for_begin) : | 3300 | QPDFObjectHandle& oh, bool for_begin) : |
| 3287 | oh(oh) | 3301 | oh(oh) |
| 3288 | { | 3302 | { |
| @@ -3290,25 +3304,25 @@ QPDFDictItems::iterator::Members::Members( | @@ -3290,25 +3304,25 @@ QPDFDictItems::iterator::Members::Members( | ||
| 3290 | this->iter = for_begin ? this->keys.begin() : this->keys.end(); | 3304 | this->iter = for_begin ? this->keys.begin() : this->keys.end(); |
| 3291 | } | 3305 | } |
| 3292 | 3306 | ||
| 3293 | -QPDFDictItems::iterator | ||
| 3294 | -QPDFDictItems::begin() | 3307 | +QPDFObjectHandle::QPDFDictItems::iterator |
| 3308 | +QPDFObjectHandle::QPDFDictItems::begin() | ||
| 3295 | { | 3309 | { |
| 3296 | return iterator(oh, true); | 3310 | return iterator(oh, true); |
| 3297 | } | 3311 | } |
| 3298 | 3312 | ||
| 3299 | -QPDFDictItems::iterator | ||
| 3300 | -QPDFDictItems::end() | 3313 | +QPDFObjectHandle::QPDFDictItems::iterator |
| 3314 | +QPDFObjectHandle::QPDFDictItems::end() | ||
| 3301 | { | 3315 | { |
| 3302 | return iterator(oh, false); | 3316 | return iterator(oh, false); |
| 3303 | } | 3317 | } |
| 3304 | 3318 | ||
| 3305 | -QPDFArrayItems::QPDFArrayItems(QPDFObjectHandle const& oh) : | 3319 | +QPDFObjectHandle::QPDFArrayItems::QPDFArrayItems(QPDFObjectHandle const& oh) : |
| 3306 | oh(oh) | 3320 | oh(oh) |
| 3307 | { | 3321 | { |
| 3308 | } | 3322 | } |
| 3309 | 3323 | ||
| 3310 | -QPDFArrayItems::iterator& | ||
| 3311 | -QPDFArrayItems::iterator::operator++() | 3324 | +QPDFObjectHandle::QPDFArrayItems::iterator& |
| 3325 | +QPDFObjectHandle::QPDFArrayItems::iterator::operator++() | ||
| 3312 | { | 3326 | { |
| 3313 | if (! this->m->is_end) | 3327 | if (! this->m->is_end) |
| 3314 | { | 3328 | { |
| @@ -3318,8 +3332,8 @@ QPDFArrayItems::iterator::operator++() | @@ -3318,8 +3332,8 @@ QPDFArrayItems::iterator::operator++() | ||
| 3318 | return *this; | 3332 | return *this; |
| 3319 | } | 3333 | } |
| 3320 | 3334 | ||
| 3321 | -QPDFArrayItems::iterator& | ||
| 3322 | -QPDFArrayItems::iterator::operator--() | 3335 | +QPDFObjectHandle::QPDFArrayItems::iterator& |
| 3336 | +QPDFObjectHandle::QPDFArrayItems::iterator::operator--() | ||
| 3323 | { | 3337 | { |
| 3324 | if (this->m->item_number > 0) | 3338 | if (this->m->item_number > 0) |
| 3325 | { | 3339 | { |
| @@ -3329,34 +3343,36 @@ QPDFArrayItems::iterator::operator--() | @@ -3329,34 +3343,36 @@ QPDFArrayItems::iterator::operator--() | ||
| 3329 | return *this; | 3343 | return *this; |
| 3330 | } | 3344 | } |
| 3331 | 3345 | ||
| 3332 | -QPDFArrayItems::iterator::reference | ||
| 3333 | -QPDFArrayItems::iterator:: operator*() | 3346 | +QPDFObjectHandle::QPDFArrayItems::iterator::reference |
| 3347 | +QPDFObjectHandle::QPDFArrayItems::iterator:: operator*() | ||
| 3334 | { | 3348 | { |
| 3335 | updateIValue(); | 3349 | updateIValue(); |
| 3336 | return this->ivalue; | 3350 | return this->ivalue; |
| 3337 | } | 3351 | } |
| 3338 | 3352 | ||
| 3339 | -QPDFArrayItems::iterator::pointer | ||
| 3340 | -QPDFArrayItems::iterator::operator->() | 3353 | +QPDFObjectHandle::QPDFArrayItems::iterator::pointer |
| 3354 | +QPDFObjectHandle::QPDFArrayItems::iterator::operator->() | ||
| 3341 | { | 3355 | { |
| 3342 | updateIValue(); | 3356 | updateIValue(); |
| 3343 | return &this->ivalue; | 3357 | return &this->ivalue; |
| 3344 | } | 3358 | } |
| 3345 | 3359 | ||
| 3346 | bool | 3360 | bool |
| 3347 | -QPDFArrayItems::iterator::operator==(iterator const& other) const | 3361 | +QPDFObjectHandle::QPDFArrayItems::iterator::operator==( |
| 3362 | + iterator const& other) const | ||
| 3348 | { | 3363 | { |
| 3349 | return (this->m->item_number == other.m->item_number); | 3364 | return (this->m->item_number == other.m->item_number); |
| 3350 | } | 3365 | } |
| 3351 | 3366 | ||
| 3352 | -QPDFArrayItems::iterator::iterator(QPDFObjectHandle& oh, bool for_begin) : | 3367 | +QPDFObjectHandle::QPDFArrayItems::iterator::iterator( |
| 3368 | + QPDFObjectHandle& oh, bool for_begin) : | ||
| 3353 | m(new Members(oh, for_begin)) | 3369 | m(new Members(oh, for_begin)) |
| 3354 | { | 3370 | { |
| 3355 | updateIValue(); | 3371 | updateIValue(); |
| 3356 | } | 3372 | } |
| 3357 | 3373 | ||
| 3358 | void | 3374 | void |
| 3359 | -QPDFArrayItems::iterator::updateIValue() | 3375 | +QPDFObjectHandle::QPDFArrayItems::iterator::updateIValue() |
| 3360 | { | 3376 | { |
| 3361 | this->m->is_end = (this->m->item_number >= this->m->oh.getArrayNItems()); | 3377 | this->m->is_end = (this->m->item_number >= this->m->oh.getArrayNItems()); |
| 3362 | if (this->m->is_end) | 3378 | if (this->m->is_end) |
| @@ -3369,21 +3385,21 @@ QPDFArrayItems::iterator::updateIValue() | @@ -3369,21 +3385,21 @@ QPDFArrayItems::iterator::updateIValue() | ||
| 3369 | } | 3385 | } |
| 3370 | } | 3386 | } |
| 3371 | 3387 | ||
| 3372 | -QPDFArrayItems::iterator::Members::Members( | 3388 | +QPDFObjectHandle::QPDFArrayItems::iterator::Members::Members( |
| 3373 | QPDFObjectHandle& oh, bool for_begin) : | 3389 | QPDFObjectHandle& oh, bool for_begin) : |
| 3374 | oh(oh) | 3390 | oh(oh) |
| 3375 | { | 3391 | { |
| 3376 | this->item_number = for_begin ? 0 : oh.getArrayNItems(); | 3392 | this->item_number = for_begin ? 0 : oh.getArrayNItems(); |
| 3377 | } | 3393 | } |
| 3378 | 3394 | ||
| 3379 | -QPDFArrayItems::iterator | ||
| 3380 | -QPDFArrayItems::begin() | 3395 | +QPDFObjectHandle::QPDFArrayItems::iterator |
| 3396 | +QPDFObjectHandle::QPDFArrayItems::begin() | ||
| 3381 | { | 3397 | { |
| 3382 | return iterator(oh, true); | 3398 | return iterator(oh, true); |
| 3383 | } | 3399 | } |
| 3384 | 3400 | ||
| 3385 | -QPDFArrayItems::iterator | ||
| 3386 | -QPDFArrayItems::end() | 3401 | +QPDFObjectHandle::QPDFArrayItems::iterator |
| 3402 | +QPDFObjectHandle::QPDFArrayItems::end() | ||
| 3387 | { | 3403 | { |
| 3388 | return iterator(oh, false); | 3404 | return iterator(oh, false); |
| 3389 | } | 3405 | } |
manual/qpdf-manual.xml
| @@ -5190,11 +5190,10 @@ print "\n"; | @@ -5190,11 +5190,10 @@ print "\n"; | ||
| 5190 | <itemizedlist> | 5190 | <itemizedlist> |
| 5191 | <listitem> | 5191 | <listitem> |
| 5192 | <para> | 5192 | <para> |
| 5193 | - Add <classname>QPDFDictItems</classname> and | ||
| 5194 | - <classname>QPDFArrayItems</classname> wrappers around | ||
| 5195 | - <classname>QPDFObjectHandle</classname>, allowing C++-style | ||
| 5196 | - iteration, including range-for iteration, over dictionary | ||
| 5197 | - and array QPDFObjectHandles. See comments in | 5193 | + Add <function>QPDFObjectHandle::ditems()</function> and |
| 5194 | + <function>QPDFObjectHandle::aitems()</function> that enable | ||
| 5195 | + C++-style iteration, including range-for iteration, over | ||
| 5196 | + dictionary and array QPDFObjectHandles. See comments in | ||
| 5198 | <filename>include/qpdf/QPDFObjectHandle.hh</filename> and | 5197 | <filename>include/qpdf/QPDFObjectHandle.hh</filename> and |
| 5199 | <filename>examples/pdf-name-number-tree.cc</filename> for | 5198 | <filename>examples/pdf-name-number-tree.cc</filename> for |
| 5200 | details. | 5199 | details. |
qpdf/qpdf.cc
| @@ -4104,7 +4104,7 @@ static void do_list_attachments(QPDF& pdf, Options& o) | @@ -4104,7 +4104,7 @@ static void do_list_attachments(QPDF& pdf, Options& o) | ||
| 4104 | << std::endl; | 4104 | << std::endl; |
| 4105 | } | 4105 | } |
| 4106 | std::cout << " all data streams:" << std::endl; | 4106 | std::cout << " all data streams:" << std::endl; |
| 4107 | - for (auto i2: QPDFDictItems(efoh->getEmbeddedFileStreams())) | 4107 | + for (auto i2: efoh->getEmbeddedFileStreams().ditems()) |
| 4108 | { | 4108 | { |
| 4109 | std::cout << " " << i2.first << " -> " | 4109 | std::cout << " " << i2.first << " -> " |
| 4110 | << i2.second.getObjGen() | 4110 | << i2.second.getObjGen() |
qpdf/test_driver.cc
| @@ -352,7 +352,7 @@ void runtest(int n, char const* filename1, char const* arg2) | @@ -352,7 +352,7 @@ void runtest(int n, char const* filename1, char const* arg2) | ||
| 352 | std::cout << "/QTest is an array with " | 352 | std::cout << "/QTest is an array with " |
| 353 | << qtest.getArrayNItems() << " items" << std::endl; | 353 | << qtest.getArrayNItems() << " items" << std::endl; |
| 354 | int i = 0; | 354 | int i = 0; |
| 355 | - for (auto& iter: QPDFArrayItems(qtest)) | 355 | + for (auto& iter: qtest.aitems()) |
| 356 | { | 356 | { |
| 357 | QTC::TC("qpdf", "main QTest array indirect", | 357 | QTC::TC("qpdf", "main QTest array indirect", |
| 358 | iter.isIndirect() ? 1 : 0); | 358 | iter.isIndirect() ? 1 : 0); |
| @@ -366,7 +366,7 @@ void runtest(int n, char const* filename1, char const* arg2) | @@ -366,7 +366,7 @@ void runtest(int n, char const* filename1, char const* arg2) | ||
| 366 | { | 366 | { |
| 367 | QTC::TC("qpdf", "main QTest dictionary"); | 367 | QTC::TC("qpdf", "main QTest dictionary"); |
| 368 | std::cout << "/QTest is a dictionary" << std::endl; | 368 | std::cout << "/QTest is a dictionary" << std::endl; |
| 369 | - for (auto& iter: QPDFDictItems(qtest)) | 369 | + for (auto& iter: qtest.ditems()) |
| 370 | { | 370 | { |
| 371 | QTC::TC("qpdf", "main QTest dictionary indirect", | 371 | QTC::TC("qpdf", "main QTest dictionary indirect", |
| 372 | iter.second.isIndirect() ? 1 : 0); | 372 | iter.second.isIndirect() ? 1 : 0); |
| @@ -1545,7 +1545,7 @@ void runtest(int n, char const* filename1, char const* arg2) | @@ -1545,7 +1545,7 @@ void runtest(int n, char const* filename1, char const* arg2) | ||
| 1545 | assert(array.isArray()); | 1545 | assert(array.isArray()); |
| 1546 | { | 1546 | { |
| 1547 | // Exercise iterators directly | 1547 | // Exercise iterators directly |
| 1548 | - QPDFArrayItems ai(array); | 1548 | + auto ai = array.aitems(); |
| 1549 | auto i = ai.begin(); | 1549 | auto i = ai.begin(); |
| 1550 | assert(i->getName() == "/Item0"); | 1550 | assert(i->getName() == "/Item0"); |
| 1551 | auto& i_value = *i; | 1551 | auto& i_value = *i; |
| @@ -1565,7 +1565,7 @@ void runtest(int n, char const* filename1, char const* arg2) | @@ -1565,7 +1565,7 @@ void runtest(int n, char const* filename1, char const* arg2) | ||
| 1565 | assert(dictionary.isDictionary()); | 1565 | assert(dictionary.isDictionary()); |
| 1566 | { | 1566 | { |
| 1567 | // Exercise iterators directly | 1567 | // Exercise iterators directly |
| 1568 | - QPDFDictItems di(dictionary); | 1568 | + auto di = dictionary.ditems(); |
| 1569 | auto i = di.begin(); | 1569 | auto i = di.begin(); |
| 1570 | assert(i->first == "/Key1"); | 1570 | assert(i->first == "/Key1"); |
| 1571 | auto& i_value = *i; | 1571 | auto& i_value = *i; |