| Index: core/include/fpdfapi/fpdf_objects.h
 | 
| diff --git a/core/include/fpdfapi/fpdf_objects.h b/core/include/fpdfapi/fpdf_objects.h
 | 
| deleted file mode 100644
 | 
| index 42282a1dcc24f2ea62f08e3f3202d3090ede8227..0000000000000000000000000000000000000000
 | 
| --- a/core/include/fpdfapi/fpdf_objects.h
 | 
| +++ /dev/null
 | 
| @@ -1,553 +0,0 @@
 | 
| -// Copyright 2014 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_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_
 | 
| -#define CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_
 | 
| -
 | 
| -#include <map>
 | 
| -#include <set>
 | 
| -
 | 
| -#include "core/include/fxcrt/fx_coordinates.h"
 | 
| -#include "core/include/fxcrt/fx_system.h"
 | 
| -
 | 
| -class CPDF_Array;
 | 
| -class CPDF_Boolean;
 | 
| -class CPDF_Dictionary;
 | 
| -class CPDF_IndirectObjectHolder;
 | 
| -class CPDF_Name;
 | 
| -class CPDF_Null;
 | 
| -class CPDF_Number;
 | 
| -class CPDF_Parser;
 | 
| -class CPDF_Reference;
 | 
| -class CPDF_Stream;
 | 
| -class CPDF_StreamAcc;
 | 
| -class CPDF_String;
 | 
| -class IFX_FileRead;
 | 
| -
 | 
| -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) {}
 | 
| -};
 | 
| -
 | 
| -class CPDF_Boolean : public CPDF_Object {
 | 
| - public:
 | 
| -  CPDF_Boolean() : m_bValue(false) {}
 | 
| -  explicit CPDF_Boolean(FX_BOOL value) : m_bValue(value) {}
 | 
| -
 | 
| -  // CPDF_Object.
 | 
| -  Type GetType() const override;
 | 
| -  CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const override;
 | 
| -  CFX_ByteString GetString() const override;
 | 
| -  int GetInteger() const override;
 | 
| -  void SetString(const CFX_ByteString& str) override;
 | 
| -  bool IsBoolean() const override;
 | 
| -  CPDF_Boolean* AsBoolean() override;
 | 
| -  const CPDF_Boolean* AsBoolean() const override;
 | 
| -
 | 
| - protected:
 | 
| -  ~CPDF_Boolean() override;
 | 
| -
 | 
| -  FX_BOOL m_bValue;
 | 
| -};
 | 
| -
 | 
| -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;
 | 
| -}
 | 
| -
 | 
| -class CPDF_Number : public CPDF_Object {
 | 
| - public:
 | 
| -  CPDF_Number() : m_bInteger(TRUE), m_Integer(0) {}
 | 
| -  explicit CPDF_Number(int value) : m_bInteger(TRUE), m_Integer(value) {}
 | 
| -  explicit CPDF_Number(FX_FLOAT value) : m_bInteger(FALSE), m_Float(value) {}
 | 
| -  explicit CPDF_Number(const CFX_ByteStringC& str);
 | 
| -
 | 
| -  // CPDF_Object.
 | 
| -  Type GetType() const override;
 | 
| -  CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const override;
 | 
| -  CFX_ByteString GetString() const override;
 | 
| -  FX_FLOAT GetNumber() const override;
 | 
| -  int GetInteger() const override;
 | 
| -  void SetString(const CFX_ByteString& str) override;
 | 
| -  bool IsNumber() const override;
 | 
| -  CPDF_Number* AsNumber() override;
 | 
| -  const CPDF_Number* AsNumber() const override;
 | 
| -
 | 
| -  FX_BOOL IsInteger() { return m_bInteger; }
 | 
| -
 | 
| - protected:
 | 
| -  ~CPDF_Number() override;
 | 
| -
 | 
| -  FX_BOOL m_bInteger;
 | 
| -  union {
 | 
| -    int m_Integer;
 | 
| -    FX_FLOAT m_Float;
 | 
| -  };
 | 
| -};
 | 
| -
 | 
| -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;
 | 
| -}
 | 
| -
 | 
| -class CPDF_String : public CPDF_Object {
 | 
| - public:
 | 
| -  CPDF_String() : m_bHex(FALSE) {}
 | 
| -  CPDF_String(const CFX_ByteString& str, FX_BOOL bHex)
 | 
| -      : m_String(str), m_bHex(bHex) {}
 | 
| -  explicit CPDF_String(const CFX_WideString& str);
 | 
| -
 | 
| -  // CPDF_Object.
 | 
| -  Type GetType() const override;
 | 
| -  CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const override;
 | 
| -  CFX_ByteString GetString() const override;
 | 
| -  CFX_ByteStringC GetConstString() const override;
 | 
| -  CFX_WideString GetUnicodeText() const override;
 | 
| -  void SetString(const CFX_ByteString& str) override;
 | 
| -  bool IsString() const override;
 | 
| -  CPDF_String* AsString() override;
 | 
| -  const CPDF_String* AsString() const override;
 | 
| -
 | 
| -  FX_BOOL IsHex() const { return m_bHex; }
 | 
| -
 | 
| - protected:
 | 
| -  ~CPDF_String() override;
 | 
| -
 | 
| -  CFX_ByteString m_String;
 | 
| -  FX_BOOL m_bHex;
 | 
| -};
 | 
| -
 | 
| -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;
 | 
| -}
 | 
| -
 | 
| -class CPDF_Name : public CPDF_Object {
 | 
| - public:
 | 
| -  explicit CPDF_Name(const CFX_ByteString& str) : m_Name(str) {}
 | 
| -  explicit CPDF_Name(const CFX_ByteStringC& str) : m_Name(str) {}
 | 
| -  explicit CPDF_Name(const FX_CHAR* str) : m_Name(str) {}
 | 
| -
 | 
| -  // CPDF_Object.
 | 
| -  Type GetType() const override;
 | 
| -  CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const override;
 | 
| -  CFX_ByteString GetString() const override;
 | 
| -  CFX_ByteStringC GetConstString() const override;
 | 
| -  CFX_WideString GetUnicodeText() const override;
 | 
| -  void SetString(const CFX_ByteString& str) override;
 | 
| -  bool IsName() const override;
 | 
| -  CPDF_Name* AsName() override;
 | 
| -  const CPDF_Name* AsName() const override;
 | 
| -
 | 
| - protected:
 | 
| -  ~CPDF_Name() override;
 | 
| -
 | 
| -  CFX_ByteString m_Name;
 | 
| -};
 | 
| -
 | 
| -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;
 | 
| -}
 | 
| -
 | 
| -class CPDF_Array : public CPDF_Object {
 | 
| - public:
 | 
| -  CPDF_Array();
 | 
| -
 | 
| -  // CPDF_Object.
 | 
| -  Type GetType() const override;
 | 
| -  CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const override;
 | 
| -  CPDF_Array* GetArray() const override;
 | 
| -  bool IsArray() const override;
 | 
| -  CPDF_Array* AsArray() override;
 | 
| -  const CPDF_Array* AsArray() const override;
 | 
| -
 | 
| -  FX_DWORD GetCount() const { return m_Objects.GetSize(); }
 | 
| -  CPDF_Object* GetElement(FX_DWORD index) const;
 | 
| -  CPDF_Object* GetElementValue(FX_DWORD index) const;
 | 
| -  CFX_Matrix GetMatrix();
 | 
| -  CFX_FloatRect GetRect();
 | 
| -  CFX_ByteString GetStringAt(FX_DWORD index) const;
 | 
| -  CFX_ByteStringC GetConstStringAt(FX_DWORD index) const;
 | 
| -  int GetIntegerAt(FX_DWORD index) const;
 | 
| -  FX_FLOAT GetNumberAt(FX_DWORD index) const;
 | 
| -  CPDF_Dictionary* GetDictAt(FX_DWORD index) const;
 | 
| -  CPDF_Stream* GetStreamAt(FX_DWORD index) const;
 | 
| -  CPDF_Array* GetArrayAt(FX_DWORD index) const;
 | 
| -  FX_FLOAT GetFloatAt(FX_DWORD index) const { return GetNumberAt(index); }
 | 
| -
 | 
| -  void SetAt(FX_DWORD index,
 | 
| -             CPDF_Object* pObj,
 | 
| -             CPDF_IndirectObjectHolder* pObjs = nullptr);
 | 
| -  void InsertAt(FX_DWORD index,
 | 
| -                CPDF_Object* pObj,
 | 
| -                CPDF_IndirectObjectHolder* pObjs = nullptr);
 | 
| -  void RemoveAt(FX_DWORD index, int nCount = 1);
 | 
| -
 | 
| -  void Add(CPDF_Object* pObj, CPDF_IndirectObjectHolder* pObjs = nullptr);
 | 
| -  void AddNumber(FX_FLOAT f);
 | 
| -  void AddInteger(int i);
 | 
| -  void AddString(const CFX_ByteString& str);
 | 
| -  void AddName(const CFX_ByteString& str);
 | 
| -  void AddReference(CPDF_IndirectObjectHolder* pDoc, FX_DWORD objnum);
 | 
| -  void AddReference(CPDF_IndirectObjectHolder* pDoc, CPDF_Object* obj) {
 | 
| -    AddReference(pDoc, obj->GetObjNum());
 | 
| -  }
 | 
| -
 | 
| - protected:
 | 
| -  ~CPDF_Array() override;
 | 
| -
 | 
| -  CFX_ArrayTemplate<CPDF_Object*> m_Objects;
 | 
| -};
 | 
| -
 | 
| -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;
 | 
| -}
 | 
| -
 | 
| -class CPDF_Dictionary : public CPDF_Object {
 | 
| - public:
 | 
| -  using iterator = std::map<CFX_ByteString, CPDF_Object*>::iterator;
 | 
| -  using const_iterator = std::map<CFX_ByteString, CPDF_Object*>::const_iterator;
 | 
| -
 | 
| -  CPDF_Dictionary();
 | 
| -
 | 
| -  // CPDF_Object.
 | 
| -  Type GetType() const override;
 | 
| -  CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const override;
 | 
| -  CPDF_Dictionary* GetDict() const override;
 | 
| -  bool IsDictionary() const override;
 | 
| -  CPDF_Dictionary* AsDictionary() override;
 | 
| -  const CPDF_Dictionary* AsDictionary() const override;
 | 
| -
 | 
| -  size_t GetCount() const { return m_Map.size(); }
 | 
| -  CPDF_Object* GetElement(const CFX_ByteStringC& key) const;
 | 
| -  CPDF_Object* GetElementValue(const CFX_ByteStringC& key) const;
 | 
| -  CFX_ByteString GetStringBy(const CFX_ByteStringC& key) const;
 | 
| -  CFX_ByteStringC GetConstStringBy(const CFX_ByteStringC& key) const;
 | 
| -  CFX_ByteString GetStringBy(const CFX_ByteStringC& key,
 | 
| -                             const CFX_ByteStringC& default_str) const;
 | 
| -  CFX_ByteStringC GetConstStringBy(const CFX_ByteStringC& key,
 | 
| -                                   const CFX_ByteStringC& default_str) const;
 | 
| -  CFX_WideString GetUnicodeTextBy(const CFX_ByteStringC& key) const;
 | 
| -  int GetIntegerBy(const CFX_ByteStringC& key) const;
 | 
| -  int GetIntegerBy(const CFX_ByteStringC& key, int default_int) const;
 | 
| -  FX_BOOL GetBooleanBy(const CFX_ByteStringC& key,
 | 
| -                       FX_BOOL bDefault = FALSE) const;
 | 
| -  FX_FLOAT GetNumberBy(const CFX_ByteStringC& key) const;
 | 
| -  CPDF_Dictionary* GetDictBy(const CFX_ByteStringC& key) const;
 | 
| -  CPDF_Stream* GetStreamBy(const CFX_ByteStringC& key) const;
 | 
| -  CPDF_Array* GetArrayBy(const CFX_ByteStringC& key) const;
 | 
| -  CFX_FloatRect GetRectBy(const CFX_ByteStringC& key) const;
 | 
| -  CFX_Matrix GetMatrixBy(const CFX_ByteStringC& key) const;
 | 
| -  FX_FLOAT GetFloatBy(const CFX_ByteStringC& key) const {
 | 
| -    return GetNumberBy(key);
 | 
| -  }
 | 
| -
 | 
| -  FX_BOOL KeyExist(const CFX_ByteStringC& key) const;
 | 
| -  bool IsSignatureDict() const;
 | 
| -
 | 
| -  // Set* functions invalidate iterators for the element with the key |key|.
 | 
| -  void SetAt(const CFX_ByteStringC& key, CPDF_Object* pObj);
 | 
| -  void SetAtName(const CFX_ByteStringC& key, const CFX_ByteString& name);
 | 
| -  void SetAtString(const CFX_ByteStringC& key, const CFX_ByteString& str);
 | 
| -  void SetAtInteger(const CFX_ByteStringC& key, int i);
 | 
| -  void SetAtNumber(const CFX_ByteStringC& key, FX_FLOAT f);
 | 
| -  void SetAtReference(const CFX_ByteStringC& key,
 | 
| -                      CPDF_IndirectObjectHolder* pDoc,
 | 
| -                      FX_DWORD objnum);
 | 
| -  void SetAtReference(const CFX_ByteStringC& key,
 | 
| -                      CPDF_IndirectObjectHolder* pDoc,
 | 
| -                      CPDF_Object* obj) {
 | 
| -    SetAtReference(key, pDoc, obj->GetObjNum());
 | 
| -  }
 | 
| -  void SetAtRect(const CFX_ByteStringC& key, const CFX_FloatRect& rect);
 | 
| -  void SetAtMatrix(const CFX_ByteStringC& key, const CFX_Matrix& matrix);
 | 
| -  void SetAtBoolean(const CFX_ByteStringC& key, FX_BOOL bValue);
 | 
| -
 | 
| -  void AddReference(const CFX_ByteStringC& key,
 | 
| -                    CPDF_IndirectObjectHolder* pDoc,
 | 
| -                    FX_DWORD objnum);
 | 
| -
 | 
| -  // Invalidates iterators for the element with the key |key|.
 | 
| -  void RemoveAt(const CFX_ByteStringC& key);
 | 
| -
 | 
| -  // Invalidates iterators for the element with the key |oldkey|.
 | 
| -  void ReplaceKey(const CFX_ByteStringC& oldkey, const CFX_ByteStringC& newkey);
 | 
| -
 | 
| -  iterator begin() { return m_Map.begin(); }
 | 
| -  iterator end() { return m_Map.end(); }
 | 
| -  const_iterator begin() const { return m_Map.begin(); }
 | 
| -  const_iterator end() const { return m_Map.end(); }
 | 
| -
 | 
| - protected:
 | 
| -  ~CPDF_Dictionary() override;
 | 
| -
 | 
| -  std::map<CFX_ByteString, CPDF_Object*> m_Map;
 | 
| -};
 | 
| -
 | 
| -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;
 | 
| -}
 | 
| -
 | 
| -class CPDF_Stream : public CPDF_Object {
 | 
| - public:
 | 
| -  CPDF_Stream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict);
 | 
| -
 | 
| -  // CPDF_Object.
 | 
| -  Type GetType() const override;
 | 
| -  CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const override;
 | 
| -  CPDF_Dictionary* GetDict() const override;
 | 
| -  CFX_WideString GetUnicodeText() const override;
 | 
| -  bool IsStream() const override;
 | 
| -  CPDF_Stream* AsStream() override;
 | 
| -  const CPDF_Stream* AsStream() const override;
 | 
| -
 | 
| -  FX_DWORD GetRawSize() const { return m_dwSize; }
 | 
| -  uint8_t* GetRawData() const { return m_pDataBuf; }
 | 
| -
 | 
| -  void SetData(const uint8_t* pData,
 | 
| -               FX_DWORD size,
 | 
| -               FX_BOOL bCompressed,
 | 
| -               FX_BOOL bKeepBuf);
 | 
| -
 | 
| -  void InitStream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict);
 | 
| -  void InitStreamFromFile(IFX_FileRead* pFile, CPDF_Dictionary* pDict);
 | 
| -
 | 
| -  FX_BOOL ReadRawData(FX_FILESIZE start_pos,
 | 
| -                      uint8_t* pBuf,
 | 
| -                      FX_DWORD buf_size) const;
 | 
| -
 | 
| -  bool IsMemoryBased() const { return m_GenNum == kMemoryBasedGenNum; }
 | 
| -
 | 
| - protected:
 | 
| -  static const FX_DWORD kMemoryBasedGenNum = (FX_DWORD)-1;
 | 
| -
 | 
| -  ~CPDF_Stream() override;
 | 
| -
 | 
| -  void InitStreamInternal(CPDF_Dictionary* pDict);
 | 
| -
 | 
| -  CPDF_Dictionary* m_pDict;
 | 
| -  FX_DWORD m_dwSize;
 | 
| -  FX_DWORD m_GenNum;
 | 
| -
 | 
| -  union {
 | 
| -    uint8_t* m_pDataBuf;
 | 
| -    IFX_FileRead* m_pFile;
 | 
| -  };
 | 
| -};
 | 
| -
 | 
| -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;
 | 
| -}
 | 
| -
 | 
| -class CPDF_StreamAcc {
 | 
| - public:
 | 
| -  CPDF_StreamAcc();
 | 
| -  ~CPDF_StreamAcc();
 | 
| -
 | 
| -  void LoadAllData(const CPDF_Stream* pStream,
 | 
| -                   FX_BOOL bRawAccess = FALSE,
 | 
| -                   FX_DWORD estimated_size = 0,
 | 
| -                   FX_BOOL bImageAcc = FALSE);
 | 
| -
 | 
| -  const CPDF_Stream* GetStream() const { return m_pStream; }
 | 
| -  CPDF_Dictionary* GetDict() const {
 | 
| -    return m_pStream ? m_pStream->GetDict() : nullptr;
 | 
| -  }
 | 
| -  const uint8_t* GetData() const;
 | 
| -  FX_DWORD GetSize() const;
 | 
| -  const CFX_ByteString& GetImageDecoder() const { return m_ImageDecoder; }
 | 
| -  const CPDF_Dictionary* GetImageParam() const { return m_pImageParam; }
 | 
| -
 | 
| -  uint8_t* DetachData();
 | 
| -
 | 
| - protected:
 | 
| -  uint8_t* m_pData;
 | 
| -  FX_DWORD m_dwSize;
 | 
| -  FX_BOOL m_bNewBuf;
 | 
| -  CFX_ByteString m_ImageDecoder;
 | 
| -  CPDF_Dictionary* m_pImageParam;
 | 
| -  const CPDF_Stream* m_pStream;
 | 
| -  uint8_t* m_pSrcData;
 | 
| -};
 | 
| -
 | 
| -class CPDF_Null : public CPDF_Object {
 | 
| - public:
 | 
| -  CPDF_Null() {}
 | 
| -
 | 
| -  // CPDF_Object.
 | 
| -  Type GetType() const override;
 | 
| -  CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const override;
 | 
| -};
 | 
| -
 | 
| -class CPDF_Reference : public CPDF_Object {
 | 
| - public:
 | 
| -  CPDF_Reference(CPDF_IndirectObjectHolder* pDoc, int objnum)
 | 
| -      : m_pObjList(pDoc), m_RefObjNum(objnum) {}
 | 
| -
 | 
| -  // CPDF_Object.
 | 
| -  Type GetType() const override;
 | 
| -  CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const override;
 | 
| -  CPDF_Object* GetDirect() const override;
 | 
| -  CFX_ByteString GetString() const override;
 | 
| -  CFX_ByteStringC GetConstString() const override;
 | 
| -  FX_FLOAT GetNumber() const override;
 | 
| -  int GetInteger() const override;
 | 
| -  CPDF_Dictionary* GetDict() const override;
 | 
| -
 | 
| -  // TODO(weili): check whether GetUnicodeText() and GetArray() are needed.
 | 
| -  bool IsReference() const override;
 | 
| -  CPDF_Reference* AsReference() override;
 | 
| -  const CPDF_Reference* AsReference() const override;
 | 
| -
 | 
| -  CPDF_IndirectObjectHolder* GetObjList() const { return m_pObjList; }
 | 
| -  FX_DWORD GetRefObjNum() const { return m_RefObjNum; }
 | 
| -
 | 
| -  void SetRef(CPDF_IndirectObjectHolder* pDoc, FX_DWORD objnum);
 | 
| -
 | 
| - protected:
 | 
| -  ~CPDF_Reference() override;
 | 
| -  CPDF_Object* SafeGetDirect() const {
 | 
| -    CPDF_Object* obj = GetDirect();
 | 
| -    if (!obj || obj->IsReference())
 | 
| -      return nullptr;
 | 
| -    return obj;
 | 
| -  }
 | 
| -
 | 
| -  CPDF_IndirectObjectHolder* m_pObjList;
 | 
| -  FX_DWORD m_RefObjNum;
 | 
| -};
 | 
| -
 | 
| -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;
 | 
| -}
 | 
| -
 | 
| -class CPDF_IndirectObjectHolder {
 | 
| - public:
 | 
| -  using iterator = std::map<FX_DWORD, CPDF_Object*>::iterator;
 | 
| -  using const_iterator = std::map<FX_DWORD, CPDF_Object*>::const_iterator;
 | 
| -
 | 
| -  explicit CPDF_IndirectObjectHolder(CPDF_Parser* pParser);
 | 
| -  ~CPDF_IndirectObjectHolder();
 | 
| -
 | 
| -  CPDF_Object* GetIndirectObject(FX_DWORD objnum);
 | 
| -  FX_DWORD AddIndirectObject(CPDF_Object* pObj);
 | 
| -  void ReleaseIndirectObject(FX_DWORD objnum);
 | 
| -
 | 
| -  // Takes ownership of |pObj|.
 | 
| -  FX_BOOL InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pObj);
 | 
| -
 | 
| -  FX_DWORD GetLastObjNum() const { return m_LastObjNum; }
 | 
| -  iterator begin() { return m_IndirectObjs.begin(); }
 | 
| -  const_iterator begin() const { return m_IndirectObjs.begin(); }
 | 
| -  iterator end() { return m_IndirectObjs.end(); }
 | 
| -  const_iterator end() const { return m_IndirectObjs.end(); }
 | 
| -
 | 
| - protected:
 | 
| -  CPDF_Parser* m_pParser;
 | 
| -  FX_DWORD m_LastObjNum;
 | 
| -  std::map<FX_DWORD, CPDF_Object*> m_IndirectObjs;
 | 
| -};
 | 
| -
 | 
| -#endif  // CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_
 | 
| 
 |