Commit a944fe359650d9a5d0ed8dc58378992b3415d71f

Authored by m-holger
1 parent 9aef1589

Refactor `QPDFWriter`: move `write` and `getWrittenXRefTable` to `QPDFWriter::Me…

…mbers`, update related logic, and clean up obsolete code.
include/qpdf/QPDFWriter.hh
... ... @@ -20,9 +20,9 @@
20 20 #ifndef QPDFWRITER_HH
21 21 #define QPDFWRITER_HH
22 22  
  23 +#include <qpdf/Constants.h>
23 24 #include <qpdf/DLL.h>
24 25 #include <qpdf/Types.h>
25   -#include <qpdf/Constants.h>
26 26  
27 27 #include <qpdf/Buffer.hh>
28 28 #include <qpdf/PDFVersion.hh>
... ...
libqpdf/QPDFWriter.cc
... ... @@ -293,6 +293,8 @@ class QPDFWriter::Members
293 293 delete output_buffer;
294 294 }
295 295  
  296 + void write();
  297 + std::map<QPDFObjGen, QPDFXRefEntry> getWrittenXRefTable();
296 298 void setMinimumPDFVersion(std::string const& version, int extension_level);
297 299 void copyEncryptionParameters(QPDF&);
298 300 void doWriteSetup();
... ... @@ -2366,30 +2368,36 @@ QPDFWriter::Members::doWriteSetup()
2366 2368 void
2367 2369 QPDFWriter::write()
2368 2370 {
2369   - m->doWriteSetup();
  2371 + m->write();
  2372 +}
  2373 +
  2374 +void
  2375 +QPDFWriter::Members::write()
  2376 +{
  2377 + doWriteSetup();
2370 2378  
2371 2379 // Set up progress reporting. For linearized files, we write two passes. events_expected is an
2372 2380 // approximation, but it's good enough for progress reporting, which is mostly a guess anyway.
2373   - m->events_expected = QIntC::to_int(m->pdf.getObjectCount() * (m->linearized ? 2 : 1));
  2381 + events_expected = QIntC::to_int(pdf.getObjectCount() * (linearized ? 2 : 1));
2374 2382  
2375   - m->prepareFileForWrite();
  2383 + prepareFileForWrite();
2376 2384  
2377   - if (m->linearized) {
2378   - m->writeLinearized();
  2385 + if (linearized) {
  2386 + writeLinearized();
2379 2387 } else {
2380   - m->writeStandard();
  2388 + writeStandard();
2381 2389 }
2382 2390  
2383   - m->pipeline->finish();
2384   - if (m->close_file) {
2385   - fclose(m->file);
  2391 + pipeline->finish();
  2392 + if (close_file) {
  2393 + fclose(file);
2386 2394 }
2387   - m->file = nullptr;
2388   - if (m->buffer_pipeline) {
2389   - m->output_buffer = m->buffer_pipeline->getBuffer();
2390   - m->buffer_pipeline = nullptr;
  2395 + file = nullptr;
  2396 + if (buffer_pipeline) {
  2397 + output_buffer = buffer_pipeline->getBuffer();
  2398 + buffer_pipeline = nullptr;
2391 2399 }
2392   - m->indicateProgress(false, true);
  2400 + indicateProgress(false, true);
2393 2401 }
2394 2402  
2395 2403 QPDFObjGen
... ... @@ -2401,10 +2409,16 @@ QPDFWriter::getRenumberedObjGen(QPDFObjGen og)
2401 2409 std::map<QPDFObjGen, QPDFXRefEntry>
2402 2410 QPDFWriter::getWrittenXRefTable()
2403 2411 {
  2412 + return m->getWrittenXRefTable();
  2413 +}
  2414 +
  2415 +std::map<QPDFObjGen, QPDFXRefEntry>
  2416 +QPDFWriter::Members::getWrittenXRefTable()
  2417 +{
2404 2418 std::map<QPDFObjGen, QPDFXRefEntry> result;
2405 2419  
2406 2420 auto it = result.begin();
2407   - m->new_obj.forEach([&it, &result](auto id, auto const& item) -> void {
  2421 + new_obj.forEach([&it, &result](auto id, auto const& item) -> void {
2408 2422 if (item.xref.getType() != 0) {
2409 2423 it = result.emplace_hint(it, QPDFObjGen(id, 0), item.xref);
2410 2424 }
... ...