Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
cpdf_reference.cpp
Go to the documentation of this file.
1
// Copyright 2016 The PDFium Authors
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
#
include
"core/fpdfapi/parser/cpdf_reference.h"
8
9
#
include
"core/fpdfapi/parser/cpdf_dictionary.h"
10
#
include
"core/fpdfapi/parser/cpdf_indirect_object_holder.h"
11
#
include
"core/fxcrt/check_op.h"
12
#
include
"core/fxcrt/containers/contains.h"
13
#
include
"core/fxcrt/fx_stream.h"
14
15
CPDF_Reference::CPDF_Reference(
CPDF_IndirectObjectHolder
* pDoc, uint32_t objnum)
16
: m_pObjList(pDoc), m_RefObjNum(objnum) {}
17
18
CPDF_Reference::~
CPDF_Reference
() =
default
;
19
20
CPDF_Object
::
Type
CPDF_Reference::
GetType
()
const
{
21
return
kReference
;
22
}
23
24
ByteString
CPDF_Reference::
GetString
()
const
{
25
const
CPDF_Object
* obj = FastGetDirect();
26
return
obj ? obj
->
GetString
(
)
:
ByteString
(
)
;
27
}
28
29
float
CPDF_Reference::
GetNumber
()
const
{
30
const
CPDF_Object
* obj = FastGetDirect();
31
return
obj ? obj
->
GetNumber
(
)
: 0;
32
}
33
34
int
CPDF_Reference::
GetInteger
()
const
{
35
const
CPDF_Object
* obj = FastGetDirect();
36
return
obj ? obj
->
GetInteger
(
)
: 0;
37
}
38
39
const
CPDF_Dictionary
* CPDF_Reference::
GetDictInternal
()
const
{
40
const
CPDF_Object
* obj = FastGetDirect();
41
return
obj ? obj
->
GetDictInternal
(
)
:
nullptr
;
42
}
43
44
CPDF_Reference* CPDF_Reference::
AsMutableReference
() {
45
return
this
;
46
}
47
48
RetainPtr
<
CPDF_Object
> CPDF_Reference::
Clone
()
const
{
49
return
CloneObjectNonCyclic
(
false
);
50
}
51
52
RetainPtr
<
CPDF_Object
> CPDF_Reference::
CloneNonCyclic
(
53
bool
bDirect,
54
std::set<
const
CPDF_Object*>* pVisited)
const
{
55
pVisited->insert(
this
);
56
if
(!bDirect) {
57
return
pdfium
::MakeRetain<CPDF_Reference>(m_pObjList, m_RefObjNum);
58
}
59
RetainPtr
<
const
CPDF_Object
> pDirect = GetDirect();
60
return
pDirect && !
pdfium
::Contains(*pVisited, pDirect.Get())
61
? pDirect->CloneNonCyclic(
true
, pVisited)
62
:
nullptr
;
63
}
64
65
const
CPDF_Object
* CPDF_Reference::FastGetDirect()
const
{
66
if
(!m_pObjList)
67
return
nullptr
;
68
const
CPDF_Object
* obj =
69
m_pObjList->GetOrParseIndirectObjectInternal(m_RefObjNum);
70
return
(obj && !obj
->
IsReference
(
)
) ? obj :
nullptr
;
71
}
72
73
void
CPDF_Reference::
SetRef
(
CPDF_IndirectObjectHolder
* pDoc, uint32_t objnum) {
74
m_pObjList = pDoc;
75
m_RefObjNum = objnum;
76
}
77
78
const
CPDF_Object
* CPDF_Reference::
GetDirectInternal
()
const
{
79
return
m_pObjList ? m_pObjList->GetOrParseIndirectObjectInternal(m_RefObjNum)
80
:
nullptr
;
81
}
82
83
bool
CPDF_Reference::
WriteTo
(
IFX_ArchiveStream
* archive,
84
const
CPDF_Encryptor
* encryptor)
const
{
85
return
archive
->
WriteString
(
" "
) && archive
->
WriteDWord
(
GetRefObjNum
(
)
)
&&
86
archive
->
WriteString
(
" 0 R "
);
87
}
88
89
RetainPtr
<CPDF_Reference> CPDF_Reference::
MakeReference
(
90
CPDF_IndirectObjectHolder
* holder)
const
{
91
DCHECK_EQ
(holder, m_pObjList);
92
// Do not allow reference to reference, just create other reference for same
93
// object.
94
return
pdfium
::MakeRetain<CPDF_Reference>(holder,
GetRefObjNum
(
)
);
95
}
ByteString
fxcrt::ByteString ByteString
Definition
bytestring.h:180
DCHECK_EQ
#define DCHECK_EQ(x, y)
Definition
check_op.h:17
CPDF_Dictionary::DictMap
std::map< ByteString, RetainPtr< CPDF_Object >, std::less<> > DictMap
Definition
cpdf_dictionary.h:31
CPDF_Encryptor
Definition
cpdf_encryptor.h:18
CPDF_IndirectObjectHolder
Definition
cpdf_indirect_object_holder.h:21
CPDF_Object
Definition
cpdf_object.h:50
CPDF_Object::GetString
virtual ByteString GetString() const
Definition
cpdf_object.cpp:63
CPDF_Object::GetInteger
virtual int GetInteger() const
Definition
cpdf_object.cpp:75
CPDF_Object::GetNumber
virtual float GetNumber() const
Definition
cpdf_object.cpp:71
CPDF_Object::IsReference
bool IsReference() const
Definition
cpdf_object.h:141
CPDF_Object::Type
Type
Definition
cpdf_object.h:53
CPDF_Object::kReference
@ kReference
Definition
cpdf_object.h:62
CPDF_Object::CloneObjectNonCyclic
RetainPtr< CPDF_Object > CloneObjectNonCyclic(bool bDirect) const
Definition
cpdf_object.cpp:48
CPDF_Object::GetDictInternal
virtual const CPDF_Dictionary * GetDictInternal() const
Definition
cpdf_object.cpp:87
CPDF_Reference::CloneNonCyclic
RetainPtr< CPDF_Object > CloneNonCyclic(bool bDirect, std::set< const CPDF_Object * > *pVisited) const override
Definition
cpdf_reference.cpp:52
CPDF_Reference::SetRef
void SetRef(CPDF_IndirectObjectHolder *pDoc, uint32_t objnum)
Definition
cpdf_reference.cpp:73
CPDF_Reference::~CPDF_Reference
~CPDF_Reference() override
CPDF_Reference::GetNumber
float GetNumber() const override
Definition
cpdf_reference.cpp:29
CPDF_Reference::GetInteger
int GetInteger() const override
Definition
cpdf_reference.cpp:34
CPDF_Reference::GetDictInternal
const CPDF_Dictionary * GetDictInternal() const override
Definition
cpdf_reference.cpp:39
CPDF_Reference::GetDirectInternal
const CPDF_Object * GetDirectInternal() const override
Definition
cpdf_reference.cpp:78
CPDF_Reference::MakeReference
RetainPtr< CPDF_Reference > MakeReference(CPDF_IndirectObjectHolder *holder) const override
Definition
cpdf_reference.cpp:89
CPDF_Reference::GetRefObjNum
uint32_t GetRefObjNum() const
Definition
cpdf_reference.h:34
CPDF_Reference::AsMutableReference
CPDF_Reference * AsMutableReference() override
Definition
cpdf_reference.cpp:44
CPDF_Reference::WriteTo
bool WriteTo(IFX_ArchiveStream *archive, const CPDF_Encryptor *encryptor) const override
Definition
cpdf_reference.cpp:83
CPDF_Reference::GetString
ByteString GetString() const override
Definition
cpdf_reference.cpp:24
CPDF_Reference::GetType
Type GetType() const override
Definition
cpdf_reference.cpp:20
CPDF_Reference::Clone
RetainPtr< CPDF_Object > Clone() const override
Definition
cpdf_reference.cpp:48
IFX_ArchiveStream
Definition
fx_stream.h:32
IFX_WriteStream::WriteString
bool WriteString(ByteStringView str)
Definition
fx_stream.cpp:46
IFX_WriteStream::WriteDWord
bool WriteDWord(uint32_t i)
Definition
fx_stream.cpp:54
fxcrt::ByteString::ByteString
ByteString()=default
fxcrt::RetainPtr
Definition
retain_ptr.h:28
pdfium::CFDETextOutLargeBitmapTest
Definition
cfde_textout_unittest.cpp:117
qtwebengine
src
3rdparty
chromium
third_party
pdfium
core
fpdfapi
parser
cpdf_reference.cpp
Generated on
for Qt by
1.18.0