Commit 83fc18af095248ae22f38a52bf4e7e336f0a7c12

Authored by m-holger
1 parent 6c990306

Add new method Objects::replace

libqpdf/QPDF.cc
@@ -597,9 +597,15 @@ QPDF::getObjectByID(int id, int gen) @@ -597,9 +597,15 @@ QPDF::getObjectByID(int id, int gen)
597 } 597 }
598 598
599 void 599 void
600 -QPDF::replaceObject(int objid, int generation, QPDFObjectHandle oh) 600 +QPDF::replaceObject(int id, int gen, QPDFObjectHandle replacement)
601 { 601 {
602 - replaceObject(QPDFObjGen(objid, generation), oh); 602 + m->objects.replace(QPDFObjGen(id, gen), replacement);
  603 +}
  604 +
  605 +void
  606 +QPDF::replaceObject(QPDFObjGen const& og, QPDFObjectHandle replacement)
  607 +{
  608 + m->objects.replace(og, replacement);
603 } 609 }
604 610
605 void 611 void
@@ -610,7 +616,7 @@ QPDF::replaceReserved(QPDFObjectHandle reserved, QPDFObjectHandle replacement) @@ -610,7 +616,7 @@ QPDF::replaceReserved(QPDFObjectHandle reserved, QPDFObjectHandle replacement)
610 if (!(tc == ::ot_reserved || tc == ::ot_null)) { 616 if (!(tc == ::ot_reserved || tc == ::ot_null)) {
611 throw std::logic_error("replaceReserved called with non-reserved object"); 617 throw std::logic_error("replaceReserved called with non-reserved object");
612 } 618 }
613 - replaceObject(reserved.getObjGen(), replacement); 619 + m->objects.replace(reserved.getObjGen(), replacement);
614 } 620 }
615 621
616 QPDFObjectHandle 622 QPDFObjectHandle
libqpdf/QPDF_objects.cc
@@ -1758,13 +1758,13 @@ Objects::get_for_json(int id, int gen) @@ -1758,13 +1758,13 @@ Objects::get_for_json(int id, int gen)
1758 } 1758 }
1759 1759
1760 void 1760 void
1761 -QPDF::replaceObject(QPDFObjGen const& og, QPDFObjectHandle oh) 1761 +Objects::replace(QPDFObjGen og, QPDFObjectHandle oh)
1762 { 1762 {
1763 if (!oh || (oh.isIndirect() && !(oh.isStream() && oh.getObjGen() == og))) { 1763 if (!oh || (oh.isIndirect() && !(oh.isStream() && oh.getObjGen() == og))) {
1764 QTC::TC("qpdf", "QPDF replaceObject called with indirect object"); 1764 QTC::TC("qpdf", "QPDF replaceObject called with indirect object");
1765 throw std::logic_error("QPDF::replaceObject called with indirect object handle"); 1765 throw std::logic_error("QPDF::replaceObject called with indirect object handle");
1766 } 1766 }
1767 - objects().update_table(og, oh.getObj()); 1767 + update_table(og, oh.getObj());
1768 } 1768 }
1769 1769
1770 void 1770 void
libqpdf/qpdf/QPDF_objects.hh
@@ -441,6 +441,10 @@ class QPDF::Objects @@ -441,6 +441,10 @@ class QPDF::Objects
441 return get(QPDFObjGen(id, gen)); 441 return get(QPDFObjGen(id, gen));
442 } 442 }
443 443
  444 + void erase(QPDFObjGen og);
  445 +
  446 + void replace(QPDFObjGen og, QPDFObjectHandle oh);
  447 +
444 std::map<QPDFObjGen, Entry> obj_cache; 448 std::map<QPDFObjGen, Entry> obj_cache;
445 449
446 QPDFObjectHandle readObjectInStream(std::shared_ptr<InputSource>& input, int obj); 450 QPDFObjectHandle readObjectInStream(std::shared_ptr<InputSource>& input, int obj);
@@ -469,7 +473,6 @@ class QPDF::Objects @@ -469,7 +473,6 @@ class QPDF::Objects
469 size_t table_size(); 473 size_t table_size();
470 474
471 private: 475 private:
472 - void erase(QPDFObjGen og);  
473 bool cached(QPDFObjGen og); 476 bool cached(QPDFObjGen og);
474 bool unresolved(QPDFObjGen og); 477 bool unresolved(QPDFObjGen og);
475 478