aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/qpdf/QPDFXRefEntry.hh22
-rw-r--r--libqpdf/QPDF.cc4
-rw-r--r--libqpdf/QPDFWriter.cc10
-rw-r--r--libqpdf/QPDFXRefEntry.cc5
4 files changed, 27 insertions, 14 deletions
diff --git a/include/qpdf/QPDFXRefEntry.hh b/include/qpdf/QPDFXRefEntry.hh
index 8ed39d94..cb816a6e 100644
--- a/include/qpdf/QPDFXRefEntry.hh
+++ b/include/qpdf/QPDFXRefEntry.hh
@@ -34,10 +34,26 @@ class QPDFXRefEntry
// 1 = "uncompressed"; field 1 = offset
// 2 = "compressed"; field 1 = object stream number, field 2 = index
+ // Create a type 0 "free" entry.
QPDF_DLL
QPDFXRefEntry();
QPDF_DLL
QPDFXRefEntry(int type, qpdf_offset_t field1, int field2);
+ // Create a type 1 "uncompressed" entry.
+ QPDF_DLL
+ QPDFXRefEntry(qpdf_offset_t offset) :
+ type(1),
+ field1(offset)
+ {
+ }
+ // Create a type 2 "compressed" entry.
+ QPDF_DLL
+ QPDFXRefEntry(int stream_number, int index) :
+ type(2),
+ field1(stream_number),
+ field2(index)
+ {
+ }
QPDF_DLL
int getType() const;
@@ -51,9 +67,9 @@ class QPDFXRefEntry
private:
// This class does not use the Members pattern to avoid a memory
// allocation for every one of these. A lot of these get created.
- int type;
- qpdf_offset_t field1;
- int field2;
+ int type{0};
+ qpdf_offset_t field1{0};
+ int field2{0};
};
#endif // QPDFXREFENTRY_HH
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index f2c80539..812fb127 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -1249,11 +1249,11 @@ QPDF::insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2, bool overwrite)
case 1:
// f2 is generation
QTC::TC("qpdf", "QPDF xref gen > 0", ((f2 > 0) ? 1 : 0));
- this->m->xref_table[QPDFObjGen(obj, f2)] = QPDFXRefEntry(f0, f1, f2);
+ this->m->xref_table[QPDFObjGen(obj, f2)] = QPDFXRefEntry(f1);
break;
case 2:
- this->m->xref_table[QPDFObjGen(obj, 0)] = QPDFXRefEntry(f0, f1, f2);
+ this->m->xref_table[QPDFObjGen(obj, 0)] = QPDFXRefEntry(toI(f1), f2);
break;
default:
diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc
index 3d7de821..06858eb3 100644
--- a/libqpdf/QPDFWriter.cc
+++ b/libqpdf/QPDFWriter.cc
@@ -1156,7 +1156,7 @@ QPDFWriter::openObject(int objid)
if (objid == 0) {
objid = this->m->next_objid++;
}
- this->m->xref[objid] = QPDFXRefEntry(1, this->m->pipeline->getCount(), 0);
+ this->m->xref[objid] = QPDFXRefEntry(m->pipeline->getCount());
writeString(std::to_string(objid));
writeString(" 0 obj\n");
return objid;
@@ -1905,7 +1905,7 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object)
}
writeObject(obj_to_write, count);
- this->m->xref[new_obj] = QPDFXRefEntry(2, new_id, count);
+ this->m->xref[new_obj] = QPDFXRefEntry(new_id, count);
}
}
@@ -2686,7 +2686,7 @@ QPDFWriter::writeXRefStream(
// Must store in xref table in advance of writing the actual data
// rather than waiting for openObject to do it.
- this->m->xref[xref_id] = QPDFXRefEntry(1, this->m->pipeline->getCount(), 0);
+ this->m->xref[xref_id] = QPDFXRefEntry(m->pipeline->getCount());
Pipeline* p = pushPipeline(new Pl_Buffer("xref stream"));
bool compressed = false;
@@ -3112,7 +3112,7 @@ QPDFWriter::writeLinearized()
}
if (pass == 1) {
this->m->xref[hint_id] =
- QPDFXRefEntry(1, this->m->pipeline->getCount(), 0);
+ QPDFXRefEntry(m->pipeline->getCount());
} else {
// Part 5: hint stream
writeBuffer(hint_buffer);
@@ -3216,7 +3216,7 @@ QPDFWriter::writeLinearized()
hint_length = QIntC::to_offset(hint_buffer->getSize());
// Restore hint offset
- this->m->xref[hint_id] = QPDFXRefEntry(1, hint_offset1, 0);
+ this->m->xref[hint_id] = QPDFXRefEntry(hint_offset1);
if (lin_pass1_file) {
// Write some debugging information
fprintf(
diff --git a/libqpdf/QPDFXRefEntry.cc b/libqpdf/QPDFXRefEntry.cc
index 3137ab53..77f641b0 100644
--- a/libqpdf/QPDFXRefEntry.cc
+++ b/libqpdf/QPDFXRefEntry.cc
@@ -4,10 +4,7 @@
#include <qpdf/QPDFExc.hh>
#include <qpdf/QUtil.hh>
-QPDFXRefEntry::QPDFXRefEntry() :
- type(0),
- field1(0),
- field2(0)
+QPDFXRefEntry::QPDFXRefEntry()
{
}