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 | 34 | // 1 = "uncompressed"; field 1 = offset |
| 35 | 35 | // 2 = "compressed"; field 1 = object stream number, field 2 = index |
| 36 | 36 | |
| 37 | + // Create a type 0 "free" entry. | |
| 37 | 38 | QPDF_DLL |
| 38 | 39 | QPDFXRefEntry(); |
| 39 | 40 | QPDF_DLL |
| 40 | 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 | 58 | QPDF_DLL |
| 43 | 59 | int getType() const; |
| ... | ... | @@ -51,9 +67,9 @@ class QPDFXRefEntry |
| 51 | 67 | private: |
| 52 | 68 | // This class does not use the Members pattern to avoid a memory |
| 53 | 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 | 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 | 1249 | case 1: |
| 1250 | 1250 | // f2 is generation |
| 1251 | 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 | 1253 | break; |
| 1254 | 1254 | |
| 1255 | 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 | 1257 | break; |
| 1258 | 1258 | |
| 1259 | 1259 | default: | ... | ... |
libqpdf/QPDFWriter.cc
| ... | ... | @@ -1156,7 +1156,7 @@ QPDFWriter::openObject(int objid) |
| 1156 | 1156 | if (objid == 0) { |
| 1157 | 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 | 1160 | writeString(std::to_string(objid)); |
| 1161 | 1161 | writeString(" 0 obj\n"); |
| 1162 | 1162 | return objid; |
| ... | ... | @@ -1905,7 +1905,7 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object) |
| 1905 | 1905 | } |
| 1906 | 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 | 2686 | |
| 2687 | 2687 | // Must store in xref table in advance of writing the actual data |
| 2688 | 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 | 2691 | Pipeline* p = pushPipeline(new Pl_Buffer("xref stream")); |
| 2692 | 2692 | bool compressed = false; |
| ... | ... | @@ -3112,7 +3112,7 @@ QPDFWriter::writeLinearized() |
| 3112 | 3112 | } |
| 3113 | 3113 | if (pass == 1) { |
| 3114 | 3114 | this->m->xref[hint_id] = |
| 3115 | - QPDFXRefEntry(1, this->m->pipeline->getCount(), 0); | |
| 3115 | + QPDFXRefEntry(m->pipeline->getCount()); | |
| 3116 | 3116 | } else { |
| 3117 | 3117 | // Part 5: hint stream |
| 3118 | 3118 | writeBuffer(hint_buffer); |
| ... | ... | @@ -3216,7 +3216,7 @@ QPDFWriter::writeLinearized() |
| 3216 | 3216 | hint_length = QIntC::to_offset(hint_buffer->getSize()); |
| 3217 | 3217 | |
| 3218 | 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 | 3220 | if (lin_pass1_file) { |
| 3221 | 3221 | // Write some debugging information |
| 3222 | 3222 | fprintf( | ... | ... |