Add type cast definitions for CPDF_Stream.
[pdfium.git] / core / include / fpdfapi / fpdf_objects.h
index 4141ec8..45ca665 100644 (file)
@@ -16,6 +16,7 @@ class CPDF_CryptoHandler;
 class CPDF_Dictionary;
 class CPDF_Document;
 class CPDF_IndirectObjects;
+class CPDF_Name;
 class CPDF_Null;
 class CPDF_Number;
 class CPDF_Parser;
@@ -78,11 +79,35 @@ class CPDF_Object {
 
   FX_BOOL IsModified() const { return FALSE; }
 
+  bool IsArray() const { return m_Type == PDFOBJ_ARRAY; }
+  bool IsBoolean() const { return m_Type == PDFOBJ_BOOLEAN; }
   bool IsDictionary() const { return m_Type == PDFOBJ_DICTIONARY; }
+  bool IsName() const { return m_Type == PDFOBJ_NAME; }
+  bool IsNumber() const { return m_Type == PDFOBJ_NUMBER; }
+  bool IsStream() const { return m_Type == PDFOBJ_STREAM; }
+  bool IsString() const { return m_Type == PDFOBJ_STRING; }
+
+  CPDF_Array* AsArray();
+  const CPDF_Array* AsArray() const;
+
+  CPDF_Boolean* AsBoolean();
+  const CPDF_Boolean* AsBoolean() const;
 
   CPDF_Dictionary* AsDictionary();
   const CPDF_Dictionary* AsDictionary() const;
 
+  CPDF_Name* AsName();
+  const CPDF_Name* AsName() const;
+
+  CPDF_Number* AsNumber();
+  const CPDF_Number* AsNumber() const;
+
+  CPDF_Stream* AsStream();
+  const CPDF_Stream* AsStream() const;
+
+  CPDF_String* AsString();
+  const CPDF_String* AsString() const;
+
  protected:
   CPDF_Object(FX_DWORD type) : m_Type(type), m_ObjNum(0), m_GenNum(0) {}
   ~CPDF_Object() {}
@@ -117,6 +142,13 @@ class CPDF_Boolean : public CPDF_Object {
   FX_BOOL m_bValue;
   friend class CPDF_Object;
 };
+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:
   static CPDF_Number* Create(int value) { return new CPDF_Number(value); }
@@ -127,13 +159,7 @@ class CPDF_Number : public CPDF_Object {
     return new CPDF_Number(str);
   }
 
-  static CPDF_Number* Create(FX_BOOL bInteger, void* pData) {
-    return new CPDF_Number(bInteger, pData);
-  }
-
-  CPDF_Number() : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(false), m_Integer(0) {}
-
-  CPDF_Number(FX_BOOL bInteger, void* pData);
+  CPDF_Number() : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(TRUE), m_Integer(0) {}
 
   CPDF_Number(int value);
 
@@ -173,6 +199,13 @@ class CPDF_Number : public CPDF_Object {
   };
   friend class CPDF_Object;
 };
+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:
   static CPDF_String* Create(const CFX_ByteString& str, FX_BOOL bHex = FALSE) {
@@ -204,6 +237,13 @@ class CPDF_String : public CPDF_Object {
   FX_BOOL m_bHex;
   friend class CPDF_Object;
 };
+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:
   static CPDF_Name* Create(const CFX_ByteString& str) {
@@ -232,6 +272,13 @@ class CPDF_Name : public CPDF_Object {
   CFX_ByteString m_Name;
   friend class CPDF_Object;
 };
+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:
   static CPDF_Array* Create() { return new CPDF_Array(); }
@@ -302,6 +349,13 @@ class CPDF_Array : public CPDF_Object {
   CFX_PtrArray m_Objects;
   friend class CPDF_Object;
 };
+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:
   static CPDF_Dictionary* Create() { return new CPDF_Dictionary(); }
@@ -469,6 +523,13 @@ class CPDF_Stream : public CPDF_Object {
   friend class CPDF_StreamAcc;
   friend class CPDF_AttachmentAcc;
 };
+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();