Commit 586865f980f43d5fc637d9d06f5cf1c98ce853b2

Authored by m-holger
1 parent 9504421e

Move QPDFObject::write_json to BaseHandle

include/qpdf/ObjectHandle.hh
@@ -62,6 +62,7 @@ namespace qpdf @@ -62,6 +62,7 @@ namespace qpdf
62 inline qpdf_object_type_e raw_type_code() const; 62 inline qpdf_object_type_e raw_type_code() const;
63 inline qpdf_object_type_e type_code() const; 63 inline qpdf_object_type_e type_code() const;
64 std::string unparse() const; 64 std::string unparse() const;
  65 + void write_json(int json_version, JSON::Writer& p) const;
65 66
66 protected: 67 protected:
67 BaseHandle() = default; 68 BaseHandle() = default;
libqpdf/QPDFObjectHandle.cc
@@ -446,9 +446,9 @@ BaseHandle::unparse() const @@ -446,9 +446,9 @@ BaseHandle::unparse() const
446 } 446 }
447 447
448 void 448 void
449 -QPDFObject::write_json(int json_version, JSON::Writer& p) 449 +BaseHandle::write_json(int json_version, JSON::Writer& p) const
450 { 450 {
451 - switch (getResolvedTypeCode()) { 451 + switch (type_code()) {
452 case ::ot_uninitialized: 452 case ::ot_uninitialized:
453 throw std::logic_error( 453 throw std::logic_error(
454 "QPDFObjectHandle: attempting to get JSON from a uninitialized object"); 454 "QPDFObjectHandle: attempting to get JSON from a uninitialized object");
@@ -459,14 +459,14 @@ QPDFObject::write_json(int json_version, JSON::Writer& p) @@ -459,14 +459,14 @@ QPDFObject::write_json(int json_version, JSON::Writer& p)
459 p << "null"; 459 p << "null";
460 break; 460 break;
461 case ::ot_boolean: 461 case ::ot_boolean:
462 - p << std::get<QPDF_Bool>(value).val; 462 + p << std::get<QPDF_Bool>(obj->value).val;
463 break; 463 break;
464 case ::ot_integer: 464 case ::ot_integer:
465 - p << std::to_string(std::get<QPDF_Integer>(value).val); 465 + p << std::to_string(std::get<QPDF_Integer>(obj->value).val);
466 break; 466 break;
467 case ::ot_real: 467 case ::ot_real:
468 { 468 {
469 - auto const& val = std::get<QPDF_Real>(value).val; 469 + auto const& val = std::get<QPDF_Real>(obj->value).val;
470 if (val.length() == 0) { 470 if (val.length() == 0) {
471 // Can't really happen... 471 // Can't really happen...
472 p << "0"; 472 p << "0";
@@ -483,11 +483,11 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p) @@ -483,11 +483,11 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p)
483 } 483 }
484 break; 484 break;
485 case ::ot_string: 485 case ::ot_string:
486 - std::get<QPDF_String>(value).writeJSON(json_version, p); 486 + std::get<QPDF_String>(obj->value).writeJSON(json_version, p);
487 break; 487 break;
488 case ::ot_name: 488 case ::ot_name:
489 { 489 {
490 - auto const& n = std::get<QPDF_Name>(value); 490 + auto const& n = std::get<QPDF_Name>(obj->value);
491 // For performance reasons this code is duplicated in QPDF_Dictionary::writeJSON. When 491 // For performance reasons this code is duplicated in QPDF_Dictionary::writeJSON. When
492 // updating this method make sure QPDF_Dictionary is also update. 492 // updating this method make sure QPDF_Dictionary is also update.
493 if (json_version == 1) { 493 if (json_version == 1) {
@@ -507,7 +507,7 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p) @@ -507,7 +507,7 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p)
507 break; 507 break;
508 case ::ot_array: 508 case ::ot_array:
509 { 509 {
510 - auto const& a = std::get<QPDF_Array>(value); 510 + auto const& a = std::get<QPDF_Array>(obj->value);
511 p.writeStart('['); 511 p.writeStart('[');
512 if (a.sp) { 512 if (a.sp) {
513 int next = 0; 513 int next = 0;
@@ -521,7 +521,7 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p) @@ -521,7 +521,7 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p)
521 if (item_og.isIndirect()) { 521 if (item_og.isIndirect()) {
522 p << "\"" << item_og.unparse(' ') << " R\""; 522 p << "\"" << item_og.unparse(' ') << " R\"";
523 } else { 523 } else {
524 - item.second.getObj()->write_json(json_version, p); 524 + item.second.write_json(json_version, p);
525 } 525 }
526 next = ++key; 526 next = ++key;
527 } 527 }
@@ -535,7 +535,7 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p) @@ -535,7 +535,7 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p)
535 if (item_og.isIndirect()) { 535 if (item_og.isIndirect()) {
536 p << "\"" << item_og.unparse(' ') << " R\""; 536 p << "\"" << item_og.unparse(' ') << " R\"";
537 } else { 537 } else {
538 - item.getObj()->write_json(json_version, p); 538 + item.write_json(json_version, p);
539 } 539 }
540 } 540 }
541 } 541 }
@@ -544,7 +544,7 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p) @@ -544,7 +544,7 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p)
544 break; 544 break;
545 case ::ot_dictionary: 545 case ::ot_dictionary:
546 { 546 {
547 - auto const& d = std::get<QPDF_Dictionary>(value); 547 + auto const& d = std::get<QPDF_Dictionary>(obj->value);
548 p.writeStart('{'); 548 p.writeStart('{');
549 for (auto& iter: d.items) { 549 for (auto& iter: d.items) {
550 if (!iter.second.null()) { 550 if (!iter.second.null()) {
@@ -569,10 +569,10 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p) @@ -569,10 +569,10 @@ QPDFObject::write_json(int json_version, JSON::Writer&amp; p)
569 } 569 }
570 break; 570 break;
571 case ::ot_stream: 571 case ::ot_stream:
572 - std::get<QPDF_Stream>(value).m->stream_dict.writeJSON(json_version, p); 572 + std::get<QPDF_Stream>(obj->value).m->stream_dict.writeJSON(json_version, p);
573 break; 573 break;
574 case ::ot_reference: 574 case ::ot_reference:
575 - p << "\"" << getObjGen().unparse(' ') << " R\""; 575 + p << "\"" << obj->og.unparse(' ') << " R\"";
576 break; 576 break;
577 default: 577 default:
578 throw std::logic_error("attempted to write an unsuitable object as JSON"); 578 throw std::logic_error("attempted to write an unsuitable object as JSON");
@@ -1471,7 +1471,7 @@ QPDFObjectHandle::writeJSON(int json_version, JSON::Writer&amp; p, bool dereference_ @@ -1471,7 +1471,7 @@ QPDFObjectHandle::writeJSON(int json_version, JSON::Writer&amp; p, bool dereference_
1471 } else if (!obj) { 1471 } else if (!obj) {
1472 throw std::logic_error("attempted to dereference an uninitialized QPDFObjectHandle"); 1472 throw std::logic_error("attempted to dereference an uninitialized QPDFObjectHandle");
1473 } else { 1473 } else {
1474 - obj->write_json(json_version, p); 1474 + write_json(json_version, p);
1475 } 1475 }
1476 } 1476 }
1477 1477
libqpdf/qpdf/QPDFObject_private.hh
@@ -209,6 +209,7 @@ class QPDF_Stream final @@ -209,6 +209,7 @@ class QPDF_Stream final
209 friend class QPDF_Stream; 209 friend class QPDF_Stream;
210 friend class QPDFObject; 210 friend class QPDFObject;
211 friend class qpdf::Stream; 211 friend class qpdf::Stream;
  212 + friend class qpdf::BaseHandle;
212 213
213 public: 214 public:
214 Members(QPDFObjectHandle stream_dict, size_t length) : 215 Members(QPDFObjectHandle stream_dict, size_t length) :
@@ -227,6 +228,7 @@ class QPDF_Stream final @@ -227,6 +228,7 @@ class QPDF_Stream final
227 }; 228 };
228 229
229 friend class QPDFObject; 230 friend class QPDFObject;
  231 + friend class qpdf::BaseHandle;
230 friend class qpdf::Stream; 232 friend class qpdf::Stream;
231 233
232 QPDF_Stream(QPDFObjectHandle stream_dict, size_t length) : 234 QPDF_Stream(QPDFObjectHandle stream_dict, size_t length) :
@@ -295,7 +297,6 @@ class QPDFObject @@ -295,7 +297,6 @@ class QPDFObject
295 qpdf, og, std::forward<T>(T(std::forward<Args>(args)...))); 297 qpdf, og, std::forward<T>(T(std::forward<Args>(args)...)));
296 } 298 }
297 299
298 - void write_json(int json_version, JSON::Writer& p);  
299 void disconnect(); 300 void disconnect();
300 std::string getStringValue() const; 301 std::string getStringValue() const;
301 302