2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-09-21 01:29:06 +00:00

Tidy QPDFXRefEntry creation

This commit is contained in:
m-holger 2023-01-18 11:25:44 +00:00 committed by Jay Berkenbilt
parent e4e0f40fc0
commit e8cdc46286
4 changed files with 27 additions and 14 deletions

View File

@ -34,10 +34,26 @@ class QPDFXRefEntry
// 1 = "uncompressed"; field 1 = offset // 1 = "uncompressed"; field 1 = offset
// 2 = "compressed"; field 1 = object stream number, field 2 = index // 2 = "compressed"; field 1 = object stream number, field 2 = index
// Create a type 0 "free" entry.
QPDF_DLL QPDF_DLL
QPDFXRefEntry(); QPDFXRefEntry();
QPDF_DLL QPDF_DLL
QPDFXRefEntry(int type, qpdf_offset_t field1, int field2); 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 QPDF_DLL
int getType() const; int getType() const;
@ -51,9 +67,9 @@ class QPDFXRefEntry
private: private:
// This class does not use the Members pattern to avoid a memory // This class does not use the Members pattern to avoid a memory
// allocation for every one of these. A lot of these get created. // allocation for every one of these. A lot of these get created.
int type; int type{0};
qpdf_offset_t field1; qpdf_offset_t field1{0};
int field2; int field2{0};
}; };
#endif // QPDFXREFENTRY_HH #endif // QPDFXREFENTRY_HH

View File

@ -1249,11 +1249,11 @@ QPDF::insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2, bool overwrite)
case 1: case 1:
// f2 is generation // f2 is generation
QTC::TC("qpdf", "QPDF xref gen > 0", ((f2 > 0) ? 1 : 0)); 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; break;
case 2: 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; break;
default: default:

View File

@ -1156,7 +1156,7 @@ QPDFWriter::openObject(int objid)
if (objid == 0) { if (objid == 0) {
objid = this->m->next_objid++; 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(std::to_string(objid));
writeString(" 0 obj\n"); writeString(" 0 obj\n");
return objid; return objid;
@ -1905,7 +1905,7 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object)
} }
writeObject(obj_to_write, count); 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 // Must store in xref table in advance of writing the actual data
// rather than waiting for openObject to do it. // 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")); Pipeline* p = pushPipeline(new Pl_Buffer("xref stream"));
bool compressed = false; bool compressed = false;
@ -3112,7 +3112,7 @@ QPDFWriter::writeLinearized()
} }
if (pass == 1) { if (pass == 1) {
this->m->xref[hint_id] = this->m->xref[hint_id] =
QPDFXRefEntry(1, this->m->pipeline->getCount(), 0); QPDFXRefEntry(m->pipeline->getCount());
} else { } else {
// Part 5: hint stream // Part 5: hint stream
writeBuffer(hint_buffer); writeBuffer(hint_buffer);
@ -3216,7 +3216,7 @@ QPDFWriter::writeLinearized()
hint_length = QIntC::to_offset(hint_buffer->getSize()); hint_length = QIntC::to_offset(hint_buffer->getSize());
// Restore hint offset // 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) { if (lin_pass1_file) {
// Write some debugging information // Write some debugging information
fprintf( fprintf(

View File

@ -4,10 +4,7 @@
#include <qpdf/QPDFExc.hh> #include <qpdf/QPDFExc.hh>
#include <qpdf/QUtil.hh> #include <qpdf/QUtil.hh>
QPDFXRefEntry::QPDFXRefEntry() : QPDFXRefEntry::QPDFXRefEntry()
type(0),
field1(0),
field2(0)
{ {
} }