Commit fc4feb6f1abff887e22eaca05ae260e5eb7376c7
1 parent
d6a447b6
Remove BufferInputSource::Members
Showing
2 changed files
with
44 additions
and
66 deletions
include/qpdf/BufferInputSource.hh
| @@ -54,26 +54,11 @@ class QPDF_DLL_CLASS BufferInputSource: public InputSource | @@ -54,26 +54,11 @@ class QPDF_DLL_CLASS BufferInputSource: public InputSource | ||
| 54 | virtual void unreadCh(char ch); | 54 | virtual void unreadCh(char ch); |
| 55 | 55 | ||
| 56 | private: | 56 | private: |
| 57 | - class QPDF_DLL_PRIVATE Members | ||
| 58 | - { | ||
| 59 | - friend class BufferInputSource; | ||
| 60 | - | ||
| 61 | - public: | ||
| 62 | - QPDF_DLL | ||
| 63 | - ~Members() = default; | ||
| 64 | - | ||
| 65 | - private: | ||
| 66 | - Members(bool own_memory, std::string const& description, Buffer* buf); | ||
| 67 | - Members(Members const&) = delete; | ||
| 68 | - | ||
| 69 | - bool own_memory; | ||
| 70 | - std::string description; | ||
| 71 | - Buffer* buf; | ||
| 72 | - qpdf_offset_t cur_offset; | ||
| 73 | - qpdf_offset_t max_offset; | ||
| 74 | - }; | ||
| 75 | - | ||
| 76 | - std::shared_ptr<Members> m; | 57 | + bool own_memory; |
| 58 | + std::string description; | ||
| 59 | + Buffer* buf; | ||
| 60 | + qpdf_offset_t cur_offset; | ||
| 61 | + qpdf_offset_t max_offset; | ||
| 77 | }; | 62 | }; |
| 78 | 63 | ||
| 79 | #endif // QPDF_BUFFERINPUTSOURCE_HH | 64 | #endif // QPDF_BUFFERINPUTSOURCE_HH |
libqpdf/BufferInputSource.cc
| @@ -7,8 +7,8 @@ | @@ -7,8 +7,8 @@ | ||
| 7 | #include <stdexcept> | 7 | #include <stdexcept> |
| 8 | #include <string.h> | 8 | #include <string.h> |
| 9 | 9 | ||
| 10 | -BufferInputSource::Members::Members( | ||
| 11 | - bool own_memory, std::string const& description, Buffer* buf) : | 10 | +BufferInputSource::BufferInputSource( |
| 11 | + std::string const& description, Buffer* buf, bool own_memory) : | ||
| 12 | own_memory(own_memory), | 12 | own_memory(own_memory), |
| 13 | description(description), | 13 | description(description), |
| 14 | buf(buf), | 14 | buf(buf), |
| @@ -18,60 +18,54 @@ BufferInputSource::Members::Members( | @@ -18,60 +18,54 @@ BufferInputSource::Members::Members( | ||
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | BufferInputSource::BufferInputSource( | 20 | BufferInputSource::BufferInputSource( |
| 21 | - std::string const& description, Buffer* buf, bool own_memory) : | ||
| 22 | - m(new Members(own_memory, description, buf)) | ||
| 23 | -{ | ||
| 24 | -} | ||
| 25 | - | ||
| 26 | -BufferInputSource::BufferInputSource( | ||
| 27 | std::string const& description, std::string const& contents) : | 21 | std::string const& description, std::string const& contents) : |
| 28 | - m(new Members(true, description, nullptr)) | 22 | + own_memory(true), |
| 23 | + description(description), | ||
| 24 | + buf(new Buffer(contents.length())), | ||
| 25 | + cur_offset(0), | ||
| 26 | + max_offset(QIntC::to_offset(buf->getSize())) | ||
| 29 | { | 27 | { |
| 30 | - this->m->buf = new Buffer(contents.length()); | ||
| 31 | - this->m->max_offset = QIntC::to_offset(this->m->buf->getSize()); | ||
| 32 | - unsigned char* bp = this->m->buf->getBuffer(); | ||
| 33 | - memcpy(bp, contents.c_str(), contents.length()); | 28 | + memcpy(buf->getBuffer(), contents.c_str(), contents.length()); |
| 34 | } | 29 | } |
| 35 | 30 | ||
| 36 | BufferInputSource::~BufferInputSource() | 31 | BufferInputSource::~BufferInputSource() |
| 37 | { | 32 | { |
| 38 | - if (this->m->own_memory) { | ||
| 39 | - delete this->m->buf; | 33 | + if (this->own_memory) { |
| 34 | + delete this->buf; | ||
| 40 | } | 35 | } |
| 41 | } | 36 | } |
| 42 | 37 | ||
| 43 | qpdf_offset_t | 38 | qpdf_offset_t |
| 44 | BufferInputSource::findAndSkipNextEOL() | 39 | BufferInputSource::findAndSkipNextEOL() |
| 45 | { | 40 | { |
| 46 | - if (this->m->cur_offset < 0) { | 41 | + if (this->cur_offset < 0) { |
| 47 | throw std::logic_error("INTERNAL ERROR: BufferInputSource offset < 0"); | 42 | throw std::logic_error("INTERNAL ERROR: BufferInputSource offset < 0"); |
| 48 | } | 43 | } |
| 49 | - qpdf_offset_t end_pos = this->m->max_offset; | ||
| 50 | - if (this->m->cur_offset >= end_pos) { | 44 | + qpdf_offset_t end_pos = this->max_offset; |
| 45 | + if (this->cur_offset >= end_pos) { | ||
| 51 | this->last_offset = end_pos; | 46 | this->last_offset = end_pos; |
| 52 | - this->m->cur_offset = end_pos; | 47 | + this->cur_offset = end_pos; |
| 53 | return end_pos; | 48 | return end_pos; |
| 54 | } | 49 | } |
| 55 | 50 | ||
| 56 | qpdf_offset_t result = 0; | 51 | qpdf_offset_t result = 0; |
| 57 | - unsigned char const* buffer = this->m->buf->getBuffer(); | 52 | + unsigned char const* buffer = this->buf->getBuffer(); |
| 58 | unsigned char const* end = buffer + end_pos; | 53 | unsigned char const* end = buffer + end_pos; |
| 59 | - unsigned char const* p = buffer + this->m->cur_offset; | 54 | + unsigned char const* p = buffer + this->cur_offset; |
| 60 | 55 | ||
| 61 | while ((p < end) && !((*p == '\r') || (*p == '\n'))) { | 56 | while ((p < end) && !((*p == '\r') || (*p == '\n'))) { |
| 62 | ++p; | 57 | ++p; |
| 63 | } | 58 | } |
| 64 | if (p < end) { | 59 | if (p < end) { |
| 65 | result = p - buffer; | 60 | result = p - buffer; |
| 66 | - this->m->cur_offset = result + 1; | 61 | + this->cur_offset = result + 1; |
| 67 | ++p; | 62 | ++p; |
| 68 | - while ((this->m->cur_offset < end_pos) && | ||
| 69 | - ((*p == '\r') || (*p == '\n'))) { | 63 | + while ((this->cur_offset < end_pos) && ((*p == '\r') || (*p == '\n'))) { |
| 70 | ++p; | 64 | ++p; |
| 71 | - ++this->m->cur_offset; | 65 | + ++this->cur_offset; |
| 72 | } | 66 | } |
| 73 | } else { | 67 | } else { |
| 74 | - this->m->cur_offset = end_pos; | 68 | + this->cur_offset = end_pos; |
| 75 | result = end_pos; | 69 | result = end_pos; |
| 76 | } | 70 | } |
| 77 | return result; | 71 | return result; |
| @@ -80,13 +74,13 @@ BufferInputSource::findAndSkipNextEOL() | @@ -80,13 +74,13 @@ BufferInputSource::findAndSkipNextEOL() | ||
| 80 | std::string const& | 74 | std::string const& |
| 81 | BufferInputSource::getName() const | 75 | BufferInputSource::getName() const |
| 82 | { | 76 | { |
| 83 | - return this->m->description; | 77 | + return this->description; |
| 84 | } | 78 | } |
| 85 | 79 | ||
| 86 | qpdf_offset_t | 80 | qpdf_offset_t |
| 87 | BufferInputSource::tell() | 81 | BufferInputSource::tell() |
| 88 | { | 82 | { |
| 89 | - return this->m->cur_offset; | 83 | + return this->cur_offset; |
| 90 | } | 84 | } |
| 91 | 85 | ||
| 92 | void | 86 | void |
| @@ -94,17 +88,17 @@ BufferInputSource::seek(qpdf_offset_t offset, int whence) | @@ -94,17 +88,17 @@ BufferInputSource::seek(qpdf_offset_t offset, int whence) | ||
| 94 | { | 88 | { |
| 95 | switch (whence) { | 89 | switch (whence) { |
| 96 | case SEEK_SET: | 90 | case SEEK_SET: |
| 97 | - this->m->cur_offset = offset; | 91 | + this->cur_offset = offset; |
| 98 | break; | 92 | break; |
| 99 | 93 | ||
| 100 | case SEEK_END: | 94 | case SEEK_END: |
| 101 | - QIntC::range_check(this->m->max_offset, offset); | ||
| 102 | - this->m->cur_offset = this->m->max_offset + offset; | 95 | + QIntC::range_check(this->max_offset, offset); |
| 96 | + this->cur_offset = this->max_offset + offset; | ||
| 103 | break; | 97 | break; |
| 104 | 98 | ||
| 105 | case SEEK_CUR: | 99 | case SEEK_CUR: |
| 106 | - QIntC::range_check(this->m->cur_offset, offset); | ||
| 107 | - this->m->cur_offset += offset; | 100 | + QIntC::range_check(this->cur_offset, offset); |
| 101 | + this->cur_offset += offset; | ||
| 108 | break; | 102 | break; |
| 109 | 103 | ||
| 110 | default: | 104 | default: |
| @@ -113,42 +107,41 @@ BufferInputSource::seek(qpdf_offset_t offset, int whence) | @@ -113,42 +107,41 @@ BufferInputSource::seek(qpdf_offset_t offset, int whence) | ||
| 113 | break; | 107 | break; |
| 114 | } | 108 | } |
| 115 | 109 | ||
| 116 | - if (this->m->cur_offset < 0) { | 110 | + if (this->cur_offset < 0) { |
| 117 | throw std::runtime_error( | 111 | throw std::runtime_error( |
| 118 | - this->m->description + ": seek before beginning of buffer"); | 112 | + this->description + ": seek before beginning of buffer"); |
| 119 | } | 113 | } |
| 120 | } | 114 | } |
| 121 | 115 | ||
| 122 | void | 116 | void |
| 123 | BufferInputSource::rewind() | 117 | BufferInputSource::rewind() |
| 124 | { | 118 | { |
| 125 | - this->m->cur_offset = 0; | 119 | + this->cur_offset = 0; |
| 126 | } | 120 | } |
| 127 | 121 | ||
| 128 | size_t | 122 | size_t |
| 129 | BufferInputSource::read(char* buffer, size_t length) | 123 | BufferInputSource::read(char* buffer, size_t length) |
| 130 | { | 124 | { |
| 131 | - if (this->m->cur_offset < 0) { | 125 | + if (this->cur_offset < 0) { |
| 132 | throw std::logic_error("INTERNAL ERROR: BufferInputSource offset < 0"); | 126 | throw std::logic_error("INTERNAL ERROR: BufferInputSource offset < 0"); |
| 133 | } | 127 | } |
| 134 | - qpdf_offset_t end_pos = this->m->max_offset; | ||
| 135 | - if (this->m->cur_offset >= end_pos) { | 128 | + qpdf_offset_t end_pos = this->max_offset; |
| 129 | + if (this->cur_offset >= end_pos) { | ||
| 136 | this->last_offset = end_pos; | 130 | this->last_offset = end_pos; |
| 137 | return 0; | 131 | return 0; |
| 138 | } | 132 | } |
| 139 | 133 | ||
| 140 | - this->last_offset = this->m->cur_offset; | ||
| 141 | - size_t len = | ||
| 142 | - std::min(QIntC::to_size(end_pos - this->m->cur_offset), length); | ||
| 143 | - memcpy(buffer, this->m->buf->getBuffer() + this->m->cur_offset, len); | ||
| 144 | - this->m->cur_offset += QIntC::to_offset(len); | 134 | + this->last_offset = this->cur_offset; |
| 135 | + size_t len = std::min(QIntC::to_size(end_pos - this->cur_offset), length); | ||
| 136 | + memcpy(buffer, this->buf->getBuffer() + this->cur_offset, len); | ||
| 137 | + this->cur_offset += QIntC::to_offset(len); | ||
| 145 | return len; | 138 | return len; |
| 146 | } | 139 | } |
| 147 | 140 | ||
| 148 | void | 141 | void |
| 149 | BufferInputSource::unreadCh(char ch) | 142 | BufferInputSource::unreadCh(char ch) |
| 150 | { | 143 | { |
| 151 | - if (this->m->cur_offset > 0) { | ||
| 152 | - --this->m->cur_offset; | 144 | + if (this->cur_offset > 0) { |
| 145 | + --this->cur_offset; | ||
| 153 | } | 146 | } |
| 154 | } | 147 | } |