From 586865f980f43d5fc637d9d06f5cf1c98ce853b2 Mon Sep 17 00:00:00 2001 From: m-holger Date: Tue, 4 Mar 2025 14:50:27 +0000 Subject: [PATCH] Move QPDFObject::write_json to BaseHandle --- include/qpdf/ObjectHandle.hh | 1 + libqpdf/QPDFObjectHandle.cc | 28 ++++++++++++++-------------- libqpdf/qpdf/QPDFObject_private.hh | 3 ++- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/include/qpdf/ObjectHandle.hh b/include/qpdf/ObjectHandle.hh index e6f1a5c..6bae99c 100644 --- a/include/qpdf/ObjectHandle.hh +++ b/include/qpdf/ObjectHandle.hh @@ -62,6 +62,7 @@ namespace qpdf inline qpdf_object_type_e raw_type_code() const; inline qpdf_object_type_e type_code() const; std::string unparse() const; + void write_json(int json_version, JSON::Writer& p) const; protected: BaseHandle() = default; diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index 4e09b24..5d4a94b 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -446,9 +446,9 @@ BaseHandle::unparse() const } void -QPDFObject::write_json(int json_version, JSON::Writer& p) +BaseHandle::write_json(int json_version, JSON::Writer& p) const { - switch (getResolvedTypeCode()) { + switch (type_code()) { case ::ot_uninitialized: throw std::logic_error( "QPDFObjectHandle: attempting to get JSON from a uninitialized object"); @@ -459,14 +459,14 @@ QPDFObject::write_json(int json_version, JSON::Writer& p) p << "null"; break; case ::ot_boolean: - p << std::get(value).val; + p << std::get(obj->value).val; break; case ::ot_integer: - p << std::to_string(std::get(value).val); + p << std::to_string(std::get(obj->value).val); break; case ::ot_real: { - auto const& val = std::get(value).val; + auto const& val = std::get(obj->value).val; if (val.length() == 0) { // Can't really happen... p << "0"; @@ -483,11 +483,11 @@ QPDFObject::write_json(int json_version, JSON::Writer& p) } break; case ::ot_string: - std::get(value).writeJSON(json_version, p); + std::get(obj->value).writeJSON(json_version, p); break; case ::ot_name: { - auto const& n = std::get(value); + auto const& n = std::get(obj->value); // For performance reasons this code is duplicated in QPDF_Dictionary::writeJSON. When // updating this method make sure QPDF_Dictionary is also update. if (json_version == 1) { @@ -507,7 +507,7 @@ QPDFObject::write_json(int json_version, JSON::Writer& p) break; case ::ot_array: { - auto const& a = std::get(value); + auto const& a = std::get(obj->value); p.writeStart('['); if (a.sp) { int next = 0; @@ -521,7 +521,7 @@ QPDFObject::write_json(int json_version, JSON::Writer& p) if (item_og.isIndirect()) { p << "\"" << item_og.unparse(' ') << " R\""; } else { - item.second.getObj()->write_json(json_version, p); + item.second.write_json(json_version, p); } next = ++key; } @@ -535,7 +535,7 @@ QPDFObject::write_json(int json_version, JSON::Writer& p) if (item_og.isIndirect()) { p << "\"" << item_og.unparse(' ') << " R\""; } else { - item.getObj()->write_json(json_version, p); + item.write_json(json_version, p); } } } @@ -544,7 +544,7 @@ QPDFObject::write_json(int json_version, JSON::Writer& p) break; case ::ot_dictionary: { - auto const& d = std::get(value); + auto const& d = std::get(obj->value); p.writeStart('{'); for (auto& iter: d.items) { if (!iter.second.null()) { @@ -569,10 +569,10 @@ QPDFObject::write_json(int json_version, JSON::Writer& p) } break; case ::ot_stream: - std::get(value).m->stream_dict.writeJSON(json_version, p); + std::get(obj->value).m->stream_dict.writeJSON(json_version, p); break; case ::ot_reference: - p << "\"" << getObjGen().unparse(' ') << " R\""; + p << "\"" << obj->og.unparse(' ') << " R\""; break; default: 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_ } else if (!obj) { throw std::logic_error("attempted to dereference an uninitialized QPDFObjectHandle"); } else { - obj->write_json(json_version, p); + write_json(json_version, p); } } diff --git a/libqpdf/qpdf/QPDFObject_private.hh b/libqpdf/qpdf/QPDFObject_private.hh index 18cf771..2de0014 100644 --- a/libqpdf/qpdf/QPDFObject_private.hh +++ b/libqpdf/qpdf/QPDFObject_private.hh @@ -209,6 +209,7 @@ class QPDF_Stream final friend class QPDF_Stream; friend class QPDFObject; friend class qpdf::Stream; + friend class qpdf::BaseHandle; public: Members(QPDFObjectHandle stream_dict, size_t length) : @@ -227,6 +228,7 @@ class QPDF_Stream final }; friend class QPDFObject; + friend class qpdf::BaseHandle; friend class qpdf::Stream; QPDF_Stream(QPDFObjectHandle stream_dict, size_t length) : @@ -295,7 +297,6 @@ class QPDFObject qpdf, og, std::forward(T(std::forward(args)...))); } - void write_json(int json_version, JSON::Writer& p); void disconnect(); std::string getStringValue() const; -- libgit2 0.21.4