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

Side by Side Diff: core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp

Issue 1636503006: Merge to XFA: War on #defines, part 1. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Dircet -> Direct typo. Created 4 years, 11 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
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "core/include/fpdfapi/fpdf_objects.h" 7 #include "core/include/fpdfapi/fpdf_objects.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
11 #include "core/include/fpdfapi/fpdf_parser.h" 11 #include "core/include/fpdfapi/fpdf_parser.h"
12 #include "core/include/fxcrt/fx_string.h" 12 #include "core/include/fxcrt/fx_string.h"
13 #include "third_party/base/stl_util.h" 13 #include "third_party/base/stl_util.h"
14 14
15 namespace { 15 namespace {
16 16
17 const FX_DWORD kBlockSize = 1024; 17 const FX_DWORD kBlockSize = 1024;
18 18
19 } // namespace 19 } // namespace
20 20
21 void CPDF_Object::Release() { 21 void CPDF_Object::Release() {
22 if (m_ObjNum) { 22 if (m_ObjNum) {
23 return; 23 return;
24 } 24 }
25 Destroy(); 25 Destroy();
26 } 26 }
27 void CPDF_Object::Destroy() { 27 void CPDF_Object::Destroy() {
28 switch (m_Type) { 28 switch (m_Type) {
29 case PDFOBJ_STRING: 29 case STRING:
30 delete AsString(); 30 delete AsString();
31 break; 31 break;
32 case PDFOBJ_NAME: 32 case NAME:
33 delete AsName(); 33 delete AsName();
34 break; 34 break;
35 case PDFOBJ_ARRAY: 35 case ARRAY:
36 delete AsArray(); 36 delete AsArray();
37 break; 37 break;
38 case PDFOBJ_DICTIONARY: 38 case DICTIONARY:
39 delete AsDictionary(); 39 delete AsDictionary();
40 break; 40 break;
41 case PDFOBJ_STREAM: 41 case STREAM:
42 delete AsStream(); 42 delete AsStream();
43 break; 43 break;
44 default: 44 default:
45 delete this; 45 delete this;
46 } 46 }
47 } 47 }
48 48
49 const CPDF_Object* CPDF_Object::GetBasicObject() const { 49 const CPDF_Object* CPDF_Object::GetBasicObject() const {
50 const CPDF_Reference* pRef = AsReference(); 50 const CPDF_Reference* pRef = AsReference();
51 if (!pRef) { 51 if (!pRef) {
52 // This is not an indirect reference. 52 // This is not an indirect reference.
53 return this; 53 return this;
54 } 54 }
55 if (!pRef->m_pObjList) 55 if (!pRef->m_pObjList)
56 return nullptr; 56 return nullptr;
57 return pRef->m_pObjList->GetIndirectObject(pRef->GetRefObjNum()); 57 return pRef->m_pObjList->GetIndirectObject(pRef->GetRefObjNum());
58 } 58 }
59 59
60 CFX_ByteString CPDF_Object::GetString() const { 60 CFX_ByteString CPDF_Object::GetString() const {
61 const CPDF_Object* obj = GetBasicObject(); 61 const CPDF_Object* obj = GetBasicObject();
62 if (obj) { 62 if (obj) {
63 switch (obj->GetType()) { 63 switch (obj->GetType()) {
64 case PDFOBJ_BOOLEAN: 64 case BOOLEAN:
65 return obj->AsBoolean()->GetString(); 65 return obj->AsBoolean()->GetString();
66 case PDFOBJ_NUMBER: 66 case NUMBER:
67 return obj->AsNumber()->GetString(); 67 return obj->AsNumber()->GetString();
68 case PDFOBJ_STRING: 68 case STRING:
69 return obj->AsString()->GetString(); 69 return obj->AsString()->GetString();
70 case PDFOBJ_NAME: 70 case NAME:
71 return obj->AsName()->GetString(); 71 return obj->AsName()->GetString();
72 default:
73 break;
72 } 74 }
73 } 75 }
74 return CFX_ByteString(); 76 return CFX_ByteString();
75 } 77 }
76 78
77 CFX_ByteStringC CPDF_Object::GetConstString() const { 79 CFX_ByteStringC CPDF_Object::GetConstString() const {
78 const CPDF_Object* obj = GetBasicObject(); 80 const CPDF_Object* obj = GetBasicObject();
79 if (obj) { 81 if (obj) {
80 FX_DWORD type = obj->GetType(); 82 FX_DWORD type = obj->GetType();
81 if (type == PDFOBJ_STRING) { 83 if (type == STRING) {
82 CFX_ByteString str = obj->AsString()->GetString(); 84 CFX_ByteString str = obj->AsString()->GetString();
83 return CFX_ByteStringC(str); 85 return CFX_ByteStringC(str);
84 } 86 }
85 if (type == PDFOBJ_NAME) { 87 if (type == NAME) {
86 CFX_ByteString name = obj->AsName()->GetString(); 88 CFX_ByteString name = obj->AsName()->GetString();
87 return CFX_ByteStringC(name); 89 return CFX_ByteStringC(name);
88 } 90 }
89 } 91 }
90 return CFX_ByteStringC(); 92 return CFX_ByteStringC();
91 } 93 }
92 94
93 FX_FLOAT CPDF_Object::GetNumber() const { 95 FX_FLOAT CPDF_Object::GetNumber() const {
94 const CPDF_Object* obj = GetBasicObject(); 96 const CPDF_Object* obj = GetBasicObject();
95 if (obj && obj->GetType() == PDFOBJ_NUMBER) 97 if (obj && obj->GetType() == NUMBER)
96 return obj->AsNumber()->GetNumber(); 98 return obj->AsNumber()->GetNumber();
97 return 0; 99 return 0;
98 } 100 }
99 101
100 FX_FLOAT CPDF_Object::GetNumber16() const { 102 FX_FLOAT CPDF_Object::GetNumber16() const {
101 return GetNumber(); 103 return GetNumber();
102 } 104 }
103 105
104 int CPDF_Object::GetInteger() const { 106 int CPDF_Object::GetInteger() const {
105 const CPDF_Object* obj = GetBasicObject(); 107 const CPDF_Object* obj = GetBasicObject();
106 if (obj) { 108 if (obj) {
107 FX_DWORD type = obj->GetType(); 109 FX_DWORD type = obj->GetType();
108 if (type == PDFOBJ_BOOLEAN) 110 if (type == BOOLEAN)
109 return obj->AsBoolean()->GetValue(); 111 return obj->AsBoolean()->GetValue();
110 if (type == PDFOBJ_NUMBER) 112 if (type == NUMBER)
111 return obj->AsNumber()->GetInteger(); 113 return obj->AsNumber()->GetInteger();
112 } 114 }
113 return 0; 115 return 0;
114 } 116 }
115 117
116 CPDF_Dictionary* CPDF_Object::GetDict() const { 118 CPDF_Dictionary* CPDF_Object::GetDict() const {
117 const CPDF_Object* obj = GetBasicObject(); 119 const CPDF_Object* obj = GetBasicObject();
118 if (obj) { 120 if (obj) {
119 FX_DWORD type = obj->GetType(); 121 FX_DWORD type = obj->GetType();
120 if (type == PDFOBJ_DICTIONARY) { 122 if (type == DICTIONARY) {
121 // The method should be made non-const if we want to not be const. 123 // The method should be made non-const if we want to not be const.
122 // See bug #234. 124 // See bug #234.
123 return const_cast<CPDF_Dictionary*>(obj->AsDictionary()); 125 return const_cast<CPDF_Dictionary*>(obj->AsDictionary());
124 } 126 }
125 if (type == PDFOBJ_STREAM) 127 if (type == STREAM)
126 return obj->AsStream()->GetDict(); 128 return obj->AsStream()->GetDict();
127 } 129 }
128 return nullptr; 130 return nullptr;
129 } 131 }
130 132
131 CPDF_Array* CPDF_Object::GetArray() const { 133 CPDF_Array* CPDF_Object::GetArray() const {
132 // The method should be made non-const if we want to not be const. 134 // The method should be made non-const if we want to not be const.
133 // See bug #234. 135 // See bug #234.
134 return const_cast<CPDF_Array*>(AsArray()); 136 return const_cast<CPDF_Array*>(AsArray());
135 } 137 }
136 138
137 void CPDF_Object::SetString(const CFX_ByteString& str) { 139 void CPDF_Object::SetString(const CFX_ByteString& str) {
138 switch (m_Type) { 140 switch (m_Type) {
139 case PDFOBJ_BOOLEAN: 141 case BOOLEAN:
140 AsBoolean()->m_bValue = (str == "true"); 142 AsBoolean()->m_bValue = (str == "true");
141 return; 143 return;
142 case PDFOBJ_NUMBER: 144 case NUMBER:
143 AsNumber()->SetString(str); 145 AsNumber()->SetString(str);
144 return; 146 return;
145 case PDFOBJ_STRING: 147 case STRING:
146 AsString()->m_String = str; 148 AsString()->m_String = str;
147 return; 149 return;
148 case PDFOBJ_NAME: 150 case NAME:
149 AsName()->m_Name = str; 151 AsName()->m_Name = str;
150 return; 152 return;
153 default:
154 break;
151 } 155 }
152 ASSERT(FALSE); 156 ASSERT(FALSE);
153 } 157 }
154 FX_BOOL CPDF_Object::IsIdentical(CPDF_Object* pOther) const { 158 FX_BOOL CPDF_Object::IsIdentical(CPDF_Object* pOther) const {
155 if (this == pOther) 159 if (this == pOther)
156 return TRUE; 160 return TRUE;
157 if (!pOther) 161 if (!pOther)
158 return FALSE; 162 return FALSE;
159 if (pOther->m_Type != m_Type) { 163 if (pOther->m_Type != m_Type) {
160 if (IsReference() && GetDirect()) 164 if (IsReference() && GetDirect())
161 return GetDirect()->IsIdentical(pOther); 165 return GetDirect()->IsIdentical(pOther);
162 if (pOther->IsReference()) 166 if (pOther->IsReference())
163 return IsIdentical(pOther->GetDirect()); 167 return IsIdentical(pOther->GetDirect());
164 return FALSE; 168 return FALSE;
165 } 169 }
166 switch (m_Type) { 170 switch (m_Type) {
167 case PDFOBJ_BOOLEAN: 171 case BOOLEAN:
168 return AsBoolean()->Identical(pOther->AsBoolean()); 172 return AsBoolean()->Identical(pOther->AsBoolean());
169 case PDFOBJ_NUMBER: 173 case NUMBER:
170 return AsNumber()->Identical(pOther->AsNumber()); 174 return AsNumber()->Identical(pOther->AsNumber());
171 case PDFOBJ_STRING: 175 case STRING:
172 return AsString()->Identical(pOther->AsString()); 176 return AsString()->Identical(pOther->AsString());
173 case PDFOBJ_NAME: 177 case NAME:
174 return AsName()->Identical(pOther->AsName()); 178 return AsName()->Identical(pOther->AsName());
175 case PDFOBJ_ARRAY: 179 case ARRAY:
176 return AsArray()->Identical(pOther->AsArray()); 180 return AsArray()->Identical(pOther->AsArray());
177 case PDFOBJ_DICTIONARY: 181 case DICTIONARY:
178 return AsDictionary()->Identical(pOther->AsDictionary()); 182 return AsDictionary()->Identical(pOther->AsDictionary());
179 case PDFOBJ_NULL: 183 case NULLOBJ:
180 return TRUE; 184 return TRUE;
181 case PDFOBJ_STREAM: 185 case STREAM:
182 return AsStream()->Identical(pOther->AsStream()); 186 return AsStream()->Identical(pOther->AsStream());
183 case PDFOBJ_REFERENCE: 187 case REFERENCE:
184 return AsReference()->Identical(pOther->AsReference()); 188 return AsReference()->Identical(pOther->AsReference());
185 } 189 }
186 return FALSE; 190 return FALSE;
187 } 191 }
188 192
189 CPDF_Object* CPDF_Object::GetDirect() const { 193 CPDF_Object* CPDF_Object::GetDirect() const {
190 const CPDF_Reference* pRef = AsReference(); 194 const CPDF_Reference* pRef = AsReference();
191 if (!pRef) 195 if (!pRef)
192 return const_cast<CPDF_Object*>(this); 196 return const_cast<CPDF_Object*>(this);
193 if (!pRef->m_pObjList) 197 if (!pRef->m_pObjList)
194 return nullptr; 198 return nullptr;
195 return pRef->m_pObjList->GetIndirectObject(pRef->GetRefObjNum()); 199 return pRef->m_pObjList->GetIndirectObject(pRef->GetRefObjNum());
196 } 200 }
197 201
198 CPDF_Object* CPDF_Object::Clone(FX_BOOL bDirect) const { 202 CPDF_Object* CPDF_Object::Clone(FX_BOOL bDirect) const {
199 std::set<FX_DWORD> visited; 203 std::set<FX_DWORD> visited;
200 return CloneInternal(bDirect, &visited); 204 return CloneInternal(bDirect, &visited);
201 } 205 }
202 CPDF_Object* CPDF_Object::CloneInternal(FX_BOOL bDirect, 206 CPDF_Object* CPDF_Object::CloneInternal(FX_BOOL bDirect,
203 std::set<FX_DWORD>* visited) const { 207 std::set<FX_DWORD>* visited) const {
204 switch (m_Type) { 208 switch (m_Type) {
205 case PDFOBJ_BOOLEAN: 209 case BOOLEAN:
206 return new CPDF_Boolean(AsBoolean()->m_bValue); 210 return new CPDF_Boolean(AsBoolean()->m_bValue);
207 case PDFOBJ_NUMBER: { 211 case NUMBER: {
208 const CPDF_Number* pThis = AsNumber(); 212 const CPDF_Number* pThis = AsNumber();
209 return new CPDF_Number(pThis->m_bInteger ? pThis->m_Integer 213 return new CPDF_Number(pThis->m_bInteger ? pThis->m_Integer
210 : pThis->m_Float); 214 : pThis->m_Float);
211 } 215 }
212 case PDFOBJ_STRING: { 216 case STRING: {
213 const CPDF_String* pString = AsString(); 217 const CPDF_String* pString = AsString();
214 return new CPDF_String(pString->m_String, pString->IsHex()); 218 return new CPDF_String(pString->m_String, pString->IsHex());
215 } 219 }
216 case PDFOBJ_NAME: 220 case NAME:
217 return new CPDF_Name(AsName()->m_Name); 221 return new CPDF_Name(AsName()->m_Name);
218 case PDFOBJ_ARRAY: { 222 case ARRAY: {
219 CPDF_Array* pCopy = new CPDF_Array(); 223 CPDF_Array* pCopy = new CPDF_Array();
220 const CPDF_Array* pThis = AsArray(); 224 const CPDF_Array* pThis = AsArray();
221 int n = pThis->GetCount(); 225 int n = pThis->GetCount();
222 for (int i = 0; i < n; i++) { 226 for (int i = 0; i < n; i++) {
223 CPDF_Object* value = pThis->m_Objects.GetAt(i); 227 CPDF_Object* value = pThis->m_Objects.GetAt(i);
224 pCopy->m_Objects.Add(value->CloneInternal(bDirect, visited)); 228 pCopy->m_Objects.Add(value->CloneInternal(bDirect, visited));
225 } 229 }
226 return pCopy; 230 return pCopy;
227 } 231 }
228 case PDFOBJ_DICTIONARY: { 232 case DICTIONARY: {
229 CPDF_Dictionary* pCopy = new CPDF_Dictionary(); 233 CPDF_Dictionary* pCopy = new CPDF_Dictionary();
230 const CPDF_Dictionary* pThis = AsDictionary(); 234 const CPDF_Dictionary* pThis = AsDictionary();
231 for (const auto& it : *pThis) { 235 for (const auto& it : *pThis) {
232 pCopy->m_Map.insert(std::make_pair( 236 pCopy->m_Map.insert(std::make_pair(
233 it.first, it.second->CloneInternal(bDirect, visited))); 237 it.first, it.second->CloneInternal(bDirect, visited)));
234 } 238 }
235 return pCopy; 239 return pCopy;
236 } 240 }
237 case PDFOBJ_NULL: { 241 case NULLOBJ: {
238 return new CPDF_Null; 242 return new CPDF_Null;
239 } 243 }
240 case PDFOBJ_STREAM: { 244 case STREAM: {
241 const CPDF_Stream* pThis = AsStream(); 245 const CPDF_Stream* pThis = AsStream();
242 CPDF_StreamAcc acc; 246 CPDF_StreamAcc acc;
243 acc.LoadAllData(pThis, TRUE); 247 acc.LoadAllData(pThis, TRUE);
244 FX_DWORD streamSize = acc.GetSize(); 248 FX_DWORD streamSize = acc.GetSize();
245 CPDF_Dictionary* pDict = pThis->GetDict(); 249 CPDF_Dictionary* pDict = pThis->GetDict();
246 if (pDict) { 250 if (pDict) {
247 pDict = ToDictionary(pDict->CloneInternal(bDirect, visited)); 251 pDict = ToDictionary(pDict->CloneInternal(bDirect, visited));
248 } 252 }
249 return new CPDF_Stream(acc.DetachData(), streamSize, pDict); 253 return new CPDF_Stream(acc.DetachData(), streamSize, pDict);
250 } 254 }
251 case PDFOBJ_REFERENCE: { 255 case REFERENCE: {
252 const CPDF_Reference* pRef = AsReference(); 256 const CPDF_Reference* pRef = AsReference();
253 FX_DWORD obj_num = pRef->GetRefObjNum(); 257 FX_DWORD obj_num = pRef->GetRefObjNum();
254 if (bDirect && !pdfium::ContainsKey(*visited, obj_num)) { 258 if (bDirect && !pdfium::ContainsKey(*visited, obj_num)) {
255 visited->insert(obj_num); 259 visited->insert(obj_num);
256 auto* pDirect = pRef->GetDirect(); 260 auto* pDirect = pRef->GetDirect();
257 return pDirect ? pDirect->CloneInternal(TRUE, visited) : nullptr; 261 return pDirect ? pDirect->CloneInternal(TRUE, visited) : nullptr;
258 } 262 }
259 return new CPDF_Reference(pRef->m_pObjList, obj_num); 263 return new CPDF_Reference(pRef->m_pObjList, obj_num);
260 } 264 }
261 } 265 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 354
351 CPDF_String* CPDF_Object::AsString() { 355 CPDF_String* CPDF_Object::AsString() {
352 return IsString() ? static_cast<CPDF_String*>(this) : nullptr; 356 return IsString() ? static_cast<CPDF_String*>(this) : nullptr;
353 } 357 }
354 358
355 const CPDF_String* CPDF_Object::AsString() const { 359 const CPDF_String* CPDF_Object::AsString() const {
356 return IsString() ? static_cast<const CPDF_String*>(this) : nullptr; 360 return IsString() ? static_cast<const CPDF_String*>(this) : nullptr;
357 } 361 }
358 362
359 CPDF_Number::CPDF_Number(int value) 363 CPDF_Number::CPDF_Number(int value)
360 : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(TRUE), m_Integer(value) {} 364 : CPDF_Object(NUMBER), m_bInteger(TRUE), m_Integer(value) {}
361 365
362 CPDF_Number::CPDF_Number(FX_FLOAT value) 366 CPDF_Number::CPDF_Number(FX_FLOAT value)
363 : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(FALSE), m_Float(value) {} 367 : CPDF_Object(NUMBER), m_bInteger(FALSE), m_Float(value) {}
364 368
365 CPDF_Number::CPDF_Number(const CFX_ByteStringC& str) 369 CPDF_Number::CPDF_Number(const CFX_ByteStringC& str) : CPDF_Object(NUMBER) {
366 : CPDF_Object(PDFOBJ_NUMBER) {
367 FX_atonum(str, m_bInteger, &m_Integer); 370 FX_atonum(str, m_bInteger, &m_Integer);
368 } 371 }
369 372
370 void CPDF_Number::SetString(const CFX_ByteStringC& str) { 373 void CPDF_Number::SetString(const CFX_ByteStringC& str) {
371 FX_atonum(str, m_bInteger, &m_Integer); 374 FX_atonum(str, m_bInteger, &m_Integer);
372 } 375 }
373 FX_BOOL CPDF_Number::Identical(CPDF_Number* pOther) const { 376 FX_BOOL CPDF_Number::Identical(CPDF_Number* pOther) const {
374 return m_bInteger == pOther->m_bInteger && m_Integer == pOther->m_Integer; 377 return m_bInteger == pOther->m_bInteger && m_Integer == pOther->m_Integer;
375 } 378 }
376 CFX_ByteString CPDF_Number::GetString() const { 379 CFX_ByteString CPDF_Number::GetString() const {
377 return m_bInteger ? CFX_ByteString::FormatInteger(m_Integer, FXFORMAT_SIGNED) 380 return m_bInteger ? CFX_ByteString::FormatInteger(m_Integer, FXFORMAT_SIGNED)
378 : CFX_ByteString::FormatFloat(m_Float); 381 : CFX_ByteString::FormatFloat(m_Float);
379 } 382 }
380 void CPDF_Number::SetNumber(FX_FLOAT value) { 383 void CPDF_Number::SetNumber(FX_FLOAT value) {
381 m_bInteger = FALSE; 384 m_bInteger = FALSE;
382 m_Float = value; 385 m_Float = value;
383 } 386 }
384 CPDF_String::CPDF_String(const CFX_WideString& str) 387 CPDF_String::CPDF_String(const CFX_WideString& str)
385 : CPDF_Object(PDFOBJ_STRING), m_bHex(FALSE) { 388 : CPDF_Object(STRING), m_bHex(FALSE) {
386 m_String = PDF_EncodeText(str); 389 m_String = PDF_EncodeText(str);
387 } 390 }
388 CPDF_Array::~CPDF_Array() { 391 CPDF_Array::~CPDF_Array() {
389 int size = m_Objects.GetSize(); 392 int size = m_Objects.GetSize();
390 CPDF_Object** pList = m_Objects.GetData(); 393 CPDF_Object** pList = m_Objects.GetData();
391 for (int i = 0; i < size; i++) { 394 for (int i = 0; i < size; i++) {
392 if (pList[i]) 395 if (pList[i])
393 pList[i]->Release(); 396 pList[i]->Release();
394 } 397 }
395 } 398 }
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 if (it->second == pObj) 671 if (it->second == pObj)
669 return; 672 return;
670 it->second->Release(); 673 it->second->Release();
671 674
672 if (pObj) 675 if (pObj)
673 it->second = pObj; 676 it->second = pObj;
674 else 677 else
675 m_Map.erase(it); 678 m_Map.erase(it);
676 } 679 }
677 void CPDF_Dictionary::RemoveAt(const CFX_ByteStringC& key) { 680 void CPDF_Dictionary::RemoveAt(const CFX_ByteStringC& key) {
678 ASSERT(m_Type == PDFOBJ_DICTIONARY); 681 ASSERT(m_Type == DICTIONARY);
679 auto it = m_Map.find(key); 682 auto it = m_Map.find(key);
680 if (it == m_Map.end()) 683 if (it == m_Map.end())
681 return; 684 return;
682 685
683 it->second->Release(); 686 it->second->Release();
684 m_Map.erase(it); 687 m_Map.erase(it);
685 } 688 }
686 void CPDF_Dictionary::ReplaceKey(const CFX_ByteStringC& oldkey, 689 void CPDF_Dictionary::ReplaceKey(const CFX_ByteStringC& oldkey,
687 const CFX_ByteStringC& newkey) { 690 const CFX_ByteStringC& newkey) {
688 ASSERT(m_Type == PDFOBJ_DICTIONARY); 691 ASSERT(m_Type == DICTIONARY);
689 auto old_it = m_Map.find(oldkey); 692 auto old_it = m_Map.find(oldkey);
690 if (old_it == m_Map.end()) 693 if (old_it == m_Map.end())
691 return; 694 return;
692 695
693 // Avoid 2 constructions of CFX_ByteString. 696 // Avoid 2 constructions of CFX_ByteString.
694 CFX_ByteString newkey_bytestring = newkey; 697 CFX_ByteString newkey_bytestring = newkey;
695 auto new_it = m_Map.find(newkey_bytestring); 698 auto new_it = m_Map.find(newkey_bytestring);
696 if (new_it == old_it) 699 if (new_it == old_it)
697 return; 700 return;
698 701
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 CPDF_Array* pArray = new CPDF_Array; 764 CPDF_Array* pArray = new CPDF_Array;
762 pArray->AddNumber16(matrix.a); 765 pArray->AddNumber16(matrix.a);
763 pArray->AddNumber16(matrix.b); 766 pArray->AddNumber16(matrix.b);
764 pArray->AddNumber16(matrix.c); 767 pArray->AddNumber16(matrix.c);
765 pArray->AddNumber16(matrix.d); 768 pArray->AddNumber16(matrix.d);
766 pArray->AddNumber(matrix.e); 769 pArray->AddNumber(matrix.e);
767 pArray->AddNumber(matrix.f); 770 pArray->AddNumber(matrix.f);
768 SetAt(key, pArray); 771 SetAt(key, pArray);
769 } 772 }
770 CPDF_Stream::CPDF_Stream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict) 773 CPDF_Stream::CPDF_Stream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict)
771 : CPDF_Object(PDFOBJ_STREAM), 774 : CPDF_Object(STREAM),
772 m_pDict(pDict), 775 m_pDict(pDict),
773 m_dwSize(size), 776 m_dwSize(size),
774 m_GenNum(kMemoryBasedGenNum), 777 m_GenNum(kMemoryBasedGenNum),
775 m_pDataBuf(pData) {} 778 m_pDataBuf(pData) {}
776 779
777 CPDF_Stream::~CPDF_Stream() { 780 CPDF_Stream::~CPDF_Stream() {
778 if (IsMemoryBased()) 781 if (IsMemoryBased())
779 FX_Free(m_pDataBuf); 782 FX_Free(m_pDataBuf);
780 783
781 if (m_pDict) 784 if (m_pDict)
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1077 pObj->Destroy(); 1080 pObj->Destroy();
1078 return FALSE; 1081 return FALSE;
1079 } 1082 }
1080 it->second->Destroy(); 1083 it->second->Destroy();
1081 } 1084 }
1082 pObj->m_ObjNum = objnum; 1085 pObj->m_ObjNum = objnum;
1083 m_IndirectObjs[objnum] = pObj; 1086 m_IndirectObjs[objnum] = pObj;
1084 m_LastObjNum = std::max(m_LastObjNum, objnum); 1087 m_LastObjNum = std::max(m_LastObjNum, objnum);
1085 return TRUE; 1088 return TRUE;
1086 } 1089 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp ('k') | core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698