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

Side by Side Diff: core/fxcrt/fx_xml_parser.cpp

Issue 2451493002: Refcount all the IFX_ stream classes all the time. (Closed)
Patch Set: Clean up cast expression Created 4 years 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/fxcrt/fx_xml.h ('k') | core/fxcrt/xml_int.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/fxcrt/xml_int.h" 7 #include "core/fxcrt/xml_int.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <vector> 10 #include <vector>
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 bool g_FXCRT_XML_IsNameChar(uint8_t ch) { 67 bool g_FXCRT_XML_IsNameChar(uint8_t ch) {
68 return !!(g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameChar); 68 return !!(g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameChar);
69 } 69 }
70 70
71 class CXML_DataBufAcc : public IFX_BufferedReadStream { 71 class CXML_DataBufAcc : public IFX_BufferedReadStream {
72 public: 72 public:
73 CXML_DataBufAcc(const uint8_t* pBuffer, size_t size); 73 CXML_DataBufAcc(const uint8_t* pBuffer, size_t size);
74 ~CXML_DataBufAcc() override; 74 ~CXML_DataBufAcc() override;
75 75
76 // IFX_BufferedReadStream 76 // IFX_BufferedReadStream
77 void Release() override;
78 bool IsEOF() override; 77 bool IsEOF() override;
79 FX_FILESIZE GetPosition() override; 78 FX_FILESIZE GetPosition() override;
80 size_t ReadBlock(void* buffer, size_t size) override; 79 size_t ReadBlock(void* buffer, size_t size) override;
81 bool ReadNextBlock(bool bRestart) override; 80 bool ReadNextBlock(bool bRestart) override;
82 const uint8_t* GetBlockBuffer() override; 81 const uint8_t* GetBlockBuffer() override;
83 size_t GetBlockSize() override; 82 size_t GetBlockSize() override;
84 FX_FILESIZE GetBlockOffset() override; 83 FX_FILESIZE GetBlockOffset() override;
85 84
86 private: 85 private:
87 const uint8_t* m_pBuffer; 86 const uint8_t* m_pBuffer;
88 size_t m_dwSize; 87 size_t m_dwSize;
89 size_t m_dwCurPos; 88 size_t m_dwCurPos;
90 }; 89 };
91 90
92 CXML_DataBufAcc::CXML_DataBufAcc(const uint8_t* pBuffer, size_t size) 91 CXML_DataBufAcc::CXML_DataBufAcc(const uint8_t* pBuffer, size_t size)
93 : m_pBuffer(pBuffer), m_dwSize(size), m_dwCurPos(0) {} 92 : m_pBuffer(pBuffer), m_dwSize(size), m_dwCurPos(0) {}
94 93
95 CXML_DataBufAcc::~CXML_DataBufAcc() {} 94 CXML_DataBufAcc::~CXML_DataBufAcc() {}
96 95
97 void CXML_DataBufAcc::Release() {
98 delete this;
99 }
100
101 bool CXML_DataBufAcc::IsEOF() { 96 bool CXML_DataBufAcc::IsEOF() {
102 return m_dwCurPos >= m_dwSize; 97 return m_dwCurPos >= m_dwSize;
103 } 98 }
104 99
105 FX_FILESIZE CXML_DataBufAcc::GetPosition() { 100 FX_FILESIZE CXML_DataBufAcc::GetPosition() {
106 return (FX_FILESIZE)m_dwCurPos; 101 return (FX_FILESIZE)m_dwCurPos;
107 } 102 }
108 103
109 size_t CXML_DataBufAcc::ReadBlock(void* buffer, size_t size) { 104 size_t CXML_DataBufAcc::ReadBlock(void* buffer, size_t size) {
110 return 0; 105 return 0;
(...skipping 17 matching lines...) Expand all
128 size_t CXML_DataBufAcc::GetBlockSize() { 123 size_t CXML_DataBufAcc::GetBlockSize() {
129 return m_dwSize; 124 return m_dwSize;
130 } 125 }
131 126
132 FX_FILESIZE CXML_DataBufAcc::GetBlockOffset() { 127 FX_FILESIZE CXML_DataBufAcc::GetBlockOffset() {
133 return 0; 128 return 0;
134 } 129 }
135 130
136 class CXML_DataStmAcc : public IFX_BufferedReadStream { 131 class CXML_DataStmAcc : public IFX_BufferedReadStream {
137 public: 132 public:
138 explicit CXML_DataStmAcc(IFX_SeekableReadStream* pFileRead); 133 explicit CXML_DataStmAcc(
134 const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead);
139 ~CXML_DataStmAcc() override; 135 ~CXML_DataStmAcc() override;
140 136
141 // IFX_BufferedReadStream 137 // IFX_BufferedReadStream
142 void Release() override;
143 bool IsEOF() override; 138 bool IsEOF() override;
144 FX_FILESIZE GetPosition() override; 139 FX_FILESIZE GetPosition() override;
145 size_t ReadBlock(void* buffer, size_t size) override; 140 size_t ReadBlock(void* buffer, size_t size) override;
146 bool ReadNextBlock(bool bRestart) override; 141 bool ReadNextBlock(bool bRestart) override;
147 const uint8_t* GetBlockBuffer() override; 142 const uint8_t* GetBlockBuffer() override;
148 size_t GetBlockSize() override; 143 size_t GetBlockSize() override;
149 FX_FILESIZE GetBlockOffset() override; 144 FX_FILESIZE GetBlockOffset() override;
150 145
151 private: 146 private:
152 IFX_SeekableReadStream* m_pFileRead; 147 CFX_RetainPtr<IFX_SeekableReadStream> m_pFileRead;
153 uint8_t* m_pBuffer; 148 uint8_t* m_pBuffer;
154 FX_FILESIZE m_nStart; 149 FX_FILESIZE m_nStart;
155 size_t m_dwSize; 150 size_t m_dwSize;
156 }; 151 };
157 152
158 CXML_DataStmAcc::CXML_DataStmAcc(IFX_SeekableReadStream* pFileRead) 153 CXML_DataStmAcc::CXML_DataStmAcc(
154 const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead)
159 : m_pFileRead(pFileRead), m_pBuffer(nullptr), m_nStart(0), m_dwSize(0) { 155 : m_pFileRead(pFileRead), m_pBuffer(nullptr), m_nStart(0), m_dwSize(0) {
160 ASSERT(m_pFileRead); 156 ASSERT(m_pFileRead);
161 } 157 }
162 158
163 CXML_DataStmAcc::~CXML_DataStmAcc() { 159 CXML_DataStmAcc::~CXML_DataStmAcc() {
164 FX_Free(m_pBuffer); 160 FX_Free(m_pBuffer);
165 } 161 }
166 162
167 void CXML_DataStmAcc::Release() {
168 delete this;
169 }
170
171 bool CXML_DataStmAcc::IsEOF() { 163 bool CXML_DataStmAcc::IsEOF() {
172 return m_nStart + (FX_FILESIZE)m_dwSize >= m_pFileRead->GetSize(); 164 return m_nStart + (FX_FILESIZE)m_dwSize >= m_pFileRead->GetSize();
173 } 165 }
174 166
175 FX_FILESIZE CXML_DataStmAcc::GetPosition() { 167 FX_FILESIZE CXML_DataStmAcc::GetPosition() {
176 return m_nStart + (FX_FILESIZE)m_dwSize; 168 return m_nStart + (FX_FILESIZE)m_dwSize;
177 } 169 }
178 170
179 size_t CXML_DataStmAcc::ReadBlock(void* buffer, size_t size) { 171 size_t CXML_DataStmAcc::ReadBlock(void* buffer, size_t size) {
180 return 0; 172 return 0;
(...skipping 25 matching lines...) Expand all
206 return m_dwSize; 198 return m_dwSize;
207 } 199 }
208 200
209 FX_FILESIZE CXML_DataStmAcc::GetBlockOffset() { 201 FX_FILESIZE CXML_DataStmAcc::GetBlockOffset() {
210 return m_nStart; 202 return m_nStart;
211 } 203 }
212 204
213 } // namespace 205 } // namespace
214 206
215 CXML_Parser::CXML_Parser() 207 CXML_Parser::CXML_Parser()
216 : m_pDataAcc(nullptr), 208 : m_nOffset(0),
217 m_bOwnedStream(false),
218 m_nOffset(0),
219 m_bSaveSpaceChars(false), 209 m_bSaveSpaceChars(false),
220 m_pBuffer(nullptr), 210 m_pBuffer(nullptr),
221 m_dwBufferSize(0), 211 m_dwBufferSize(0),
222 m_nBufferOffset(0), 212 m_nBufferOffset(0),
223 m_dwIndex(0) {} 213 m_dwIndex(0) {}
224 214
225 CXML_Parser::~CXML_Parser() { 215 CXML_Parser::~CXML_Parser() {}
226 if (m_bOwnedStream) { 216
227 m_pDataAcc->Release(); 217 bool CXML_Parser::Init(uint8_t* pBuffer, size_t size) {
228 } 218 m_pDataAcc.Reset(new CXML_DataBufAcc(pBuffer, size));
219 return Init();
229 } 220 }
230 221
231 bool CXML_Parser::Init(uint8_t* pBuffer, size_t size) { 222 bool CXML_Parser::Init(const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead) {
232 m_pDataAcc = new CXML_DataBufAcc(pBuffer, size); 223 m_pDataAcc.Reset(new CXML_DataStmAcc(pFileRead));
233 return Init(true); 224 return Init();
234 } 225 }
235 226
236 bool CXML_Parser::Init(IFX_SeekableReadStream* pFileRead) { 227 bool CXML_Parser::Init(const CFX_RetainPtr<IFX_BufferedReadStream>& pBuffer) {
237 m_pDataAcc = new CXML_DataStmAcc(pFileRead);
238 return Init(true);
239 }
240
241 bool CXML_Parser::Init(IFX_BufferedReadStream* pBuffer) {
242 if (!pBuffer) 228 if (!pBuffer)
243 return false; 229 return false;
244 230
245 m_pDataAcc = pBuffer; 231 m_pDataAcc = pBuffer;
246 return Init(false); 232 return Init();
247 } 233 }
248 234
249 bool CXML_Parser::Init(bool bOwndedStream) { 235 bool CXML_Parser::Init() {
250 m_bOwnedStream = bOwndedStream;
251 m_nOffset = 0; 236 m_nOffset = 0;
252 return ReadNextBlock(); 237 return ReadNextBlock();
253 } 238 }
254 239
255 bool CXML_Parser::ReadNextBlock() { 240 bool CXML_Parser::ReadNextBlock() {
256 if (!m_pDataAcc->ReadNextBlock()) 241 if (!m_pDataAcc->ReadNextBlock())
257 return false; 242 return false;
258 243
259 m_pBuffer = m_pDataAcc->GetBlockBuffer(); 244 m_pBuffer = m_pDataAcc->GetBlockBuffer();
260 m_dwBufferSize = m_pDataAcc->GetBlockSize(); 245 m_dwBufferSize = m_pDataAcc->GetBlockSize();
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 CXML_Element* CXML_Element::Parse(const void* pBuffer, 679 CXML_Element* CXML_Element::Parse(const void* pBuffer,
695 size_t size, 680 size_t size,
696 bool bSaveSpaceChars, 681 bool bSaveSpaceChars,
697 FX_FILESIZE* pParsedSize) { 682 FX_FILESIZE* pParsedSize) {
698 CXML_Parser parser; 683 CXML_Parser parser;
699 if (!parser.Init((uint8_t*)pBuffer, size)) { 684 if (!parser.Init((uint8_t*)pBuffer, size)) {
700 return nullptr; 685 return nullptr;
701 } 686 }
702 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); 687 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize);
703 } 688 }
704 CXML_Element* CXML_Element::Parse(IFX_SeekableReadStream* pFile, 689
705 bool bSaveSpaceChars, 690 CXML_Element* CXML_Element::Parse(
706 FX_FILESIZE* pParsedSize) { 691 const CFX_RetainPtr<IFX_SeekableReadStream>& pFile,
692 bool bSaveSpaceChars,
693 FX_FILESIZE* pParsedSize) {
707 CXML_Parser parser; 694 CXML_Parser parser;
708 if (!parser.Init(pFile)) { 695 if (!parser.Init(pFile))
709 return nullptr; 696 return nullptr;
710 } 697
711 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); 698 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize);
712 } 699 }
713 CXML_Element* CXML_Element::Parse(IFX_BufferedReadStream* pBuffer, 700
714 bool bSaveSpaceChars, 701 CXML_Element* CXML_Element::Parse(
715 FX_FILESIZE* pParsedSize) { 702 const CFX_RetainPtr<IFX_BufferedReadStream>& pBuffer,
703 bool bSaveSpaceChars,
704 FX_FILESIZE* pParsedSize) {
716 CXML_Parser parser; 705 CXML_Parser parser;
717 if (!parser.Init(pBuffer)) { 706 if (!parser.Init(pBuffer))
718 return nullptr; 707 return nullptr;
719 } 708
720 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); 709 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize);
721 } 710 }
711
722 CXML_Element::CXML_Element() : m_QSpaceName(), m_TagName(), m_AttrMap() {} 712 CXML_Element::CXML_Element() : m_QSpaceName(), m_TagName(), m_AttrMap() {}
723 CXML_Element::CXML_Element(const CFX_ByteStringC& qSpace, 713 CXML_Element::CXML_Element(const CFX_ByteStringC& qSpace,
724 const CFX_ByteStringC& tagName) 714 const CFX_ByteStringC& tagName)
725 : m_QSpaceName(), m_TagName(), m_AttrMap() { 715 : m_QSpaceName(), m_TagName(), m_AttrMap() {
726 m_QSpaceName = qSpace; 716 m_QSpaceName = qSpace;
727 m_TagName = tagName; 717 m_TagName = tagName;
728 } 718 }
729 CXML_Element::CXML_Element(const CFX_ByteStringC& qTagName) 719 CXML_Element::CXML_Element(const CFX_ByteStringC& qTagName)
730 : m_pParent(nullptr), m_QSpaceName(), m_TagName(), m_AttrMap() { 720 : m_pParent(nullptr), m_QSpaceName(), m_TagName(), m_AttrMap() {
731 SetTag(qTagName); 721 SetTag(qTagName);
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 m_pMap->push_back({space, name, CFX_WideString(value)}); 947 m_pMap->push_back({space, name, CFX_WideString(value)});
958 } 948 }
959 949
960 int CXML_AttrMap::GetSize() const { 950 int CXML_AttrMap::GetSize() const {
961 return m_pMap ? pdfium::CollectionSize<int>(*m_pMap) : 0; 951 return m_pMap ? pdfium::CollectionSize<int>(*m_pMap) : 0;
962 } 952 }
963 953
964 CXML_AttrItem& CXML_AttrMap::GetAt(int index) const { 954 CXML_AttrItem& CXML_AttrMap::GetAt(int index) const {
965 return (*m_pMap)[index]; 955 return (*m_pMap)[index];
966 } 956 }
OLDNEW
« no previous file with comments | « core/fxcrt/fx_xml.h ('k') | core/fxcrt/xml_int.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698