diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index 0d820a6..2cafbab 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -25,6 +25,8 @@ using namespace std::literals; using namespace qpdf; +const Null Null::temp_; + BaseHandle:: operator QPDFObjGen() const { diff --git a/libqpdf/qpdf/QPDFObjectHandle_private.hh b/libqpdf/qpdf/QPDFObjectHandle_private.hh index cccbd7d..834b09c 100644 --- a/libqpdf/qpdf/QPDFObjectHandle_private.hh +++ b/libqpdf/qpdf/QPDFObjectHandle_private.hh @@ -468,6 +468,39 @@ namespace qpdf } }; + class Null final: public BaseHandle + { + public: + // Unlike other types, the Null default constructor creates a valid null object. + Null() : + BaseHandle(QPDFObject::create()) + { + } + + Null(Null const&) = default; + Null(Null&&) = default; + Null& operator=(Null const&) = default; + Null& operator=(Null&&) = default; + ~Null() = default; + + // For legacy support, return a Null object to be used as a temporary return value. + static QPDFObjectHandle + temp() + { + return temp_.oh(); + } + + // For legacy support, return an explicit temporary Null object if oh is null. + static QPDFObjectHandle + if_null(QPDFObjectHandle oh) + { + return oh ? std::move(oh) : Null::temp(); + } + + private: + static const Null temp_; + }; // class Null + class Stream final: public BaseHandle { public: