Commit 586865f980f43d5fc637d9d06f5cf1c98ce853b2
1 parent
9504421e
Move QPDFObject::write_json to BaseHandle
Showing
3 changed files
with
17 additions
and
15 deletions
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& p) | @@ -483,11 +483,11 @@ QPDFObject::write_json(int json_version, JSON::Writer& 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& p) | @@ -507,7 +507,7 @@ QPDFObject::write_json(int json_version, JSON::Writer& 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& p) | @@ -521,7 +521,7 @@ QPDFObject::write_json(int json_version, JSON::Writer& 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& p) | @@ -535,7 +535,7 @@ QPDFObject::write_json(int json_version, JSON::Writer& 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& p) | @@ -544,7 +544,7 @@ QPDFObject::write_json(int json_version, JSON::Writer& 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& p) | @@ -569,10 +569,10 @@ QPDFObject::write_json(int json_version, JSON::Writer& 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& p, bool dereference_ | @@ -1471,7 +1471,7 @@ QPDFObjectHandle::writeJSON(int json_version, JSON::Writer& 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 |