Commit c9b54e3c087ee2a8bb49cb2121e0d6444f4aaad0

Authored by m-holger
1 parent 7e623fd9

Refactor `QPDFWriter` construction to use `std::make_shared`.

libqpdf/NNTree.cc
@@ -666,7 +666,7 @@ NNTreeImpl::repair() @@ -666,7 +666,7 @@ NNTreeImpl::repair()
666 NNTreeImpl repl(qpdf, new_node, key_type, value_valid, false); 666 NNTreeImpl repl(qpdf, new_node, key_type, value_valid, false);
667 std::map<QPDFObjectHandle, QPDFObjectHandle, Cmp> items; 667 std::map<QPDFObjectHandle, QPDFObjectHandle, Cmp> items;
668 for (auto const& [key, value]: *this) { 668 for (auto const& [key, value]: *this) {
669 - if (key && value && repl.keyValid(key) && repl.value_valid(value) ) { 669 + if (key && value && repl.keyValid(key) && repl.value_valid(value)) {
670 items.insert_or_assign(key, value); 670 items.insert_or_assign(key, value);
671 } 671 }
672 } 672 }
libqpdf/QPDFWriter.cc
@@ -265,12 +265,25 @@ class QPDFWriter::Members @@ -265,12 +265,25 @@ class QPDFWriter::Members
265 friend class QPDFWriter; 265 friend class QPDFWriter;
266 266
267 public: 267 public:
268 - ~Members(); 268 + Members(QPDF& pdf) :
  269 + pdf(pdf),
  270 + root_og(
  271 + pdf.getRoot().getObjGen().isIndirect() ? pdf.getRoot().getObjGen() : QPDFObjGen(-1, 0)),
  272 + pipeline_stack(pipeline)
  273 + {
  274 + }
269 275
270 - private:  
271 - Members(QPDF& pdf);  
272 Members(Members const&) = delete; 276 Members(Members const&) = delete;
273 277
  278 + ~Members()
  279 + {
  280 + if (file && close_file) {
  281 + fclose(file);
  282 + }
  283 + delete output_buffer;
  284 + }
  285 +
  286 + private:
274 QPDF& pdf; 287 QPDF& pdf;
275 QPDFObjGen root_og{-1, 0}; 288 QPDFObjGen root_og{-1, 0};
276 char const* filename{"unspecified"}; 289 char const* filename{"unspecified"};
@@ -341,34 +354,19 @@ class QPDFWriter::Members @@ -341,34 +354,19 @@ class QPDFWriter::Members
341 int next_progress_report{0}; 354 int next_progress_report{0};
342 }; 355 };
343 356
344 -QPDFWriter::Members::Members(QPDF& pdf) :  
345 - pdf(pdf),  
346 - root_og(pdf.getRoot().getObjGen().isIndirect() ? pdf.getRoot().getObjGen() : QPDFObjGen(-1, 0)),  
347 - pipeline_stack(pipeline)  
348 -{  
349 -}  
350 -  
351 -QPDFWriter::Members::~Members()  
352 -{  
353 - if (file && close_file) {  
354 - fclose(file);  
355 - }  
356 - delete output_buffer;  
357 -}  
358 -  
359 QPDFWriter::QPDFWriter(QPDF& pdf) : 357 QPDFWriter::QPDFWriter(QPDF& pdf) :
360 - m(new Members(pdf)) 358 + m(std::make_shared<Members>(pdf))
361 { 359 {
362 } 360 }
363 361
364 QPDFWriter::QPDFWriter(QPDF& pdf, char const* filename) : 362 QPDFWriter::QPDFWriter(QPDF& pdf, char const* filename) :
365 - m(new Members(pdf)) 363 + m(std::make_shared<Members>(pdf))
366 { 364 {
367 setOutputFilename(filename); 365 setOutputFilename(filename);
368 } 366 }
369 367
370 QPDFWriter::QPDFWriter(QPDF& pdf, char const* description, FILE* file, bool close_file) : 368 QPDFWriter::QPDFWriter(QPDF& pdf, char const* description, FILE* file, bool close_file) :
371 - m(new Members(pdf)) 369 + m(std::make_shared<Members>(pdf))
372 { 370 {
373 setOutputFile(description, file, close_file); 371 setOutputFile(description, file, close_file);
374 } 372 }
qpdf/test_driver.cc
@@ -2624,7 +2624,7 @@ test_76(QPDF&amp; pdf, char const* arg2) @@ -2624,7 +2624,7 @@ test_76(QPDF&amp; pdf, char const* arg2)
2624 { 2624 {
2625 // Embedded files. arg2 is a file to attach. Hard-code the 2625 // Embedded files. arg2 is a file to attach. Hard-code the
2626 // mime type and file name for test purposes. 2626 // mime type and file name for test purposes.
2627 - auto &efdh = QPDFEmbeddedFileDocumentHelper::get(pdf); 2627 + auto& efdh = QPDFEmbeddedFileDocumentHelper::get(pdf);
2628 auto fs1 = QPDFFileSpecObjectHelper::createFileSpec(pdf, "att1.txt", arg2); 2628 auto fs1 = QPDFFileSpecObjectHelper::createFileSpec(pdf, "att1.txt", arg2);
2629 fs1.setDescription("some text"); 2629 fs1.setDescription("some text");
2630 auto efs1 = QPDFEFStreamObjectHelper(fs1.getEmbeddedFileStream()); 2630 auto efs1 = QPDFEFStreamObjectHelper(fs1.getEmbeddedFileStream());