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

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

Issue 1194933003: Make CPDF_Object::GetString() a virtual method. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: rebase Created 5 years, 5 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 "../../../include/fpdfapi/fpdf_parser.h" 7 #include "../../../include/fpdfapi/fpdf_parser.h"
8 #include "../../../include/fxcrt/fx_string.h" 8 #include "../../../include/fxcrt/fx_string.h"
9 9
10 //static 10 //static
(...skipping 21 matching lines...) Expand all
32 case PDFOBJ_DICTIONARY: 32 case PDFOBJ_DICTIONARY:
33 delete (CPDF_Dictionary*)this; 33 delete (CPDF_Dictionary*)this;
34 break; 34 break;
35 case PDFOBJ_STREAM: 35 case PDFOBJ_STREAM:
36 delete (CPDF_Stream*)this; 36 delete (CPDF_Stream*)this;
37 break; 37 break;
38 default: 38 default:
39 delete this; 39 delete this;
40 } 40 }
41 } 41 }
42
42 CFX_ByteString CPDF_Object::GetString() const 43 CFX_ByteString CPDF_Object::GetString() const
43 { 44 {
44 switch (m_Type) {
45 case PDFOBJ_BOOLEAN:
46 return ((CPDF_Boolean*)this)->m_bValue ? "true" : "false";
47 case PDFOBJ_NUMBER:
48 return ((CPDF_Number*)this)->GetString();
49 case PDFOBJ_STRING:
50 return ((CPDF_String*)this)->m_String;
51 case PDFOBJ_NAME:
52 return ((CPDF_Name*)this)->m_Name;
53 case PDFOBJ_REFERENCE: {
54 CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
55 if (pRef->m_pObjList == NULL) {
56 break;
57 }
58 CPDF_Object* pObj = pRef->m_pObjList->GetIndirectObject(pRef->m_ RefObjNum);
59 if (pObj == NULL) {
60 return CFX_ByteString();
61 }
62 return pObj->GetString();
63 }
64 }
65 return CFX_ByteString(); 45 return CFX_ByteString();
66 } 46 }
47
67 CFX_ByteStringC CPDF_Object::GetConstString() const 48 CFX_ByteStringC CPDF_Object::GetConstString() const
68 { 49 {
69 switch (m_Type) { 50 switch (m_Type) {
70 case PDFOBJ_STRING: 51 case PDFOBJ_STRING:
71 return CFX_ByteStringC((const uint8_t*)((CPDF_String*)this)->m_Strin g, ((CPDF_String*)this)->m_String.GetLength()); 52 return CFX_ByteStringC((const uint8_t*)((CPDF_String*)this)->m_Strin g, ((CPDF_String*)this)->m_String.GetLength());
72 case PDFOBJ_NAME: 53 case PDFOBJ_NAME:
73 return CFX_ByteStringC((const uint8_t*)((CPDF_Name*)this)->m_Name, ( (CPDF_Name*)this)->m_Name.GetLength()); 54 return CFX_ByteStringC((const uint8_t*)((CPDF_Name*)this)->m_Name, ( (CPDF_Name*)this)->m_Name.GetLength());
74 case PDFOBJ_REFERENCE: { 55 case PDFOBJ_REFERENCE: {
75 CPDF_Reference* pRef = (CPDF_Reference*)(void*)this; 56 CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
76 if (pRef->m_pObjList == NULL) { 57 if (pRef->m_pObjList == NULL) {
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 void CPDF_Object::SetUnicodeText(const FX_WCHAR* pUnicodes, int len) 315 void CPDF_Object::SetUnicodeText(const FX_WCHAR* pUnicodes, int len)
335 { 316 {
336 if (m_Type == PDFOBJ_STRING) { 317 if (m_Type == PDFOBJ_STRING) {
337 ((CPDF_String*)this)->m_String = PDF_EncodeText(pUnicodes, len); 318 ((CPDF_String*)this)->m_String = PDF_EncodeText(pUnicodes, len);
338 } else if (m_Type == PDFOBJ_STREAM) { 319 } else if (m_Type == PDFOBJ_STREAM) {
339 CFX_ByteString result = PDF_EncodeText(pUnicodes, len); 320 CFX_ByteString result = PDF_EncodeText(pUnicodes, len);
340 ((CPDF_Stream*)this)->SetData((uint8_t*)result.c_str(), result.GetLength (), FALSE, FALSE); 321 ((CPDF_Stream*)this)->SetData((uint8_t*)result.c_str(), result.GetLength (), FALSE, FALSE);
341 } 322 }
342 } 323 }
343 324
325 CFX_ByteString CPDF_Boolean::GetString() const
326 {
327 return m_bValue ? "true" : "false";
328 }
329
344 CPDF_Number::CPDF_Number(int value) 330 CPDF_Number::CPDF_Number(int value)
345 : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(TRUE), m_Integer(value) { 331 : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(TRUE), m_Integer(value) {
346 } 332 }
347 333
348 CPDF_Number::CPDF_Number(FX_FLOAT value) 334 CPDF_Number::CPDF_Number(FX_FLOAT value)
349 : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(FALSE), m_Float(value) { 335 : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(FALSE), m_Float(value) {
350 } 336 }
351 337
352 CPDF_Number::CPDF_Number(FX_BOOL bInteger, void* pData) 338 CPDF_Number::CPDF_Number(FX_BOOL bInteger, void* pData)
353 : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(bInteger), m_Integer(*(int*)pData) { 339 : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(bInteger), m_Integer(*(int*)pData) {
(...skipping 16 matching lines...) Expand all
370 return m_bInteger ? CFX_ByteString::FormatInteger(m_Integer, FXFORMAT_SIGNED ) : CFX_ByteString::FormatFloat(m_Float); 356 return m_bInteger ? CFX_ByteString::FormatInteger(m_Integer, FXFORMAT_SIGNED ) : CFX_ByteString::FormatFloat(m_Float);
371 } 357 }
372 void CPDF_Number::SetNumber(FX_FLOAT value) 358 void CPDF_Number::SetNumber(FX_FLOAT value)
373 { 359 {
374 m_bInteger = FALSE; 360 m_bInteger = FALSE;
375 m_Float = value; 361 m_Float = value;
376 } 362 }
377 CPDF_String::CPDF_String(const CFX_WideString& str) : CPDF_Object(PDFOBJ_STRING) , m_bHex(FALSE) { 363 CPDF_String::CPDF_String(const CFX_WideString& str) : CPDF_Object(PDFOBJ_STRING) , m_bHex(FALSE) {
378 m_String = PDF_EncodeText(str); 364 m_String = PDF_EncodeText(str);
379 } 365 }
366
367 CFX_ByteString CPDF_String::GetString() const
368 {
369 return m_String;
370 }
371
372 CFX_ByteString CPDF_Name::GetString() const
373 {
374 return m_Name;
375 }
376
380 CPDF_Array::~CPDF_Array() 377 CPDF_Array::~CPDF_Array()
381 { 378 {
382 int size = m_Objects.GetSize(); 379 int size = m_Objects.GetSize();
383 CPDF_Object** pList = (CPDF_Object**)m_Objects.GetData(); 380 CPDF_Object** pList = (CPDF_Object**)m_Objects.GetData();
384 for (int i = 0; i < size; i ++) { 381 for (int i = 0; i < size; i ++) {
385 if (pList[i]) 382 if (pList[i])
386 pList[i]->Release(); 383 pList[i]->Release();
387 } 384 }
388 } 385 }
389 CFX_FloatRect CPDF_Array::GetRect() 386 CFX_FloatRect CPDF_Array::GetRect()
(...skipping 22 matching lines...) Expand all
412 if (i >= (FX_DWORD)m_Objects.GetSize()) { 409 if (i >= (FX_DWORD)m_Objects.GetSize()) {
413 return NULL; 410 return NULL;
414 } 411 }
415 return (CPDF_Object*)m_Objects.GetAt(i); 412 return (CPDF_Object*)m_Objects.GetAt(i);
416 } 413 }
417 CPDF_Object* CPDF_Array::GetElementValue(FX_DWORD i) const 414 CPDF_Object* CPDF_Array::GetElementValue(FX_DWORD i) const
418 { 415 {
419 if (i >= (FX_DWORD)m_Objects.GetSize()) { 416 if (i >= (FX_DWORD)m_Objects.GetSize()) {
420 return NULL; 417 return NULL;
421 } 418 }
422 return ((CPDF_Object*)m_Objects.GetAt(i))->GetDirect(); 419 return ((CPDF_Object*)m_Objects.GetAt(i))->GetDirect();
Tom Sepez 2015/07/16 20:24:46 Given that m_Objects is of type CFX_PtrArray, and
423 } 420 }
424 CFX_ByteString CPDF_Array::GetString(FX_DWORD i) const 421 CFX_ByteString CPDF_Array::GetStringAt(FX_DWORD i) const
425 { 422 {
426 if (i < (FX_DWORD)m_Objects.GetSize()) { 423 if (i < (FX_DWORD)m_Objects.GetSize()) {
427 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i); 424 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
Tom Sepez 2015/07/16 20:24:46 nit: I'd really like this block to be a one-liner,
428 return p->GetString(); 425 return p->GetString();
429 } 426 }
430 else 427 return CFX_ByteString();
431 return CFX_ByteString();
432 } 428 }
433 CFX_ByteStringC CPDF_Array::GetConstString(FX_DWORD i) const 429 CFX_ByteStringC CPDF_Array::GetConstString(FX_DWORD i) const
434 { 430 {
435 if (i < (FX_DWORD)m_Objects.GetSize()) { 431 if (i < (FX_DWORD)m_Objects.GetSize()) {
436 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i); 432 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
437 return p->GetConstString(); 433 return p->GetConstString();
438 } 434 }
439 else 435 return CFX_ByteStringC();
440 return CFX_ByteStringC();
441 } 436 }
442 int CPDF_Array::GetInteger(FX_DWORD i) const 437 int CPDF_Array::GetInteger(FX_DWORD i) const
443 { 438 {
444 if (i >= (FX_DWORD)m_Objects.GetSize()) { 439 if (i >= (FX_DWORD)m_Objects.GetSize()) {
445 return 0; 440 return 0;
446 } 441 }
447 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i); 442 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
448 return p->GetInteger(); 443 return p->GetInteger();
449 } 444 }
450 FX_FLOAT CPDF_Array::GetNumber(FX_DWORD i) const 445 FX_FLOAT CPDF_Array::GetNumber(FX_DWORD i) const
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 { 554 {
560 if (m_Objects.GetSize() != pOther->m_Objects.GetSize()) { 555 if (m_Objects.GetSize() != pOther->m_Objects.GetSize()) {
561 return FALSE; 556 return FALSE;
562 } 557 }
563 for (int i = 0; i < m_Objects.GetSize(); i ++) 558 for (int i = 0; i < m_Objects.GetSize(); i ++)
564 if (!((CPDF_Object*)m_Objects[i])->IsIdentical((CPDF_Object*)pOther->m_O bjects[i])) { 559 if (!((CPDF_Object*)m_Objects[i])->IsIdentical((CPDF_Object*)pOther->m_O bjects[i])) {
565 return FALSE; 560 return FALSE;
566 } 561 }
567 return TRUE; 562 return TRUE;
568 } 563 }
564
569 CPDF_Dictionary::~CPDF_Dictionary() 565 CPDF_Dictionary::~CPDF_Dictionary()
570 { 566 {
571 FX_POSITION pos = m_Map.GetStartPosition(); 567 FX_POSITION pos = m_Map.GetStartPosition();
572 while (pos) { 568 while (pos) {
573 void* value = m_Map.GetNextValue(pos); 569 void* value = m_Map.GetNextValue(pos);
574 if (value) 570 if (value)
575 ((CPDF_Object*)value)->Release(); 571 ((CPDF_Object*)value)->Release();
576 } 572 }
577 } 573 }
578 FX_POSITION CPDF_Dictionary::GetStartPos() const 574 FX_POSITION CPDF_Dictionary::GetStartPos() const
(...skipping 14 matching lines...) Expand all
593 CPDF_Object* p = NULL; 589 CPDF_Object* p = NULL;
594 m_Map.Lookup(key, (void*&)p); 590 m_Map.Lookup(key, (void*&)p);
595 return p; 591 return p;
596 } 592 }
597 CPDF_Object* CPDF_Dictionary::GetElementValue(const CFX_ByteStringC& key) const 593 CPDF_Object* CPDF_Dictionary::GetElementValue(const CFX_ByteStringC& key) const
598 { 594 {
599 CPDF_Object* p = NULL; 595 CPDF_Object* p = NULL;
600 m_Map.Lookup(key, (void*&)p); 596 m_Map.Lookup(key, (void*&)p);
601 return p ? p->GetDirect() : NULL; 597 return p ? p->GetDirect() : NULL;
602 } 598 }
603 CFX_ByteString CPDF_Dictionary::GetString(const CFX_ByteStringC& key) const 599 CFX_ByteString CPDF_Dictionary::GetStringAt(const CFX_ByteStringC& key) const
604 { 600 {
605 CPDF_Object* p = NULL; 601 CPDF_Object* p = NULL;
606 m_Map.Lookup(key, (void*&)p); 602 m_Map.Lookup(key, (void*&)p);
607 if (p) 603 if (p)
608 return p->GetString(); 604 return p->GetString();
609 else 605 else
Tom Sepez 2015/07/16 20:24:46 nit: else after return.
610 return CFX_ByteString(); 606 return CFX_ByteString();
611 } 607 }
612 CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key) cons t 608 CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key) cons t
613 { 609 {
614 CPDF_Object* p = NULL; 610 CPDF_Object* p = NULL;
615 m_Map.Lookup(key, (void*&)p); 611 m_Map.Lookup(key, (void*&)p);
616 if (p) 612 if (p)
617 return p->GetConstString(); 613 return p->GetConstString();
618 else 614 else
619 return CFX_ByteStringC(); 615 return CFX_ByteStringC();
620 } 616 }
621 CFX_WideString CPDF_Dictionary::GetUnicodeText(const CFX_ByteStringC& key, CFX_C harMap* pCharMap) const 617 CFX_WideString CPDF_Dictionary::GetUnicodeText(const CFX_ByteStringC& key, CFX_C harMap* pCharMap) const
622 { 618 {
623 CPDF_Object* p = NULL; 619 CPDF_Object* p = NULL;
624 m_Map.Lookup(key, (void*&)p); 620 m_Map.Lookup(key, (void*&)p);
625 if (p) { 621 if (p) {
626 if(p->GetType() == PDFOBJ_REFERENCE) { 622 if(p->GetType() == PDFOBJ_REFERENCE) {
627 p = ((CPDF_Reference*)p)->GetDirect(); 623 p = ((CPDF_Reference*)p)->GetDirect();
628 if (p) { 624 if (p) {
629 return p->GetUnicodeText(pCharMap); 625 return p->GetUnicodeText(pCharMap);
630 } 626 }
631 } else { 627 } else {
632 return p->GetUnicodeText(pCharMap); 628 return p->GetUnicodeText(pCharMap);
633 } 629 }
634 } 630 }
635 return CFX_WideString(); 631 return CFX_WideString();
636 } 632 }
637 CFX_ByteString CPDF_Dictionary::GetString(const CFX_ByteStringC& key, const CFX_ ByteStringC& def) const 633 CFX_ByteString CPDF_Dictionary::GetStringAt(const CFX_ByteStringC& key,
634 const CFX_ByteStringC& def) const
638 { 635 {
639 CPDF_Object* p = NULL; 636 CPDF_Object* p = NULL;
640 m_Map.Lookup(key, (void*&)p); 637 m_Map.Lookup(key, (void*&)p);
641 if (p) { 638 if (p) {
642 return p->GetString(); 639 return p->GetString();
643 } 640 }
644 return CFX_ByteString(def); 641 return CFX_ByteString(def);
645 } 642 }
646 CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key, cons t CFX_ByteStringC& def) const 643 CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key, cons t CFX_ByteStringC& def) const
647 { 644 {
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
850 { 847 {
851 CPDF_Array* pArray = new CPDF_Array; 848 CPDF_Array* pArray = new CPDF_Array;
852 pArray->AddNumber16(matrix.a); 849 pArray->AddNumber16(matrix.a);
853 pArray->AddNumber16(matrix.b); 850 pArray->AddNumber16(matrix.b);
854 pArray->AddNumber16(matrix.c); 851 pArray->AddNumber16(matrix.c);
855 pArray->AddNumber16(matrix.d); 852 pArray->AddNumber16(matrix.d);
856 pArray->AddNumber(matrix.e); 853 pArray->AddNumber(matrix.e);
857 pArray->AddNumber(matrix.f); 854 pArray->AddNumber(matrix.f);
858 SetAt(key, pArray); 855 SetAt(key, pArray);
859 } 856 }
857
860 CPDF_Stream::CPDF_Stream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict) 858 CPDF_Stream::CPDF_Stream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict)
861 : CPDF_Object(PDFOBJ_STREAM) { 859 : CPDF_Object(PDFOBJ_STREAM) {
862 m_pDict = pDict; 860 m_pDict = pDict;
863 m_dwSize = size; 861 m_dwSize = size;
864 m_GenNum = (FX_DWORD) - 1; 862 m_GenNum = (FX_DWORD) - 1;
865 m_pDataBuf = pData; 863 m_pDataBuf = pData;
866 m_pCryptoHandler = NULL; 864 m_pCryptoHandler = NULL;
867 } 865 }
868 CPDF_Stream::~CPDF_Stream() 866 CPDF_Stream::~CPDF_Stream()
869 { 867 {
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
1120 } 1118 }
1121 if (pSrcData != pStream->m_pDataBuf && pSrcData != m_pData) { 1119 if (pSrcData != pStream->m_pDataBuf && pSrcData != m_pData) {
1122 FX_Free(pSrcData); 1120 FX_Free(pSrcData);
1123 } 1121 }
1124 if (pDecryptedData != pSrcData && pDecryptedData != m_pData) { 1122 if (pDecryptedData != pSrcData && pDecryptedData != m_pData) {
1125 FX_Free(pDecryptedData); 1123 FX_Free(pDecryptedData);
1126 } 1124 }
1127 m_pSrcData = NULL; 1125 m_pSrcData = NULL;
1128 m_bNewBuf = m_pData != pStream->m_pDataBuf; 1126 m_bNewBuf = m_pData != pStream->m_pDataBuf;
1129 } 1127 }
1128
1130 CPDF_StreamAcc::~CPDF_StreamAcc() 1129 CPDF_StreamAcc::~CPDF_StreamAcc()
1131 { 1130 {
1132 if (m_bNewBuf && m_pData) { 1131 if (m_bNewBuf && m_pData) {
1133 FX_Free(m_pData); 1132 FX_Free(m_pData);
1134 } 1133 }
1135 if (m_pSrcData) { 1134 if (m_pSrcData) {
1136 FX_Free(m_pSrcData); 1135 FX_Free(m_pSrcData);
1137 } 1136 }
1138 } 1137 }
1139 const uint8_t* CPDF_StreamAcc::GetData() const 1138 const uint8_t* CPDF_StreamAcc::GetData() const
(...skipping 26 matching lines...) Expand all
1166 } 1165 }
1167 uint8_t* p = FX_Alloc(uint8_t, m_dwSize); 1166 uint8_t* p = FX_Alloc(uint8_t, m_dwSize);
1168 FXSYS_memcpy(p, m_pData, m_dwSize); 1167 FXSYS_memcpy(p, m_pData, m_dwSize);
1169 return p; 1168 return p;
1170 } 1169 }
1171 void CPDF_Reference::SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum) 1170 void CPDF_Reference::SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum)
1172 { 1171 {
1173 m_pObjList = pDoc; 1172 m_pObjList = pDoc;
1174 m_RefObjNum = objnum; 1173 m_RefObjNum = objnum;
1175 } 1174 }
1175
1176 CFX_ByteString CPDF_Reference::GetString() const
1177 {
1178 if (m_pObjList) {
1179 CPDF_Object* pObj = m_pObjList->GetIndirectObject(m_RefObjNum);
1180 if (pObj)
1181 return pObj->GetString();
1182 }
1183 return CFX_ByteString();
1184 }
1185
1176 CPDF_IndirectObjects::CPDF_IndirectObjects(CPDF_Parser* pParser) 1186 CPDF_IndirectObjects::CPDF_IndirectObjects(CPDF_Parser* pParser)
1177 { 1187 {
1178 m_pParser = pParser; 1188 m_pParser = pParser;
1179 m_IndirectObjs.InitHashTable(1013); 1189 m_IndirectObjs.InitHashTable(1013);
1180 if (pParser) { 1190 if (pParser) {
1181 m_LastObjNum = m_pParser->GetLastObjNum(); 1191 m_LastObjNum = m_pParser->GetLastObjNum();
1182 } else { 1192 } else {
1183 m_LastObjNum = 0; 1193 m_LastObjNum = 0;
1184 } 1194 }
1185 } 1195 }
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1280 pObj->m_ObjNum = objnum; 1290 pObj->m_ObjNum = objnum;
1281 m_IndirectObjs.SetAt((void*)(uintptr_t)objnum, pObj); 1291 m_IndirectObjs.SetAt((void*)(uintptr_t)objnum, pObj);
1282 if (m_LastObjNum < objnum) { 1292 if (m_LastObjNum < objnum) {
1283 m_LastObjNum = objnum; 1293 m_LastObjNum = objnum;
1284 } 1294 }
1285 } 1295 }
1286 FX_DWORD CPDF_IndirectObjects::GetLastObjNum() const 1296 FX_DWORD CPDF_IndirectObjects::GetLastObjNum() const
1287 { 1297 {
1288 return m_LastObjNum; 1298 return m_LastObjNum;
1289 } 1299 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698