Commit e8cdc4628634c44aa5bae0230050e4336551fe32
Committed by
Jay Berkenbilt
1 parent
e4e0f40f
Tidy QPDFXRefEntry creation
Showing
4 changed files
with
27 additions
and
14 deletions
include/qpdf/QPDFXRefEntry.hh
| @@ -34,10 +34,26 @@ class QPDFXRefEntry | @@ -34,10 +34,26 @@ class QPDFXRefEntry | ||
| 34 | // 1 = "uncompressed"; field 1 = offset | 34 | // 1 = "uncompressed"; field 1 = offset |
| 35 | // 2 = "compressed"; field 1 = object stream number, field 2 = index | 35 | // 2 = "compressed"; field 1 = object stream number, field 2 = index |
| 36 | 36 | ||
| 37 | + // Create a type 0 "free" entry. | ||
| 37 | QPDF_DLL | 38 | QPDF_DLL |
| 38 | QPDFXRefEntry(); | 39 | QPDFXRefEntry(); |
| 39 | QPDF_DLL | 40 | QPDF_DLL |
| 40 | QPDFXRefEntry(int type, qpdf_offset_t field1, int field2); | 41 | QPDFXRefEntry(int type, qpdf_offset_t field1, int field2); |
| 42 | + // Create a type 1 "uncompressed" entry. | ||
| 43 | + QPDF_DLL | ||
| 44 | + QPDFXRefEntry(qpdf_offset_t offset) : | ||
| 45 | + type(1), | ||
| 46 | + field1(offset) | ||
| 47 | + { | ||
| 48 | + } | ||
| 49 | + // Create a type 2 "compressed" entry. | ||
| 50 | + QPDF_DLL | ||
| 51 | + QPDFXRefEntry(int stream_number, int index) : | ||
| 52 | + type(2), | ||
| 53 | + field1(stream_number), | ||
| 54 | + field2(index) | ||
| 55 | + { | ||
| 56 | + } | ||
| 41 | 57 | ||
| 42 | QPDF_DLL | 58 | QPDF_DLL |
| 43 | int getType() const; | 59 | int getType() const; |
| @@ -51,9 +67,9 @@ class QPDFXRefEntry | @@ -51,9 +67,9 @@ class QPDFXRefEntry | ||
| 51 | private: | 67 | private: |
| 52 | // This class does not use the Members pattern to avoid a memory | 68 | // This class does not use the Members pattern to avoid a memory |
| 53 | // allocation for every one of these. A lot of these get created. | 69 | // allocation for every one of these. A lot of these get created. |
| 54 | - int type; | ||
| 55 | - qpdf_offset_t field1; | ||
| 56 | - int field2; | 70 | + int type{0}; |
| 71 | + qpdf_offset_t field1{0}; | ||
| 72 | + int field2{0}; | ||
| 57 | }; | 73 | }; |
| 58 | 74 | ||
| 59 | #endif // QPDFXREFENTRY_HH | 75 | #endif // QPDFXREFENTRY_HH |
libqpdf/QPDF.cc
| @@ -1249,11 +1249,11 @@ QPDF::insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2, bool overwrite) | @@ -1249,11 +1249,11 @@ QPDF::insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2, bool overwrite) | ||
| 1249 | case 1: | 1249 | case 1: |
| 1250 | // f2 is generation | 1250 | // f2 is generation |
| 1251 | QTC::TC("qpdf", "QPDF xref gen > 0", ((f2 > 0) ? 1 : 0)); | 1251 | QTC::TC("qpdf", "QPDF xref gen > 0", ((f2 > 0) ? 1 : 0)); |
| 1252 | - this->m->xref_table[QPDFObjGen(obj, f2)] = QPDFXRefEntry(f0, f1, f2); | 1252 | + this->m->xref_table[QPDFObjGen(obj, f2)] = QPDFXRefEntry(f1); |
| 1253 | break; | 1253 | break; |
| 1254 | 1254 | ||
| 1255 | case 2: | 1255 | case 2: |
| 1256 | - this->m->xref_table[QPDFObjGen(obj, 0)] = QPDFXRefEntry(f0, f1, f2); | 1256 | + this->m->xref_table[QPDFObjGen(obj, 0)] = QPDFXRefEntry(toI(f1), f2); |
| 1257 | break; | 1257 | break; |
| 1258 | 1258 | ||
| 1259 | default: | 1259 | default: |
libqpdf/QPDFWriter.cc
| @@ -1156,7 +1156,7 @@ QPDFWriter::openObject(int objid) | @@ -1156,7 +1156,7 @@ QPDFWriter::openObject(int objid) | ||
| 1156 | if (objid == 0) { | 1156 | if (objid == 0) { |
| 1157 | objid = this->m->next_objid++; | 1157 | objid = this->m->next_objid++; |
| 1158 | } | 1158 | } |
| 1159 | - this->m->xref[objid] = QPDFXRefEntry(1, this->m->pipeline->getCount(), 0); | 1159 | + this->m->xref[objid] = QPDFXRefEntry(m->pipeline->getCount()); |
| 1160 | writeString(std::to_string(objid)); | 1160 | writeString(std::to_string(objid)); |
| 1161 | writeString(" 0 obj\n"); | 1161 | writeString(" 0 obj\n"); |
| 1162 | return objid; | 1162 | return objid; |
| @@ -1905,7 +1905,7 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object) | @@ -1905,7 +1905,7 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object) | ||
| 1905 | } | 1905 | } |
| 1906 | writeObject(obj_to_write, count); | 1906 | writeObject(obj_to_write, count); |
| 1907 | 1907 | ||
| 1908 | - this->m->xref[new_obj] = QPDFXRefEntry(2, new_id, count); | 1908 | + this->m->xref[new_obj] = QPDFXRefEntry(new_id, count); |
| 1909 | } | 1909 | } |
| 1910 | } | 1910 | } |
| 1911 | 1911 | ||
| @@ -2686,7 +2686,7 @@ QPDFWriter::writeXRefStream( | @@ -2686,7 +2686,7 @@ QPDFWriter::writeXRefStream( | ||
| 2686 | 2686 | ||
| 2687 | // Must store in xref table in advance of writing the actual data | 2687 | // Must store in xref table in advance of writing the actual data |
| 2688 | // rather than waiting for openObject to do it. | 2688 | // rather than waiting for openObject to do it. |
| 2689 | - this->m->xref[xref_id] = QPDFXRefEntry(1, this->m->pipeline->getCount(), 0); | 2689 | + this->m->xref[xref_id] = QPDFXRefEntry(m->pipeline->getCount()); |
| 2690 | 2690 | ||
| 2691 | Pipeline* p = pushPipeline(new Pl_Buffer("xref stream")); | 2691 | Pipeline* p = pushPipeline(new Pl_Buffer("xref stream")); |
| 2692 | bool compressed = false; | 2692 | bool compressed = false; |
| @@ -3112,7 +3112,7 @@ QPDFWriter::writeLinearized() | @@ -3112,7 +3112,7 @@ QPDFWriter::writeLinearized() | ||
| 3112 | } | 3112 | } |
| 3113 | if (pass == 1) { | 3113 | if (pass == 1) { |
| 3114 | this->m->xref[hint_id] = | 3114 | this->m->xref[hint_id] = |
| 3115 | - QPDFXRefEntry(1, this->m->pipeline->getCount(), 0); | 3115 | + QPDFXRefEntry(m->pipeline->getCount()); |
| 3116 | } else { | 3116 | } else { |
| 3117 | // Part 5: hint stream | 3117 | // Part 5: hint stream |
| 3118 | writeBuffer(hint_buffer); | 3118 | writeBuffer(hint_buffer); |
| @@ -3216,7 +3216,7 @@ QPDFWriter::writeLinearized() | @@ -3216,7 +3216,7 @@ QPDFWriter::writeLinearized() | ||
| 3216 | hint_length = QIntC::to_offset(hint_buffer->getSize()); | 3216 | hint_length = QIntC::to_offset(hint_buffer->getSize()); |
| 3217 | 3217 | ||
| 3218 | // Restore hint offset | 3218 | // Restore hint offset |
| 3219 | - this->m->xref[hint_id] = QPDFXRefEntry(1, hint_offset1, 0); | 3219 | + this->m->xref[hint_id] = QPDFXRefEntry(hint_offset1); |
| 3220 | if (lin_pass1_file) { | 3220 | if (lin_pass1_file) { |
| 3221 | // Write some debugging information | 3221 | // Write some debugging information |
| 3222 | fprintf( | 3222 | fprintf( |
libqpdf/QPDFXRefEntry.cc