Commit 75fe4f60c3f59af30cb1d8f2b5902d866c05550a
1 parent
38edca82
Use anonymous namespaces for file-private classes
Showing
15 changed files
with
447 additions
and
374 deletions
ChangeLog
| ... | ... | @@ -6,7 +6,8 @@ |
| 6 | 6 | qpdf 11. |
| 7 | 7 | |
| 8 | 8 | * Perform code cleanup including some source-compatible but not |
| 9 | - binary compatible changes to function signatures. | |
| 9 | + binary compatible changes to function signatures, use of anonymous | |
| 10 | + namespaces, and use of "= default" and "= delete" in declarations. | |
| 10 | 11 | |
| 11 | 12 | 2022-04-09 Jay Berkenbilt <ejb@ql.org> |
| 12 | 13 | ... | ... |
TODO
| ... | ... | @@ -479,8 +479,6 @@ This is a list of changes to make next time there is an ABI change. |
| 479 | 479 | Comments appear in the code prefixed by "ABI". Always Search for ABI |
| 480 | 480 | in source and header files to find items not listed here. |
| 481 | 481 | |
| 482 | -* See where anonymous namespaces can be used to keep things private to | |
| 483 | - a source file. Search for `(class|struct)` in **/*.cc. | |
| 484 | 482 | * Having QPDFObjectHandle setters return Class& to allow for |
| 485 | 483 | use of fluent interfaces. This includes array and dictionary |
| 486 | 484 | mutators. | ... | ... |
libqpdf/Pl_DCT.cc
| ... | ... | @@ -14,12 +14,15 @@ |
| 14 | 14 | # error "qpdf does not support libjpeg built with BITS_IN_JSAMPLE != 8" |
| 15 | 15 | #endif |
| 16 | 16 | |
| 17 | -struct qpdf_jpeg_error_mgr | |
| 17 | +namespace | |
| 18 | 18 | { |
| 19 | - struct jpeg_error_mgr pub; | |
| 20 | - jmp_buf jmpbuf; | |
| 21 | - std::string msg; | |
| 22 | -}; | |
| 19 | + struct qpdf_jpeg_error_mgr | |
| 20 | + { | |
| 21 | + struct jpeg_error_mgr pub; | |
| 22 | + jmp_buf jmpbuf; | |
| 23 | + std::string msg; | |
| 24 | + }; | |
| 25 | +} // namespace | |
| 23 | 26 | |
| 24 | 27 | static void |
| 25 | 28 | error_handler(j_common_ptr cinfo) |
| ... | ... | @@ -147,13 +150,16 @@ Pl_DCT::finish() |
| 147 | 150 | } |
| 148 | 151 | } |
| 149 | 152 | |
| 150 | -struct dct_pipeline_dest | |
| 153 | +namespace | |
| 151 | 154 | { |
| 152 | - struct jpeg_destination_mgr pub; /* public fields */ | |
| 153 | - unsigned char* buffer; | |
| 154 | - size_t size; | |
| 155 | - Pipeline* next; | |
| 156 | -}; | |
| 155 | + struct dct_pipeline_dest | |
| 156 | + { | |
| 157 | + struct jpeg_destination_mgr pub; /* public fields */ | |
| 158 | + unsigned char* buffer; | |
| 159 | + size_t size; | |
| 160 | + Pipeline* next; | |
| 161 | + }; | |
| 162 | +} // namespace | |
| 157 | 163 | |
| 158 | 164 | static void |
| 159 | 165 | init_pipeline_destination(j_compress_ptr) | ... | ... |
libqpdf/QPDF.cc
| ... | ... | @@ -50,60 +50,64 @@ static char const* EMPTY_PDF = ( |
| 50 | 50 | "110\n" |
| 51 | 51 | "%%EOF\n"); |
| 52 | 52 | |
| 53 | -class InvalidInputSource: public InputSource | |
| 53 | +namespace | |
| 54 | 54 | { |
| 55 | - public: | |
| 56 | - virtual ~InvalidInputSource() = default; | |
| 57 | - virtual qpdf_offset_t | |
| 58 | - findAndSkipNextEOL() override | |
| 55 | + class InvalidInputSource: public InputSource | |
| 59 | 56 | { |
| 60 | - throwException(); | |
| 61 | - return 0; | |
| 62 | - } | |
| 63 | - virtual std::string const& | |
| 64 | - getName() const override | |
| 65 | - { | |
| 66 | - static std::string name("closed input source"); | |
| 67 | - return name; | |
| 68 | - } | |
| 69 | - virtual qpdf_offset_t | |
| 70 | - tell() override | |
| 71 | - { | |
| 72 | - throwException(); | |
| 73 | - return 0; | |
| 74 | - } | |
| 75 | - virtual void | |
| 76 | - seek(qpdf_offset_t offset, int whence) override | |
| 77 | - { | |
| 78 | - throwException(); | |
| 79 | - } | |
| 80 | - virtual void | |
| 81 | - rewind() override | |
| 82 | - { | |
| 83 | - throwException(); | |
| 84 | - } | |
| 85 | - virtual size_t | |
| 86 | - read(char* buffer, size_t length) override | |
| 87 | - { | |
| 88 | - throwException(); | |
| 89 | - return 0; | |
| 90 | - } | |
| 91 | - virtual void | |
| 92 | - unreadCh(char ch) override | |
| 93 | - { | |
| 94 | - throwException(); | |
| 95 | - } | |
| 96 | - | |
| 97 | - private: | |
| 98 | - void | |
| 99 | - throwException() | |
| 100 | - { | |
| 101 | - throw std::logic_error( | |
| 102 | - "QPDF operation attempted on a QPDF object with no input source." | |
| 103 | - " QPDF operations are invalid before processFile (or another" | |
| 104 | - " process method) or after closeInputSource"); | |
| 105 | - } | |
| 106 | -}; | |
| 57 | + public: | |
| 58 | + virtual ~InvalidInputSource() = default; | |
| 59 | + virtual qpdf_offset_t | |
| 60 | + findAndSkipNextEOL() override | |
| 61 | + { | |
| 62 | + throwException(); | |
| 63 | + return 0; | |
| 64 | + } | |
| 65 | + virtual std::string const& | |
| 66 | + getName() const override | |
| 67 | + { | |
| 68 | + static std::string name("closed input source"); | |
| 69 | + return name; | |
| 70 | + } | |
| 71 | + virtual qpdf_offset_t | |
| 72 | + tell() override | |
| 73 | + { | |
| 74 | + throwException(); | |
| 75 | + return 0; | |
| 76 | + } | |
| 77 | + virtual void | |
| 78 | + seek(qpdf_offset_t offset, int whence) override | |
| 79 | + { | |
| 80 | + throwException(); | |
| 81 | + } | |
| 82 | + virtual void | |
| 83 | + rewind() override | |
| 84 | + { | |
| 85 | + throwException(); | |
| 86 | + } | |
| 87 | + virtual size_t | |
| 88 | + read(char* buffer, size_t length) override | |
| 89 | + { | |
| 90 | + throwException(); | |
| 91 | + return 0; | |
| 92 | + } | |
| 93 | + virtual void | |
| 94 | + unreadCh(char ch) override | |
| 95 | + { | |
| 96 | + throwException(); | |
| 97 | + } | |
| 98 | + | |
| 99 | + private: | |
| 100 | + void | |
| 101 | + throwException() | |
| 102 | + { | |
| 103 | + throw std::logic_error( | |
| 104 | + "QPDF operation attempted on a QPDF object with no input " | |
| 105 | + "source." | |
| 106 | + " QPDF operations are invalid before processFile (or another" | |
| 107 | + " process method) or after closeInputSource"); | |
| 108 | + } | |
| 109 | + }; | |
| 110 | +} // namespace | |
| 107 | 111 | |
| 108 | 112 | QPDF::ForeignStreamData::ForeignStreamData( |
| 109 | 113 | std::shared_ptr<EncryptionParameters> encp, | ... | ... |
libqpdf/QPDFAcroFormDocumentHelper.cc
| ... | ... | @@ -543,20 +543,25 @@ QPDFAcroFormDocumentHelper::adjustInheritedFields( |
| 543 | 543 | } |
| 544 | 544 | } |
| 545 | 545 | |
| 546 | -class ResourceReplacer: public QPDFObjectHandle::TokenFilter | |
| 546 | +namespace | |
| 547 | 547 | { |
| 548 | - public: | |
| 549 | - ResourceReplacer( | |
| 550 | - std::map<std::string, std::map<std::string, std::string>> const& dr_map, | |
| 551 | - std::map<std::string, std::map<std::string, std::set<size_t>>> const& | |
| 552 | - rnames); | |
| 553 | - virtual ~ResourceReplacer() = default; | |
| 554 | - virtual void handleToken(QPDFTokenizer::Token const&) override; | |
| 555 | - | |
| 556 | - private: | |
| 557 | - size_t offset; | |
| 558 | - std::map<std::string, std::map<size_t, std::string>> to_replace; | |
| 559 | -}; | |
| 548 | + class ResourceReplacer: public QPDFObjectHandle::TokenFilter | |
| 549 | + { | |
| 550 | + public: | |
| 551 | + ResourceReplacer( | |
| 552 | + std::map<std::string, std::map<std::string, std::string>> const& | |
| 553 | + dr_map, | |
| 554 | + std::map< | |
| 555 | + std::string, | |
| 556 | + std::map<std::string, std::set<size_t>>> const& rnames); | |
| 557 | + virtual ~ResourceReplacer() = default; | |
| 558 | + virtual void handleToken(QPDFTokenizer::Token const&) override; | |
| 559 | + | |
| 560 | + private: | |
| 561 | + size_t offset; | |
| 562 | + std::map<std::string, std::map<size_t, std::string>> to_replace; | |
| 563 | + }; | |
| 564 | +} // namespace | |
| 560 | 565 | |
| 561 | 566 | ResourceReplacer::ResourceReplacer( |
| 562 | 567 | std::map<std::string, std::map<std::string, std::string>> const& dr_map, | ... | ... |
libqpdf/QPDFFormFieldObjectHelper.cc
| ... | ... | @@ -508,29 +508,32 @@ QPDFFormFieldObjectHelper::generateAppearance(QPDFAnnotationObjectHelper& aoh) |
| 508 | 508 | } |
| 509 | 509 | } |
| 510 | 510 | |
| 511 | -class ValueSetter: public QPDFObjectHandle::TokenFilter | |
| 512 | -{ | |
| 513 | - public: | |
| 514 | - ValueSetter( | |
| 515 | - std::string const& DA, | |
| 516 | - std::string const& V, | |
| 517 | - std::vector<std::string> const& opt, | |
| 518 | - double tf, | |
| 519 | - QPDFObjectHandle::Rectangle const& bbox); | |
| 520 | - virtual ~ValueSetter() = default; | |
| 521 | - virtual void handleToken(QPDFTokenizer::Token const&); | |
| 522 | - virtual void handleEOF(); | |
| 523 | - void writeAppearance(); | |
| 524 | - | |
| 525 | - private: | |
| 526 | - std::string DA; | |
| 527 | - std::string V; | |
| 528 | - std::vector<std::string> opt; | |
| 529 | - double tf; | |
| 530 | - QPDFObjectHandle::Rectangle bbox; | |
| 531 | - enum { st_top, st_bmc, st_emc, st_end } state; | |
| 532 | - bool replaced; | |
| 533 | -}; | |
| 511 | +namespace | |
| 512 | +{ | |
| 513 | + class ValueSetter: public QPDFObjectHandle::TokenFilter | |
| 514 | + { | |
| 515 | + public: | |
| 516 | + ValueSetter( | |
| 517 | + std::string const& DA, | |
| 518 | + std::string const& V, | |
| 519 | + std::vector<std::string> const& opt, | |
| 520 | + double tf, | |
| 521 | + QPDFObjectHandle::Rectangle const& bbox); | |
| 522 | + virtual ~ValueSetter() = default; | |
| 523 | + virtual void handleToken(QPDFTokenizer::Token const&); | |
| 524 | + virtual void handleEOF(); | |
| 525 | + void writeAppearance(); | |
| 526 | + | |
| 527 | + private: | |
| 528 | + std::string DA; | |
| 529 | + std::string V; | |
| 530 | + std::vector<std::string> opt; | |
| 531 | + double tf; | |
| 532 | + QPDFObjectHandle::Rectangle bbox; | |
| 533 | + enum { st_top, st_bmc, st_emc, st_end } state; | |
| 534 | + bool replaced; | |
| 535 | + }; | |
| 536 | +} // namespace | |
| 534 | 537 | |
| 535 | 538 | ValueSetter::ValueSetter( |
| 536 | 539 | std::string const& DA, |
| ... | ... | @@ -701,27 +704,30 @@ ValueSetter::writeAppearance() |
| 701 | 704 | write("ET\nQ\nEMC"); |
| 702 | 705 | } |
| 703 | 706 | |
| 704 | -class TfFinder: public QPDFObjectHandle::TokenFilter | |
| 707 | +namespace | |
| 705 | 708 | { |
| 706 | - public: | |
| 707 | - TfFinder(); | |
| 708 | - virtual ~TfFinder() | |
| 709 | + class TfFinder: public QPDFObjectHandle::TokenFilter | |
| 709 | 710 | { |
| 710 | - } | |
| 711 | - virtual void handleToken(QPDFTokenizer::Token const&); | |
| 712 | - double getTf(); | |
| 713 | - std::string getFontName(); | |
| 714 | - std::string getDA(); | |
| 715 | - | |
| 716 | - private: | |
| 717 | - double tf; | |
| 718 | - int tf_idx; | |
| 719 | - std::string font_name; | |
| 720 | - double last_num; | |
| 721 | - int last_num_idx; | |
| 722 | - std::string last_name; | |
| 723 | - std::vector<std::string> DA; | |
| 724 | -}; | |
| 711 | + public: | |
| 712 | + TfFinder(); | |
| 713 | + virtual ~TfFinder() | |
| 714 | + { | |
| 715 | + } | |
| 716 | + virtual void handleToken(QPDFTokenizer::Token const&); | |
| 717 | + double getTf(); | |
| 718 | + std::string getFontName(); | |
| 719 | + std::string getDA(); | |
| 720 | + | |
| 721 | + private: | |
| 722 | + double tf; | |
| 723 | + int tf_idx; | |
| 724 | + std::string font_name; | |
| 725 | + double last_num; | |
| 726 | + int last_num_idx; | |
| 727 | + std::string last_name; | |
| 728 | + std::vector<std::string> DA; | |
| 729 | + }; | |
| 730 | +} // namespace | |
| 725 | 731 | |
| 726 | 732 | TfFinder::TfFinder() : |
| 727 | 733 | tf(11.0), | ... | ... |
libqpdf/QPDFNameTreeObjectHelper.cc
| ... | ... | @@ -2,32 +2,35 @@ |
| 2 | 2 | |
| 3 | 3 | #include <qpdf/NNTree.hh> |
| 4 | 4 | |
| 5 | -class NameTreeDetails: public NNTreeDetails | |
| 5 | +namespace | |
| 6 | 6 | { |
| 7 | - public: | |
| 8 | - virtual std::string const& | |
| 9 | - itemsKey() const override | |
| 7 | + class NameTreeDetails: public NNTreeDetails | |
| 10 | 8 | { |
| 11 | - static std::string k("/Names"); | |
| 12 | - return k; | |
| 13 | - } | |
| 14 | - virtual bool | |
| 15 | - keyValid(QPDFObjectHandle oh) const override | |
| 16 | - { | |
| 17 | - return oh.isString(); | |
| 18 | - } | |
| 19 | - virtual int | |
| 20 | - compareKeys(QPDFObjectHandle a, QPDFObjectHandle b) const override | |
| 21 | - { | |
| 22 | - if (!(keyValid(a) && keyValid(b))) { | |
| 23 | - // We don't call this without calling keyValid first | |
| 24 | - throw std::logic_error("comparing invalid keys"); | |
| 9 | + public: | |
| 10 | + virtual std::string const& | |
| 11 | + itemsKey() const override | |
| 12 | + { | |
| 13 | + static std::string k("/Names"); | |
| 14 | + return k; | |
| 25 | 15 | } |
| 26 | - auto as = a.getUTF8Value(); | |
| 27 | - auto bs = b.getUTF8Value(); | |
| 28 | - return ((as < bs) ? -1 : (as > bs) ? 1 : 0); | |
| 29 | - } | |
| 30 | -}; | |
| 16 | + virtual bool | |
| 17 | + keyValid(QPDFObjectHandle oh) const override | |
| 18 | + { | |
| 19 | + return oh.isString(); | |
| 20 | + } | |
| 21 | + virtual int | |
| 22 | + compareKeys(QPDFObjectHandle a, QPDFObjectHandle b) const override | |
| 23 | + { | |
| 24 | + if (!(keyValid(a) && keyValid(b))) { | |
| 25 | + // We don't call this without calling keyValid first | |
| 26 | + throw std::logic_error("comparing invalid keys"); | |
| 27 | + } | |
| 28 | + auto as = a.getUTF8Value(); | |
| 29 | + auto bs = b.getUTF8Value(); | |
| 30 | + return ((as < bs) ? -1 : (as > bs) ? 1 : 0); | |
| 31 | + } | |
| 32 | + }; | |
| 33 | +} // namespace | |
| 31 | 34 | |
| 32 | 35 | static NameTreeDetails name_tree_details; |
| 33 | 36 | ... | ... |
libqpdf/QPDFNumberTreeObjectHelper.cc
| ... | ... | @@ -3,32 +3,35 @@ |
| 3 | 3 | #include <qpdf/NNTree.hh> |
| 4 | 4 | #include <qpdf/QIntC.hh> |
| 5 | 5 | |
| 6 | -class NumberTreeDetails: public NNTreeDetails | |
| 6 | +namespace | |
| 7 | 7 | { |
| 8 | - public: | |
| 9 | - virtual std::string const& | |
| 10 | - itemsKey() const override | |
| 8 | + class NumberTreeDetails: public NNTreeDetails | |
| 11 | 9 | { |
| 12 | - static std::string k("/Nums"); | |
| 13 | - return k; | |
| 14 | - } | |
| 15 | - virtual bool | |
| 16 | - keyValid(QPDFObjectHandle oh) const override | |
| 17 | - { | |
| 18 | - return oh.isInteger(); | |
| 19 | - } | |
| 20 | - virtual int | |
| 21 | - compareKeys(QPDFObjectHandle a, QPDFObjectHandle b) const override | |
| 22 | - { | |
| 23 | - if (!(keyValid(a) && keyValid(b))) { | |
| 24 | - // We don't call this without calling keyValid first | |
| 25 | - throw std::logic_error("comparing invalid keys"); | |
| 10 | + public: | |
| 11 | + virtual std::string const& | |
| 12 | + itemsKey() const override | |
| 13 | + { | |
| 14 | + static std::string k("/Nums"); | |
| 15 | + return k; | |
| 26 | 16 | } |
| 27 | - auto as = a.getIntValue(); | |
| 28 | - auto bs = b.getIntValue(); | |
| 29 | - return ((as < bs) ? -1 : (as > bs) ? 1 : 0); | |
| 30 | - } | |
| 31 | -}; | |
| 17 | + virtual bool | |
| 18 | + keyValid(QPDFObjectHandle oh) const override | |
| 19 | + { | |
| 20 | + return oh.isInteger(); | |
| 21 | + } | |
| 22 | + virtual int | |
| 23 | + compareKeys(QPDFObjectHandle a, QPDFObjectHandle b) const override | |
| 24 | + { | |
| 25 | + if (!(keyValid(a) && keyValid(b))) { | |
| 26 | + // We don't call this without calling keyValid first | |
| 27 | + throw std::logic_error("comparing invalid keys"); | |
| 28 | + } | |
| 29 | + auto as = a.getIntValue(); | |
| 30 | + auto bs = b.getIntValue(); | |
| 31 | + return ((as < bs) ? -1 : (as > bs) ? 1 : 0); | |
| 32 | + } | |
| 33 | + }; | |
| 34 | +} // namespace | |
| 32 | 35 | |
| 33 | 36 | static NumberTreeDetails number_tree_details; |
| 34 | 37 | ... | ... |
libqpdf/QPDFObjectHandle.cc
| ... | ... | @@ -32,9 +32,12 @@ |
| 32 | 32 | #include <stdexcept> |
| 33 | 33 | #include <stdlib.h> |
| 34 | 34 | |
| 35 | -class TerminateParsing | |
| 35 | +namespace | |
| 36 | 36 | { |
| 37 | -}; | |
| 37 | + class TerminateParsing | |
| 38 | + { | |
| 39 | + }; | |
| 40 | +} // namespace | |
| 38 | 41 | |
| 39 | 42 | QPDFObjectHandle::StreamDataProvider::StreamDataProvider(bool supports_retry) : |
| 40 | 43 | supports_retry(supports_retry) |
| ... | ... | @@ -74,23 +77,26 @@ QPDFObjectHandle::StreamDataProvider::supportsRetry() |
| 74 | 77 | return this->supports_retry; |
| 75 | 78 | } |
| 76 | 79 | |
| 77 | -class CoalesceProvider: public QPDFObjectHandle::StreamDataProvider | |
| 80 | +namespace | |
| 78 | 81 | { |
| 79 | - public: | |
| 80 | - CoalesceProvider( | |
| 81 | - QPDFObjectHandle containing_page, QPDFObjectHandle old_contents) : | |
| 82 | - containing_page(containing_page), | |
| 83 | - old_contents(old_contents) | |
| 82 | + class CoalesceProvider: public QPDFObjectHandle::StreamDataProvider | |
| 84 | 83 | { |
| 85 | - } | |
| 86 | - virtual ~CoalesceProvider() = default; | |
| 87 | - virtual void | |
| 88 | - provideStreamData(int objid, int generation, Pipeline* pipeline); | |
| 84 | + public: | |
| 85 | + CoalesceProvider( | |
| 86 | + QPDFObjectHandle containing_page, QPDFObjectHandle old_contents) : | |
| 87 | + containing_page(containing_page), | |
| 88 | + old_contents(old_contents) | |
| 89 | + { | |
| 90 | + } | |
| 91 | + virtual ~CoalesceProvider() = default; | |
| 92 | + virtual void | |
| 93 | + provideStreamData(int objid, int generation, Pipeline* pipeline); | |
| 89 | 94 | |
| 90 | - private: | |
| 91 | - QPDFObjectHandle containing_page; | |
| 92 | - QPDFObjectHandle old_contents; | |
| 93 | -}; | |
| 95 | + private: | |
| 96 | + QPDFObjectHandle containing_page; | |
| 97 | + QPDFObjectHandle old_contents; | |
| 98 | + }; | |
| 99 | +} // namespace | |
| 94 | 100 | |
| 95 | 101 | void |
| 96 | 102 | CoalesceProvider::provideStreamData(int, int, Pipeline* p) |
| ... | ... | @@ -167,18 +173,21 @@ QPDFObjectHandle::ParserCallbacks::terminateParsing() |
| 167 | 173 | throw TerminateParsing(); |
| 168 | 174 | } |
| 169 | 175 | |
| 170 | -class LastChar: public Pipeline | |
| 176 | +namespace | |
| 171 | 177 | { |
| 172 | - public: | |
| 173 | - LastChar(Pipeline* next); | |
| 174 | - virtual ~LastChar() = default; | |
| 175 | - virtual void write(unsigned char* data, size_t len); | |
| 176 | - virtual void finish(); | |
| 177 | - unsigned char getLastChar(); | |
| 178 | - | |
| 179 | - private: | |
| 180 | - unsigned char last_char; | |
| 181 | -}; | |
| 178 | + class LastChar: public Pipeline | |
| 179 | + { | |
| 180 | + public: | |
| 181 | + LastChar(Pipeline* next); | |
| 182 | + virtual ~LastChar() = default; | |
| 183 | + virtual void write(unsigned char* data, size_t len); | |
| 184 | + virtual void finish(); | |
| 185 | + unsigned char getLastChar(); | |
| 186 | + | |
| 187 | + private: | |
| 188 | + unsigned char last_char; | |
| 189 | + }; | |
| 190 | +} // namespace | |
| 182 | 191 | |
| 183 | 192 | LastChar::LastChar(Pipeline* next) : |
| 184 | 193 | Pipeline("lastchar", next), |
| ... | ... | @@ -293,21 +302,24 @@ QPDFObjectHandle::getTypeName() |
| 293 | 302 | } |
| 294 | 303 | } |
| 295 | 304 | |
| 296 | -template <class T> | |
| 297 | -class QPDFObjectTypeAccessor | |
| 305 | +namespace | |
| 298 | 306 | { |
| 299 | - public: | |
| 300 | - static bool | |
| 301 | - check(QPDFObject* o) | |
| 302 | - { | |
| 303 | - return (o && dynamic_cast<T*>(o)); | |
| 304 | - } | |
| 305 | - static bool | |
| 306 | - check(QPDFObject const* o) | |
| 307 | + template <class T> | |
| 308 | + class QPDFObjectTypeAccessor | |
| 307 | 309 | { |
| 308 | - return (o && dynamic_cast<T const*>(o)); | |
| 309 | - } | |
| 310 | -}; | |
| 310 | + public: | |
| 311 | + static bool | |
| 312 | + check(QPDFObject* o) | |
| 313 | + { | |
| 314 | + return (o && dynamic_cast<T*>(o)); | |
| 315 | + } | |
| 316 | + static bool | |
| 317 | + check(QPDFObject const* o) | |
| 318 | + { | |
| 319 | + return (o && dynamic_cast<T const*>(o)); | |
| 320 | + } | |
| 321 | + }; | |
| 322 | +} // namespace | |
| 311 | 323 | |
| 312 | 324 | bool |
| 313 | 325 | QPDFObjectHandle::isBool() |
| ... | ... | @@ -1435,40 +1447,46 @@ QPDFObjectHandle::replaceStreamData( |
| 1435 | 1447 | provider, filter, decode_parms); |
| 1436 | 1448 | } |
| 1437 | 1449 | |
| 1438 | -class FunctionProvider: public QPDFObjectHandle::StreamDataProvider | |
| 1450 | +namespace | |
| 1439 | 1451 | { |
| 1440 | - public: | |
| 1441 | - FunctionProvider(std::function<void(Pipeline*)> provider) : | |
| 1442 | - StreamDataProvider(false), | |
| 1443 | - p1(provider), | |
| 1444 | - p2(nullptr) | |
| 1445 | - { | |
| 1446 | - } | |
| 1447 | - FunctionProvider(std::function<bool(Pipeline*, bool, bool)> provider) : | |
| 1448 | - StreamDataProvider(true), | |
| 1449 | - p1(nullptr), | |
| 1450 | - p2(provider) | |
| 1452 | + class FunctionProvider: public QPDFObjectHandle::StreamDataProvider | |
| 1451 | 1453 | { |
| 1452 | - } | |
| 1454 | + public: | |
| 1455 | + FunctionProvider(std::function<void(Pipeline*)> provider) : | |
| 1456 | + StreamDataProvider(false), | |
| 1457 | + p1(provider), | |
| 1458 | + p2(nullptr) | |
| 1459 | + { | |
| 1460 | + } | |
| 1461 | + FunctionProvider(std::function<bool(Pipeline*, bool, bool)> provider) : | |
| 1462 | + StreamDataProvider(true), | |
| 1463 | + p1(nullptr), | |
| 1464 | + p2(provider) | |
| 1465 | + { | |
| 1466 | + } | |
| 1453 | 1467 | |
| 1454 | - virtual void | |
| 1455 | - provideStreamData(int, int, Pipeline* pipeline) override | |
| 1456 | - { | |
| 1457 | - p1(pipeline); | |
| 1458 | - } | |
| 1468 | + virtual void | |
| 1469 | + provideStreamData(int, int, Pipeline* pipeline) override | |
| 1470 | + { | |
| 1471 | + p1(pipeline); | |
| 1472 | + } | |
| 1459 | 1473 | |
| 1460 | - virtual bool | |
| 1461 | - provideStreamData( | |
| 1462 | - int, int, Pipeline* pipeline, bool suppress_warnings, bool will_retry) | |
| 1463 | - override | |
| 1464 | - { | |
| 1465 | - return p2(pipeline, suppress_warnings, will_retry); | |
| 1466 | - } | |
| 1474 | + virtual bool | |
| 1475 | + provideStreamData( | |
| 1476 | + int, | |
| 1477 | + int, | |
| 1478 | + Pipeline* pipeline, | |
| 1479 | + bool suppress_warnings, | |
| 1480 | + bool will_retry) override | |
| 1481 | + { | |
| 1482 | + return p2(pipeline, suppress_warnings, will_retry); | |
| 1483 | + } | |
| 1467 | 1484 | |
| 1468 | - private: | |
| 1469 | - std::function<void(Pipeline*)> p1; | |
| 1470 | - std::function<bool(Pipeline*, bool, bool)> p2; | |
| 1471 | -}; | |
| 1485 | + private: | |
| 1486 | + std::function<void(Pipeline*)> p1; | |
| 1487 | + std::function<bool(Pipeline*, bool, bool)> p2; | |
| 1488 | + }; | |
| 1489 | +} // namespace | |
| 1472 | 1490 | |
| 1473 | 1491 | void |
| 1474 | 1492 | QPDFObjectHandle::replaceStreamData( | ... | ... |
libqpdf/QPDFPageObjectHelper.cc
| ... | ... | @@ -11,20 +11,23 @@ |
| 11 | 11 | #include <qpdf/QUtil.hh> |
| 12 | 12 | #include <qpdf/ResourceFinder.hh> |
| 13 | 13 | |
| 14 | -class ContentProvider: public QPDFObjectHandle::StreamDataProvider | |
| 14 | +namespace | |
| 15 | 15 | { |
| 16 | - public: | |
| 17 | - ContentProvider(QPDFObjectHandle from_page) : | |
| 18 | - from_page(from_page) | |
| 16 | + class ContentProvider: public QPDFObjectHandle::StreamDataProvider | |
| 19 | 17 | { |
| 20 | - } | |
| 21 | - virtual ~ContentProvider() = default; | |
| 22 | - virtual void | |
| 23 | - provideStreamData(int objid, int generation, Pipeline* pipeline); | |
| 18 | + public: | |
| 19 | + ContentProvider(QPDFObjectHandle from_page) : | |
| 20 | + from_page(from_page) | |
| 21 | + { | |
| 22 | + } | |
| 23 | + virtual ~ContentProvider() = default; | |
| 24 | + virtual void | |
| 25 | + provideStreamData(int objid, int generation, Pipeline* pipeline); | |
| 24 | 26 | |
| 25 | - private: | |
| 26 | - QPDFObjectHandle from_page; | |
| 27 | -}; | |
| 27 | + private: | |
| 28 | + QPDFObjectHandle from_page; | |
| 29 | + }; | |
| 30 | +} // namespace | |
| 28 | 31 | |
| 29 | 32 | void |
| 30 | 33 | ContentProvider::provideStreamData(int, int, Pipeline* p) |
| ... | ... | @@ -39,23 +42,26 @@ ContentProvider::provideStreamData(int, int, Pipeline* p) |
| 39 | 42 | concat.manualFinish(); |
| 40 | 43 | } |
| 41 | 44 | |
| 42 | -class InlineImageTracker: public QPDFObjectHandle::TokenFilter | |
| 45 | +namespace | |
| 43 | 46 | { |
| 44 | - public: | |
| 45 | - InlineImageTracker(QPDF*, size_t min_size, QPDFObjectHandle resources); | |
| 46 | - virtual ~InlineImageTracker() = default; | |
| 47 | - virtual void handleToken(QPDFTokenizer::Token const&); | |
| 48 | - QPDFObjectHandle convertIIDict(QPDFObjectHandle odict); | |
| 49 | - | |
| 50 | - QPDF* qpdf; | |
| 51 | - size_t min_size; | |
| 52 | - QPDFObjectHandle resources; | |
| 53 | - std::string dict_str; | |
| 54 | - std::string bi_str; | |
| 55 | - int min_suffix; | |
| 56 | - bool any_images; | |
| 57 | - enum { st_top, st_bi } state; | |
| 58 | -}; | |
| 47 | + class InlineImageTracker: public QPDFObjectHandle::TokenFilter | |
| 48 | + { | |
| 49 | + public: | |
| 50 | + InlineImageTracker(QPDF*, size_t min_size, QPDFObjectHandle resources); | |
| 51 | + virtual ~InlineImageTracker() = default; | |
| 52 | + virtual void handleToken(QPDFTokenizer::Token const&); | |
| 53 | + QPDFObjectHandle convertIIDict(QPDFObjectHandle odict); | |
| 54 | + | |
| 55 | + QPDF* qpdf; | |
| 56 | + size_t min_size; | |
| 57 | + QPDFObjectHandle resources; | |
| 58 | + std::string dict_str; | |
| 59 | + std::string bi_str; | |
| 60 | + int min_suffix; | |
| 61 | + bool any_images; | |
| 62 | + enum { st_top, st_bi } state; | |
| 63 | + }; | |
| 64 | +} // namespace | |
| 59 | 65 | |
| 60 | 66 | InlineImageTracker::InlineImageTracker( |
| 61 | 67 | QPDF* qpdf, size_t min_size, QPDFObjectHandle resources) : | ... | ... |
libqpdf/QPDFTokenizer.cc
| ... | ... | @@ -20,22 +20,25 @@ is_delimiter(char ch) |
| 20 | 20 | return (strchr(" \t\n\v\f\r()<>[]{}/%", ch) != 0); |
| 21 | 21 | } |
| 22 | 22 | |
| 23 | -class QPDFWordTokenFinder: public InputSource::Finder | |
| 23 | +namespace | |
| 24 | 24 | { |
| 25 | - public: | |
| 26 | - QPDFWordTokenFinder( | |
| 27 | - std::shared_ptr<InputSource> is, std::string const& str) : | |
| 28 | - is(is), | |
| 29 | - str(str) | |
| 25 | + class QPDFWordTokenFinder: public InputSource::Finder | |
| 30 | 26 | { |
| 31 | - } | |
| 32 | - virtual ~QPDFWordTokenFinder() = default; | |
| 33 | - virtual bool check(); | |
| 34 | - | |
| 35 | - private: | |
| 36 | - std::shared_ptr<InputSource> is; | |
| 37 | - std::string str; | |
| 38 | -}; | |
| 27 | + public: | |
| 28 | + QPDFWordTokenFinder( | |
| 29 | + std::shared_ptr<InputSource> is, std::string const& str) : | |
| 30 | + is(is), | |
| 31 | + str(str) | |
| 32 | + { | |
| 33 | + } | |
| 34 | + virtual ~QPDFWordTokenFinder() = default; | |
| 35 | + virtual bool check(); | |
| 36 | + | |
| 37 | + private: | |
| 38 | + std::shared_ptr<InputSource> is; | |
| 39 | + std::string str; | |
| 40 | + }; | |
| 41 | +} // namespace | |
| 39 | 42 | |
| 40 | 43 | bool |
| 41 | 44 | QPDFWordTokenFinder::check() | ... | ... |
libqpdf/QPDF_Stream.cc
| ... | ... | @@ -19,38 +19,42 @@ |
| 19 | 19 | |
| 20 | 20 | #include <stdexcept> |
| 21 | 21 | |
| 22 | -class SF_Crypt: public QPDFStreamFilter | |
| 22 | +namespace | |
| 23 | 23 | { |
| 24 | - public: | |
| 25 | - SF_Crypt() = default; | |
| 26 | - virtual ~SF_Crypt() = default; | |
| 27 | - | |
| 28 | - virtual bool | |
| 29 | - setDecodeParms(QPDFObjectHandle decode_parms) | |
| 24 | + class SF_Crypt: public QPDFStreamFilter | |
| 30 | 25 | { |
| 31 | - if (decode_parms.isNull()) { | |
| 32 | - return true; | |
| 33 | - } | |
| 34 | - bool filterable = true; | |
| 35 | - for (auto const& key : decode_parms.getKeys()) { | |
| 36 | - if (((key == "/Type") || (key == "/Name")) && | |
| 37 | - ((!decode_parms.hasKey("/Type")) || | |
| 38 | - decode_parms.isDictionaryOfType("/CryptFilterDecodeParms"))) { | |
| 39 | - // we handle this in decryptStream | |
| 40 | - } else { | |
| 41 | - filterable = false; | |
| 26 | + public: | |
| 27 | + SF_Crypt() = default; | |
| 28 | + virtual ~SF_Crypt() = default; | |
| 29 | + | |
| 30 | + virtual bool | |
| 31 | + setDecodeParms(QPDFObjectHandle decode_parms) | |
| 32 | + { | |
| 33 | + if (decode_parms.isNull()) { | |
| 34 | + return true; | |
| 42 | 35 | } |
| 36 | + bool filterable = true; | |
| 37 | + for (auto const& key : decode_parms.getKeys()) { | |
| 38 | + if (((key == "/Type") || (key == "/Name")) && | |
| 39 | + ((!decode_parms.hasKey("/Type")) || | |
| 40 | + decode_parms.isDictionaryOfType( | |
| 41 | + "/CryptFilterDecodeParms"))) { | |
| 42 | + // we handle this in decryptStream | |
| 43 | + } else { | |
| 44 | + filterable = false; | |
| 45 | + } | |
| 46 | + } | |
| 47 | + return filterable; | |
| 43 | 48 | } |
| 44 | - return filterable; | |
| 45 | - } | |
| 46 | 49 | |
| 47 | - virtual Pipeline* | |
| 48 | - getDecodePipeline(Pipeline*) | |
| 49 | - { | |
| 50 | - // Not used -- handled by pipeStreamData | |
| 51 | - return nullptr; | |
| 52 | - } | |
| 53 | -}; | |
| 50 | + virtual Pipeline* | |
| 51 | + getDecodePipeline(Pipeline*) | |
| 52 | + { | |
| 53 | + // Not used -- handled by pipeStreamData | |
| 54 | + return nullptr; | |
| 55 | + } | |
| 56 | + }; | |
| 57 | +} // namespace | |
| 54 | 58 | |
| 55 | 59 | std::map<std::string, std::string> QPDF_Stream::filter_abbreviations = { |
| 56 | 60 | // The PDF specification provides these filter abbreviations for | ... | ... |
libqpdf/QUtil.cc
| ... | ... | @@ -251,22 +251,25 @@ static unsigned short mac_roman_to_unicode[] = { |
| 251 | 251 | 0x02c7, // 0xff |
| 252 | 252 | }; |
| 253 | 253 | |
| 254 | -class FileCloser | |
| 254 | +namespace | |
| 255 | 255 | { |
| 256 | - public: | |
| 257 | - FileCloser(FILE* f) : | |
| 258 | - f(f) | |
| 256 | + class FileCloser | |
| 259 | 257 | { |
| 260 | - } | |
| 258 | + public: | |
| 259 | + FileCloser(FILE* f) : | |
| 260 | + f(f) | |
| 261 | + { | |
| 262 | + } | |
| 261 | 263 | |
| 262 | - ~FileCloser() | |
| 263 | - { | |
| 264 | - fclose(f); | |
| 265 | - } | |
| 264 | + ~FileCloser() | |
| 265 | + { | |
| 266 | + fclose(f); | |
| 267 | + } | |
| 266 | 268 | |
| 267 | - private: | |
| 268 | - FILE* f; | |
| 269 | -}; | |
| 269 | + private: | |
| 270 | + FILE* f; | |
| 271 | + }; | |
| 272 | +} // namespace | |
| 270 | 273 | |
| 271 | 274 | template <typename T> |
| 272 | 275 | static std::string |
| ... | ... | @@ -1052,17 +1055,20 @@ QUtil::toUTF16(unsigned long uval) |
| 1052 | 1055 | |
| 1053 | 1056 | // Random data support |
| 1054 | 1057 | |
| 1055 | -class RandomDataProviderProvider | |
| 1058 | +namespace | |
| 1056 | 1059 | { |
| 1057 | - public: | |
| 1058 | - RandomDataProviderProvider(); | |
| 1059 | - void setProvider(RandomDataProvider*); | |
| 1060 | - RandomDataProvider* getProvider(); | |
| 1061 | - | |
| 1062 | - private: | |
| 1063 | - RandomDataProvider* default_provider; | |
| 1064 | - RandomDataProvider* current_provider; | |
| 1065 | -}; | |
| 1060 | + class RandomDataProviderProvider | |
| 1061 | + { | |
| 1062 | + public: | |
| 1063 | + RandomDataProviderProvider(); | |
| 1064 | + void setProvider(RandomDataProvider*); | |
| 1065 | + RandomDataProvider* getProvider(); | |
| 1066 | + | |
| 1067 | + private: | |
| 1068 | + RandomDataProvider* default_provider; | |
| 1069 | + RandomDataProvider* current_provider; | |
| 1070 | + }; | |
| 1071 | +} // namespace | |
| 1066 | 1072 | |
| 1067 | 1073 | RandomDataProviderProvider::RandomDataProviderProvider() : |
| 1068 | 1074 | default_provider(CryptoRandomDataProvider::getInstance()), | ... | ... |
libqpdf/SecureRandomDataProvider.cc
| ... | ... | @@ -31,47 +31,54 @@ SecureRandomDataProvider::getInstance() |
| 31 | 31 | |
| 32 | 32 | # ifdef _WIN32 |
| 33 | 33 | |
| 34 | -class WindowsCryptProvider | |
| 34 | +namespace | |
| 35 | 35 | { |
| 36 | - public: | |
| 37 | - WindowsCryptProvider() | |
| 36 | + class WindowsCryptProvider | |
| 38 | 37 | { |
| 39 | - if (!CryptAcquireContextW( | |
| 40 | - &crypt_prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { | |
| 41 | - throw std::runtime_error( | |
| 42 | - "unable to acquire crypt context: " + getErrorMessage()); | |
| 38 | + public: | |
| 39 | + WindowsCryptProvider() | |
| 40 | + { | |
| 41 | + if (!CryptAcquireContextW( | |
| 42 | + &crypt_prov, | |
| 43 | + NULL, | |
| 44 | + NULL, | |
| 45 | + PROV_RSA_FULL, | |
| 46 | + CRYPT_VERIFYCONTEXT)) { | |
| 47 | + throw std::runtime_error( | |
| 48 | + "unable to acquire crypt context: " + getErrorMessage()); | |
| 49 | + } | |
| 50 | + } | |
| 51 | + ~WindowsCryptProvider() | |
| 52 | + { | |
| 53 | + // Ignore error | |
| 54 | + CryptReleaseContext(crypt_prov, 0); | |
| 43 | 55 | } |
| 44 | - } | |
| 45 | - ~WindowsCryptProvider() | |
| 46 | - { | |
| 47 | - // Ignore error | |
| 48 | - CryptReleaseContext(crypt_prov, 0); | |
| 49 | - } | |
| 50 | - | |
| 51 | - HCRYPTPROV crypt_prov; | |
| 52 | 56 | |
| 53 | - private: | |
| 54 | - std::string | |
| 55 | - getErrorMessage() | |
| 56 | - { | |
| 57 | - DWORD errorMessageID = ::GetLastError(); | |
| 58 | - LPSTR messageBuffer = nullptr; | |
| 59 | - size_t size = FormatMessageA( | |
| 60 | - FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | | |
| 61 | - FORMAT_MESSAGE_IGNORE_INSERTS, | |
| 62 | - NULL, | |
| 63 | - errorMessageID, | |
| 64 | - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), | |
| 65 | - reinterpret_cast<LPSTR>(&messageBuffer), | |
| 66 | - 0, | |
| 67 | - NULL); | |
| 68 | - std::string message(messageBuffer, size); | |
| 69 | - LocalFree(messageBuffer); | |
| 70 | - return ( | |
| 71 | - "error number " + QUtil::int_to_string_base(errorMessageID, 16) + | |
| 72 | - ": " + message); | |
| 73 | - } | |
| 74 | -}; | |
| 57 | + HCRYPTPROV crypt_prov; | |
| 58 | + | |
| 59 | + private: | |
| 60 | + std::string | |
| 61 | + getErrorMessage() | |
| 62 | + { | |
| 63 | + DWORD errorMessageID = ::GetLastError(); | |
| 64 | + LPSTR messageBuffer = nullptr; | |
| 65 | + size_t size = FormatMessageA( | |
| 66 | + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | | |
| 67 | + FORMAT_MESSAGE_IGNORE_INSERTS, | |
| 68 | + NULL, | |
| 69 | + errorMessageID, | |
| 70 | + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), | |
| 71 | + reinterpret_cast<LPSTR>(&messageBuffer), | |
| 72 | + 0, | |
| 73 | + NULL); | |
| 74 | + std::string message(messageBuffer, size); | |
| 75 | + LocalFree(messageBuffer); | |
| 76 | + return ( | |
| 77 | + "error number " + | |
| 78 | + QUtil::int_to_string_base(errorMessageID, 16) + ": " + message); | |
| 79 | + } | |
| 80 | + }; | |
| 81 | +} // namespace | |
| 75 | 82 | # endif |
| 76 | 83 | |
| 77 | 84 | void | ... | ... |
libqpdf/qpdf-c.cc
| ... | ... | @@ -60,17 +60,20 @@ _qpdf_data::_qpdf_data() : |
| 60 | 60 | { |
| 61 | 61 | } |
| 62 | 62 | |
| 63 | -class ProgressReporter: public QPDFWriter::ProgressReporter | |
| 64 | -{ | |
| 65 | - public: | |
| 66 | - ProgressReporter(void (*handler)(int, void*), void* data); | |
| 67 | - virtual ~ProgressReporter() = default; | |
| 68 | - virtual void reportProgress(int); | |
| 69 | - | |
| 70 | - private: | |
| 71 | - void (*handler)(int, void*); | |
| 72 | - void* data; | |
| 73 | -}; | |
| 63 | +namespace | |
| 64 | +{ | |
| 65 | + class ProgressReporter: public QPDFWriter::ProgressReporter | |
| 66 | + { | |
| 67 | + public: | |
| 68 | + ProgressReporter(void (*handler)(int, void*), void* data); | |
| 69 | + virtual ~ProgressReporter() = default; | |
| 70 | + virtual void reportProgress(int); | |
| 71 | + | |
| 72 | + private: | |
| 73 | + void (*handler)(int, void*); | |
| 74 | + void* data; | |
| 75 | + }; | |
| 76 | +} // namespace | |
| 74 | 77 | |
| 75 | 78 | ProgressReporter::ProgressReporter(void (*handler)(int, void*), void* data) : |
| 76 | 79 | handler(handler), | ... | ... |