// Copyright 2016 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef CORE_FPDFAPI_FPDF_PARSER_INCLUDE_CPDF_OBJECT_H_ #define CORE_FPDFAPI_FPDF_PARSER_INCLUDE_CPDF_OBJECT_H_ #include "core/fxcrt/include/fx_string.h" #include "core/fxcrt/include/fx_system.h" class CPDF_Array; class CPDF_Boolean; class CPDF_Dictionary; class CPDF_Name; class CPDF_Null; class CPDF_Number; class CPDF_Reference; class CPDF_Stream; class CPDF_String; class CPDF_Object { public: enum Type { BOOLEAN = 1, NUMBER, STRING, NAME, ARRAY, DICTIONARY, STREAM, NULLOBJ, REFERENCE }; virtual Type GetType() const = 0; FX_DWORD GetObjNum() const { return m_ObjNum; } FX_DWORD GetGenNum() const { return m_GenNum; } virtual CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const = 0; virtual CPDF_Object* GetDirect() const; FX_BOOL IsModified() const { return FALSE; } void Release(); virtual CFX_ByteString GetString() const; virtual CFX_ByteStringC GetConstString() const; virtual CFX_WideString GetUnicodeText() const; virtual FX_FLOAT GetNumber() const; virtual int GetInteger() const; virtual CPDF_Dictionary* GetDict() const; virtual CPDF_Array* GetArray() const; virtual void SetString(const CFX_ByteString& str); virtual bool IsArray() const; virtual bool IsBoolean() const; virtual bool IsDictionary() const; virtual bool IsName() const; virtual bool IsNumber() const; virtual bool IsReference() const; virtual bool IsStream() const; virtual bool IsString() const; virtual CPDF_Array* AsArray(); virtual const CPDF_Array* AsArray() const; virtual CPDF_Boolean* AsBoolean(); virtual const CPDF_Boolean* AsBoolean() const; virtual CPDF_Dictionary* AsDictionary(); virtual const CPDF_Dictionary* AsDictionary() const; virtual CPDF_Name* AsName(); virtual const CPDF_Name* AsName() const; virtual CPDF_Number* AsNumber(); virtual const CPDF_Number* AsNumber() const; virtual CPDF_Reference* AsReference(); virtual const CPDF_Reference* AsReference() const; virtual CPDF_Stream* AsStream(); virtual const CPDF_Stream* AsStream() const; virtual CPDF_String* AsString(); virtual const CPDF_String* AsString() const; protected: CPDF_Object() : m_ObjNum(0), m_GenNum(0) {} virtual ~CPDF_Object(); void Destroy() { delete this; } FX_DWORD m_ObjNum; FX_DWORD m_GenNum; friend class CPDF_IndirectObjectHolder; friend class CPDF_Parser; private: CPDF_Object(const CPDF_Object& src) {} }; inline CPDF_Boolean* ToBoolean(CPDF_Object* obj) { return obj ? obj->AsBoolean() : nullptr; } inline const CPDF_Boolean* ToBoolean(const CPDF_Object* obj) { return obj ? obj->AsBoolean() : nullptr; } inline CPDF_Number* ToNumber(CPDF_Object* obj) { return obj ? obj->AsNumber() : nullptr; } inline const CPDF_Number* ToNumber(const CPDF_Object* obj) { return obj ? obj->AsNumber() : nullptr; } inline CPDF_String* ToString(CPDF_Object* obj) { return obj ? obj->AsString() : nullptr; } inline const CPDF_String* ToString(const CPDF_Object* obj) { return obj ? obj->AsString() : nullptr; } inline CPDF_Name* ToName(CPDF_Object* obj) { return obj ? obj->AsName() : nullptr; } inline const CPDF_Name* ToName(const CPDF_Object* obj) { return obj ? obj->AsName() : nullptr; } inline CPDF_Array* ToArray(CPDF_Object* obj) { return obj ? obj->AsArray() : nullptr; } inline const CPDF_Array* ToArray(const CPDF_Object* obj) { return obj ? obj->AsArray() : nullptr; } inline CPDF_Dictionary* ToDictionary(CPDF_Object* obj) { return obj ? obj->AsDictionary() : nullptr; } inline const CPDF_Dictionary* ToDictionary(const CPDF_Object* obj) { return obj ? obj->AsDictionary() : nullptr; } inline CPDF_Reference* ToReference(CPDF_Object* obj) { return obj ? obj->AsReference() : nullptr; } inline const CPDF_Reference* ToReference(const CPDF_Object* obj) { return obj ? obj->AsReference() : nullptr; } inline CPDF_Stream* ToStream(CPDF_Object* obj) { return obj ? obj->AsStream() : nullptr; } inline const CPDF_Stream* ToStream(const CPDF_Object* obj) { return obj ? obj->AsStream() : nullptr; } #endif // CORE_FPDFAPI_FPDF_PARSER_INCLUDE_CPDF_OBJECT_H_