Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(556)

Side by Side Diff: core/fpdfapi/fpdf_parser/cpdf_object.h

Issue 2392603004: Move core/fpdfapi/fpdf_parser to core/fpdfapi/parser (Closed)
Patch Set: Rebase to master Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/fpdfapi/fpdf_parser/cpdf_number.cpp ('k') | core/fpdfapi/fpdf_parser/cpdf_object.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #ifndef CORE_FPDFAPI_FPDF_PARSER_CPDF_OBJECT_H_
8 #define CORE_FPDFAPI_FPDF_PARSER_CPDF_OBJECT_H_
9
10 #include <memory>
11 #include <set>
12
13 #include "core/fxcrt/fx_string.h"
14 #include "core/fxcrt/fx_system.h"
15
16 class CPDF_Array;
17 class CPDF_Boolean;
18 class CPDF_Dictionary;
19 class CPDF_Name;
20 class CPDF_Null;
21 class CPDF_Number;
22 class CPDF_Reference;
23 class CPDF_Stream;
24 class CPDF_String;
25
26 class CPDF_Object {
27 public:
28 static const uint32_t kInvalidObjNum = static_cast<uint32_t>(-1);
29 enum Type {
30 BOOLEAN = 1,
31 NUMBER,
32 STRING,
33 NAME,
34 ARRAY,
35 DICTIONARY,
36 STREAM,
37 NULLOBJ,
38 REFERENCE
39 };
40
41 virtual Type GetType() const = 0;
42 uint32_t GetObjNum() const { return m_ObjNum; }
43 uint32_t GetGenNum() const { return m_GenNum; }
44
45 // Create a deep copy of the object.
46 virtual CPDF_Object* Clone() const = 0;
47 // Create a deep copy of the object except any reference object be
48 // copied to the object it points to directly.
49 virtual CPDF_Object* CloneDirectObject() const;
50 virtual CPDF_Object* GetDirect() const;
51
52 void Release();
53
54 virtual CFX_ByteString GetString() const;
55 virtual CFX_WideString GetUnicodeText() const;
56 virtual FX_FLOAT GetNumber() const;
57 virtual int GetInteger() const;
58 virtual CPDF_Dictionary* GetDict() const;
59
60 virtual void SetString(const CFX_ByteString& str);
61
62 virtual bool IsArray() const;
63 virtual bool IsBoolean() const;
64 virtual bool IsDictionary() const;
65 virtual bool IsName() const;
66 virtual bool IsNumber() const;
67 virtual bool IsReference() const;
68 virtual bool IsStream() const;
69 virtual bool IsString() const;
70
71 virtual CPDF_Array* AsArray();
72 virtual const CPDF_Array* AsArray() const;
73 virtual CPDF_Boolean* AsBoolean();
74 virtual const CPDF_Boolean* AsBoolean() const;
75 virtual CPDF_Dictionary* AsDictionary();
76 virtual const CPDF_Dictionary* AsDictionary() const;
77 virtual CPDF_Name* AsName();
78 virtual const CPDF_Name* AsName() const;
79 virtual CPDF_Number* AsNumber();
80 virtual const CPDF_Number* AsNumber() const;
81 virtual CPDF_Reference* AsReference();
82 virtual const CPDF_Reference* AsReference() const;
83 virtual CPDF_Stream* AsStream();
84 virtual const CPDF_Stream* AsStream() const;
85 virtual CPDF_String* AsString();
86 virtual const CPDF_String* AsString() const;
87
88 protected:
89 friend class CPDF_Array;
90 friend class CPDF_Dictionary;
91 friend class CPDF_Document;
92 friend class CPDF_IndirectObjectHolder;
93 friend class CPDF_Parser;
94 friend class CPDF_Reference;
95 friend class CPDF_Stream;
96 friend struct std::default_delete<CPDF_Object>;
97
98 CPDF_Object() : m_ObjNum(0), m_GenNum(0) {}
99 virtual ~CPDF_Object();
100
101 CPDF_Object* CloneObjectNonCyclic(bool bDirect) const;
102
103 // Create a deep copy of the object with the option to either
104 // copy a reference object or directly copy the object it refers to
105 // when |bDirect| is true.
106 // Also check cyclic reference against |pVisited|, no copy if it is found.
107 // Complex objects should implement their own CloneNonCyclic()
108 // function to properly check for possible loop.
109 virtual CPDF_Object* CloneNonCyclic(
110 bool bDirect,
111 std::set<const CPDF_Object*>* pVisited) const;
112
113 uint32_t m_ObjNum;
114 uint32_t m_GenNum;
115
116 private:
117 CPDF_Object(const CPDF_Object& src) {}
118 };
119
120 inline CPDF_Boolean* ToBoolean(CPDF_Object* obj) {
121 return obj ? obj->AsBoolean() : nullptr;
122 }
123
124 inline const CPDF_Boolean* ToBoolean(const CPDF_Object* obj) {
125 return obj ? obj->AsBoolean() : nullptr;
126 }
127
128 inline CPDF_Number* ToNumber(CPDF_Object* obj) {
129 return obj ? obj->AsNumber() : nullptr;
130 }
131
132 inline const CPDF_Number* ToNumber(const CPDF_Object* obj) {
133 return obj ? obj->AsNumber() : nullptr;
134 }
135
136 inline CPDF_String* ToString(CPDF_Object* obj) {
137 return obj ? obj->AsString() : nullptr;
138 }
139
140 inline const CPDF_String* ToString(const CPDF_Object* obj) {
141 return obj ? obj->AsString() : nullptr;
142 }
143
144 inline CPDF_Name* ToName(CPDF_Object* obj) {
145 return obj ? obj->AsName() : nullptr;
146 }
147
148 inline const CPDF_Name* ToName(const CPDF_Object* obj) {
149 return obj ? obj->AsName() : nullptr;
150 }
151
152 inline CPDF_Array* ToArray(CPDF_Object* obj) {
153 return obj ? obj->AsArray() : nullptr;
154 }
155
156 inline const CPDF_Array* ToArray(const CPDF_Object* obj) {
157 return obj ? obj->AsArray() : nullptr;
158 }
159
160 inline CPDF_Dictionary* ToDictionary(CPDF_Object* obj) {
161 return obj ? obj->AsDictionary() : nullptr;
162 }
163
164 inline const CPDF_Dictionary* ToDictionary(const CPDF_Object* obj) {
165 return obj ? obj->AsDictionary() : nullptr;
166 }
167 inline CPDF_Reference* ToReference(CPDF_Object* obj) {
168 return obj ? obj->AsReference() : nullptr;
169 }
170
171 inline const CPDF_Reference* ToReference(const CPDF_Object* obj) {
172 return obj ? obj->AsReference() : nullptr;
173 }
174
175 inline CPDF_Stream* ToStream(CPDF_Object* obj) {
176 return obj ? obj->AsStream() : nullptr;
177 }
178
179 inline const CPDF_Stream* ToStream(const CPDF_Object* obj) {
180 return obj ? obj->AsStream() : nullptr;
181 }
182
183 #endif // CORE_FPDFAPI_FPDF_PARSER_CPDF_OBJECT_H_
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_parser/cpdf_number.cpp ('k') | core/fpdfapi/fpdf_parser/cpdf_object.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698