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

Side by Side Diff: xfa/fgas/crt/fgas_stream.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 | « xfa/fgas/crt/fgas_stream.h ('k') | xfa/fgas/font/cfgas_fontmgr.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 "xfa/fgas/crt/fgas_stream.h" 7 #include "xfa/fgas/crt/fgas_stream.h"
8 8
9 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ 9 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \
10 _FX_OS_ == _FX_WIN64_ 10 _FX_OS_ == _FX_WIN64_
11 #include <io.h> 11 #include <io.h>
12 #endif 12 #endif
13 13
14 #include <algorithm> 14 #include <algorithm>
15 #include <memory> 15 #include <memory>
16 16
17 #include "third_party/base/ptr_util.h"
17 #include "xfa/fgas/crt/fgas_codepage.h" 18 #include "xfa/fgas/crt/fgas_codepage.h"
18 19
19 namespace { 20 namespace {
20 21
21 class IFGAS_StreamImp { 22 class IFGAS_StreamImp {
22 public: 23 public:
23 virtual ~IFGAS_StreamImp() {} 24 virtual ~IFGAS_StreamImp() {}
24 25
25 virtual int32_t GetLength() const = 0; 26 virtual int32_t GetLength() const = 0;
26 virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) = 0; 27 virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) = 0;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 int32_t m_iTotalSize; 94 int32_t m_iTotalSize;
94 int32_t m_iPosition; 95 int32_t m_iPosition;
95 int32_t m_iLength; 96 int32_t m_iLength;
96 }; 97 };
97 98
98 class CFGAS_FileReadStreamImp : public IFGAS_StreamImp { 99 class CFGAS_FileReadStreamImp : public IFGAS_StreamImp {
99 public: 100 public:
100 CFGAS_FileReadStreamImp(); 101 CFGAS_FileReadStreamImp();
101 ~CFGAS_FileReadStreamImp() override {} 102 ~CFGAS_FileReadStreamImp() override {}
102 103
103 bool LoadFileRead(IFX_SeekableReadStream* pFileRead, uint32_t dwAccess); 104 bool LoadFileRead(const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
105 uint32_t dwAccess);
104 106
105 // IFGAS_StreamImp: 107 // IFGAS_StreamImp:
106 int32_t GetLength() const override; 108 int32_t GetLength() const override;
107 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override; 109 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override;
108 int32_t GetPosition() override { return m_iPosition; } 110 int32_t GetPosition() override { return m_iPosition; }
109 bool IsEOF() const override; 111 bool IsEOF() const override;
110 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override; 112 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override;
111 int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, bool& bEOS) override; 113 int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, bool& bEOS) override;
112 int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override { 114 int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override {
113 return 0; 115 return 0;
114 } 116 }
115 int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override { 117 int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override {
116 return 0; 118 return 0;
117 } 119 }
118 void Flush() override {} 120 void Flush() override {}
119 bool SetLength(int32_t iLength) override { return false; } 121 bool SetLength(int32_t iLength) override { return false; }
120 122
121 protected: 123 protected:
122 IFX_SeekableReadStream* m_pFileRead; 124 CFX_RetainPtr<IFX_SeekableReadStream> m_pFileRead;
123 int32_t m_iPosition; 125 int32_t m_iPosition;
124 int32_t m_iLength; 126 int32_t m_iLength;
125 }; 127 };
126 128
127 class CFGAS_BufferReadStreamImp : public IFGAS_StreamImp { 129 class CFGAS_BufferReadStreamImp : public IFGAS_StreamImp {
128 public: 130 public:
129 CFGAS_BufferReadStreamImp(); 131 CFGAS_BufferReadStreamImp();
130 ~CFGAS_BufferReadStreamImp() override; 132 ~CFGAS_BufferReadStreamImp() override;
131 133
132 bool LoadBufferRead(IFX_BufferedReadStream* pBufferRead, 134 bool LoadBufferRead(const CFX_RetainPtr<IFX_BufferedReadStream>& pBufferRead,
133 int32_t iFileSize, 135 int32_t iFileSize,
134 uint32_t dwAccess, 136 uint32_t dwAccess);
135 bool bReleaseBufferRead);
136 137
137 // IFGAS_StreamImp: 138 // IFGAS_StreamImp:
138 int32_t GetLength() const override; 139 int32_t GetLength() const override;
139 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override; 140 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override;
140 int32_t GetPosition() override { return m_iPosition; } 141 int32_t GetPosition() override { return m_iPosition; }
141 bool IsEOF() const override; 142 bool IsEOF() const override;
142 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override; 143 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override;
143 int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, bool& bEOS) override; 144 int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, bool& bEOS) override;
144 int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override { 145 int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override {
145 return 0; 146 return 0;
146 } 147 }
147 int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override { 148 int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override {
148 return 0; 149 return 0;
149 } 150 }
150 void Flush() override {} 151 void Flush() override {}
151 bool SetLength(int32_t iLength) override { return false; } 152 bool SetLength(int32_t iLength) override { return false; }
152 153
153 private: 154 private:
154 IFX_BufferedReadStream* m_pBufferRead; 155 CFX_RetainPtr<IFX_BufferedReadStream> m_pBufferRead;
155 bool m_bReleaseBufferRead;
156 int32_t m_iPosition; 156 int32_t m_iPosition;
157 int32_t m_iBufferSize; 157 int32_t m_iBufferSize;
158 }; 158 };
159 159
160 class CFGAS_FileWriteStreamImp : public IFGAS_StreamImp { 160 class CFGAS_FileWriteStreamImp : public IFGAS_StreamImp {
161 public: 161 public:
162 CFGAS_FileWriteStreamImp(); 162 CFGAS_FileWriteStreamImp();
163 ~CFGAS_FileWriteStreamImp() override {} 163 ~CFGAS_FileWriteStreamImp() override {}
164 164
165 bool LoadFileWrite(IFX_SeekableWriteStream* pFileWrite, uint32_t dwAccess); 165 bool LoadFileWrite(const CFX_RetainPtr<IFX_SeekableWriteStream>& pFileWrite,
166 uint32_t dwAccess);
166 167
167 // IFGAS_StreamImp: 168 // IFGAS_StreamImp:
168 int32_t GetLength() const override; 169 int32_t GetLength() const override;
169 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override; 170 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override;
170 int32_t GetPosition() override { return m_iPosition; } 171 int32_t GetPosition() override { return m_iPosition; }
171 bool IsEOF() const override; 172 bool IsEOF() const override;
172 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override { return 0; } 173 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override { return 0; }
173 int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, bool& bEOS) override { 174 int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, bool& bEOS) override {
174 return 0; 175 return 0;
175 } 176 }
176 int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override; 177 int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override;
177 int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override; 178 int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override;
178 void Flush() override; 179 void Flush() override;
179 bool SetLength(int32_t iLength) override { return false; } 180 bool SetLength(int32_t iLength) override { return false; }
180 181
181 protected: 182 protected:
182 IFX_SeekableWriteStream* m_pFileWrite; 183 CFX_RetainPtr<IFX_SeekableWriteStream> m_pFileWrite;
183 int32_t m_iPosition; 184 int32_t m_iPosition;
184 }; 185 };
185 186
186 enum FX_STREAMTYPE { 187 enum FX_STREAMTYPE {
187 FX_SREAMTYPE_Unknown = 0, 188 FX_SREAMTYPE_Unknown = 0,
188 FX_STREAMTYPE_File, 189 FX_STREAMTYPE_File,
189 FX_STREAMTYPE_Buffer, 190 FX_STREAMTYPE_Buffer,
190 FX_STREAMTYPE_Stream, 191 FX_STREAMTYPE_Stream,
191 FX_STREAMTYPE_BufferRead, 192 FX_STREAMTYPE_BufferRead,
192 }; 193 };
193 194
194 class CFGAS_Stream : public IFGAS_Stream { 195 class CFGAS_Stream : public IFGAS_Stream {
195 public: 196 public:
196 CFGAS_Stream(); 197 CFGAS_Stream();
197 ~CFGAS_Stream() override; 198 ~CFGAS_Stream() override;
198 199
199 bool LoadFile(const FX_WCHAR* pszSrcFileName, uint32_t dwAccess); 200 bool LoadFile(const FX_WCHAR* pszSrcFileName, uint32_t dwAccess);
200 bool LoadBuffer(uint8_t* pData, int32_t iTotalSize, uint32_t dwAccess); 201 bool LoadBuffer(uint8_t* pData, int32_t iTotalSize, uint32_t dwAccess);
201 bool LoadFileRead(IFX_SeekableReadStream* pFileRead, uint32_t dwAccess); 202 bool LoadFileRead(const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
202 bool LoadFileWrite(IFX_SeekableWriteStream* pFileWrite, uint32_t dwAccess); 203 uint32_t dwAccess);
203 bool LoadBufferRead(IFX_BufferedReadStream* pBufferRead, 204 bool LoadFileWrite(const CFX_RetainPtr<IFX_SeekableWriteStream>& pFileWrite,
205 uint32_t dwAccess);
206 bool LoadBufferRead(const CFX_RetainPtr<IFX_BufferedReadStream>& pBufferRead,
204 int32_t iFileSize, 207 int32_t iFileSize,
205 uint32_t dwAccess, 208 uint32_t dwAccess);
206 bool bReleaseBufferRead);
207 209
208 // IFGAS_Stream 210 // IFGAS_Stream
209 void Release() override; 211 void Release() override;
210 IFGAS_Stream* Retain() override; 212 IFGAS_Stream* Retain() override;
211 uint32_t GetAccessModes() const override; 213 uint32_t GetAccessModes() const override;
212 int32_t GetLength() const override; 214 int32_t GetLength() const override;
213 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override; 215 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override;
214 int32_t GetPosition() override; 216 int32_t GetPosition() override;
215 bool IsEOF() const override; 217 bool IsEOF() const override;
216 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override; 218 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 uint8_t* m_pBuf; 272 uint8_t* m_pBuf;
271 int32_t m_iBufSize; 273 int32_t m_iBufSize;
272 bool m_bDelStream; 274 bool m_bDelStream;
273 IFGAS_Stream* m_pStreamImp; 275 IFGAS_Stream* m_pStreamImp;
274 int32_t m_iRefCount; 276 int32_t m_iRefCount;
275 void InitStream(); 277 void InitStream();
276 }; 278 };
277 279
278 class CFGAS_FileRead : public IFX_SeekableReadStream { 280 class CFGAS_FileRead : public IFX_SeekableReadStream {
279 public: 281 public:
280 CFGAS_FileRead(IFGAS_Stream* pStream, bool bReleaseStream); 282 static CFX_RetainPtr<CFGAS_FileRead> Create(IFGAS_Stream* pStream,
283 bool bReleaseStream);
281 ~CFGAS_FileRead() override; 284 ~CFGAS_FileRead() override;
282 285
283 // IFX_SeekableReadStream 286 // IFX_SeekableReadStream
284 void Release() override;
285 FX_FILESIZE GetSize() override; 287 FX_FILESIZE GetSize() override;
286 bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override; 288 bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
287 289
288 protected: 290 protected:
291 CFGAS_FileRead(IFGAS_Stream* pStream, bool bReleaseStream);
292
289 bool m_bReleaseStream; 293 bool m_bReleaseStream;
290 IFGAS_Stream* m_pStream; 294 IFGAS_Stream* m_pStream;
291 }; 295 };
292 296
293 int32_t FileLength(FXSYS_FILE* file) { 297 int32_t FileLength(FXSYS_FILE* file) {
294 ASSERT(file); 298 ASSERT(file);
295 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ 299 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_
296 return _filelength(_fileno(file)); 300 return _filelength(_fileno(file));
297 #else 301 #else
298 int32_t iPos = FXSYS_ftell(file); 302 int32_t iPos = FXSYS_ftell(file);
(...skipping 16 matching lines...) Expand all
315 ::SetFilePointer(hFile, (int32_t)dwPos, 0, FILE_BEGIN); 319 ::SetFilePointer(hFile, (int32_t)dwPos, 0, FILE_BEGIN);
316 return bRet; 320 return bRet;
317 #else 321 #else
318 return false; 322 return false;
319 #endif 323 #endif
320 } 324 }
321 325
322 } // namespace 326 } // namespace
323 327
324 // static 328 // static
325 IFGAS_Stream* IFGAS_Stream::CreateStream(IFX_SeekableReadStream* pFileRead, 329 IFGAS_Stream* IFGAS_Stream::CreateStream(
326 uint32_t dwAccess) { 330 const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
331 uint32_t dwAccess) {
327 CFGAS_Stream* pSR = new CFGAS_Stream; 332 CFGAS_Stream* pSR = new CFGAS_Stream;
328 if (!pSR->LoadFileRead(pFileRead, dwAccess)) { 333 if (!pSR->LoadFileRead(pFileRead, dwAccess)) {
329 pSR->Release(); 334 pSR->Release();
330 return nullptr; 335 return nullptr;
331 } 336 }
332 if (dwAccess & FX_STREAMACCESS_Text) 337 if (dwAccess & FX_STREAMACCESS_Text)
333 return new CFGAS_TextStream(pSR, true); 338 return new CFGAS_TextStream(pSR, true);
334 339
335 return pSR; 340 return pSR;
336 } 341 }
337 342
338 // static 343 // static
339 IFGAS_Stream* IFGAS_Stream::CreateStream(IFX_SeekableWriteStream* pFileWrite, 344 IFGAS_Stream* IFGAS_Stream::CreateStream(
340 uint32_t dwAccess) { 345 const CFX_RetainPtr<IFX_SeekableWriteStream>& pFileWrite,
346 uint32_t dwAccess) {
341 CFGAS_Stream* pSR = new CFGAS_Stream; 347 CFGAS_Stream* pSR = new CFGAS_Stream;
342 if (!pSR->LoadFileWrite(pFileWrite, dwAccess)) { 348 if (!pSR->LoadFileWrite(pFileWrite, dwAccess)) {
343 pSR->Release(); 349 pSR->Release();
344 return nullptr; 350 return nullptr;
345 } 351 }
346 if (dwAccess & FX_STREAMACCESS_Text) 352 if (dwAccess & FX_STREAMACCESS_Text)
347 return new CFGAS_TextStream(pSR, true); 353 return new CFGAS_TextStream(pSR, true);
348 354
349 return pSR; 355 return pSR;
350 } 356 }
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 void CFGAS_FileStreamImp::Flush() { 533 void CFGAS_FileStreamImp::Flush() {
528 ASSERT(m_hFile && (GetAccessModes() & FX_STREAMACCESS_Write) != 0); 534 ASSERT(m_hFile && (GetAccessModes() & FX_STREAMACCESS_Write) != 0);
529 FXSYS_fflush(m_hFile); 535 FXSYS_fflush(m_hFile);
530 } 536 }
531 bool CFGAS_FileStreamImp::SetLength(int32_t iLength) { 537 bool CFGAS_FileStreamImp::SetLength(int32_t iLength) {
532 ASSERT(m_hFile && (GetAccessModes() & FX_STREAMACCESS_Write) != 0); 538 ASSERT(m_hFile && (GetAccessModes() & FX_STREAMACCESS_Write) != 0);
533 bool bRet = FileSetSize(m_hFile, iLength); 539 bool bRet = FileSetSize(m_hFile, iLength);
534 m_iLength = FileLength(m_hFile); 540 m_iLength = FileLength(m_hFile);
535 return bRet; 541 return bRet;
536 } 542 }
543
537 CFGAS_FileReadStreamImp::CFGAS_FileReadStreamImp() 544 CFGAS_FileReadStreamImp::CFGAS_FileReadStreamImp()
538 : m_pFileRead(nullptr), m_iPosition(0), m_iLength(0) {} 545 : m_pFileRead(nullptr), m_iPosition(0), m_iLength(0) {}
539 bool CFGAS_FileReadStreamImp::LoadFileRead(IFX_SeekableReadStream* pFileRead, 546
540 uint32_t dwAccess) { 547 bool CFGAS_FileReadStreamImp::LoadFileRead(
548 const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
549 uint32_t dwAccess) {
541 ASSERT(!m_pFileRead && pFileRead); 550 ASSERT(!m_pFileRead && pFileRead);
542 if (dwAccess & FX_STREAMACCESS_Write) { 551 if (dwAccess & FX_STREAMACCESS_Write)
543 return false; 552 return false;
544 } 553
545 m_pFileRead = pFileRead; 554 m_pFileRead = pFileRead;
546 m_iLength = m_pFileRead->GetSize(); 555 m_iLength = m_pFileRead->GetSize();
547 return true; 556 return true;
548 } 557 }
558
549 int32_t CFGAS_FileReadStreamImp::GetLength() const { 559 int32_t CFGAS_FileReadStreamImp::GetLength() const {
550 return m_iLength; 560 return m_iLength;
551 } 561 }
552 int32_t CFGAS_FileReadStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { 562 int32_t CFGAS_FileReadStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) {
553 switch (eSeek) { 563 switch (eSeek) {
554 case FX_STREAMSEEK_Begin: 564 case FX_STREAMSEEK_Begin:
555 m_iPosition = iOffset; 565 m_iPosition = iOffset;
556 break; 566 break;
557 case FX_STREAMSEEK_Current: 567 case FX_STREAMSEEK_Current:
558 m_iPosition += iOffset; 568 m_iPosition += iOffset;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 if (iMaxLength <= 0) { 603 if (iMaxLength <= 0) {
594 return 0; 604 return 0;
595 } 605 }
596 int32_t i = 0; 606 int32_t i = 0;
597 while (i < iMaxLength && pStr[i] != L'\0') { 607 while (i < iMaxLength && pStr[i] != L'\0') {
598 ++i; 608 ++i;
599 } 609 }
600 bEOS = (m_iPosition >= m_iLength) || pStr[i] == L'\0'; 610 bEOS = (m_iPosition >= m_iLength) || pStr[i] == L'\0';
601 return i; 611 return i;
602 } 612 }
613
603 CFGAS_BufferReadStreamImp::CFGAS_BufferReadStreamImp() 614 CFGAS_BufferReadStreamImp::CFGAS_BufferReadStreamImp()
604 : m_pBufferRead(nullptr), 615 : m_iPosition(0), m_iBufferSize(0) {}
605 m_bReleaseBufferRead(false), 616
606 m_iPosition(0), 617 CFGAS_BufferReadStreamImp::~CFGAS_BufferReadStreamImp() {}
607 m_iBufferSize(0) {} 618
608 CFGAS_BufferReadStreamImp::~CFGAS_BufferReadStreamImp() {
609 if (m_bReleaseBufferRead && m_pBufferRead) {
610 m_pBufferRead->Release();
611 }
612 }
613 bool CFGAS_BufferReadStreamImp::LoadBufferRead( 619 bool CFGAS_BufferReadStreamImp::LoadBufferRead(
614 IFX_BufferedReadStream* pBufferRead, 620 const CFX_RetainPtr<IFX_BufferedReadStream>& pBufferRead,
615 int32_t iFileSize, 621 int32_t iFileSize,
616 uint32_t dwAccess, 622 uint32_t dwAccess) {
617 bool bReleaseBufferRead) {
618 ASSERT(!m_pBufferRead && pBufferRead); 623 ASSERT(!m_pBufferRead && pBufferRead);
619 if (dwAccess & FX_STREAMACCESS_Write) { 624 if (dwAccess & FX_STREAMACCESS_Write)
620 return false; 625 return false;
621 } 626
622 m_bReleaseBufferRead = bReleaseBufferRead;
623 m_pBufferRead = pBufferRead; 627 m_pBufferRead = pBufferRead;
624 m_iBufferSize = iFileSize; 628 m_iBufferSize = iFileSize;
625 if (m_iBufferSize >= 0) { 629 if (m_iBufferSize >= 0)
626 return true; 630 return true;
627 } 631
628 if (!m_pBufferRead->ReadNextBlock(true)) { 632 if (!m_pBufferRead->ReadNextBlock(true))
629 return false; 633 return false;
630 } 634
631 m_iBufferSize = m_pBufferRead->GetBlockSize(); 635 m_iBufferSize = m_pBufferRead->GetBlockSize();
632 while (!m_pBufferRead->IsEOF()) { 636 while (!m_pBufferRead->IsEOF()) {
633 m_pBufferRead->ReadNextBlock(false); 637 m_pBufferRead->ReadNextBlock(false);
634 m_iBufferSize += m_pBufferRead->GetBlockSize(); 638 m_iBufferSize += m_pBufferRead->GetBlockSize();
635 } 639 }
636 return true; 640 return true;
637 } 641 }
638 int32_t CFGAS_BufferReadStreamImp::GetLength() const { 642 int32_t CFGAS_BufferReadStreamImp::GetLength() const {
639 return m_iBufferSize; 643 return m_iBufferSize;
640 } 644 }
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 } 730 }
727 int32_t i = 0; 731 int32_t i = 0;
728 while (i < iMaxLength && pStr[i] != L'\0') { 732 while (i < iMaxLength && pStr[i] != L'\0') {
729 ++i; 733 ++i;
730 } 734 }
731 bEOS = (m_iPosition >= GetLength()) || pStr[i] == L'\0'; 735 bEOS = (m_iPosition >= GetLength()) || pStr[i] == L'\0';
732 return i; 736 return i;
733 } 737 }
734 CFGAS_FileWriteStreamImp::CFGAS_FileWriteStreamImp() 738 CFGAS_FileWriteStreamImp::CFGAS_FileWriteStreamImp()
735 : m_pFileWrite(nullptr), m_iPosition(0) {} 739 : m_pFileWrite(nullptr), m_iPosition(0) {}
740
736 bool CFGAS_FileWriteStreamImp::LoadFileWrite( 741 bool CFGAS_FileWriteStreamImp::LoadFileWrite(
737 IFX_SeekableWriteStream* pFileWrite, 742 const CFX_RetainPtr<IFX_SeekableWriteStream>& pFileWrite,
738 uint32_t dwAccess) { 743 uint32_t dwAccess) {
739 ASSERT(!m_pFileWrite && pFileWrite); 744 ASSERT(!m_pFileWrite && pFileWrite);
740 if (dwAccess & FX_STREAMACCESS_Read) { 745 if (dwAccess & FX_STREAMACCESS_Read)
741 return false; 746 return false;
742 } 747
743 if (dwAccess & FX_STREAMACCESS_Append) { 748 if (dwAccess & FX_STREAMACCESS_Append)
744 m_iPosition = pFileWrite->GetSize(); 749 m_iPosition = pFileWrite->GetSize();
745 } 750
746 m_pFileWrite = pFileWrite; 751 m_pFileWrite = pFileWrite;
747 return true; 752 return true;
748 } 753 }
754
749 int32_t CFGAS_FileWriteStreamImp::GetLength() const { 755 int32_t CFGAS_FileWriteStreamImp::GetLength() const {
750 if (!m_pFileWrite) { 756 if (!m_pFileWrite)
751 return 0; 757 return 0;
752 } 758
753 return (int32_t)m_pFileWrite->GetSize(); 759 return (int32_t)m_pFileWrite->GetSize();
754 } 760 }
755 int32_t CFGAS_FileWriteStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { 761 int32_t CFGAS_FileWriteStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) {
756 int32_t iLength = GetLength(); 762 int32_t iLength = GetLength();
757 switch (eSeek) { 763 switch (eSeek) {
758 case FX_STREAMSEEK_Begin: 764 case FX_STREAMSEEK_Begin:
759 m_iPosition = iOffset; 765 m_iPosition = iOffset;
760 break; 766 break;
761 case FX_STREAMSEEK_Current: 767 case FX_STREAMSEEK_Current:
762 m_iPosition += iOffset; 768 m_iPosition += iOffset;
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
1152 if (!pImp->LoadFile(pszSrcFileName, dwAccess)) 1158 if (!pImp->LoadFile(pszSrcFileName, dwAccess))
1153 return false; 1159 return false;
1154 1160
1155 m_pStreamImp = pImp.release(); 1161 m_pStreamImp = pImp.release();
1156 m_eStreamType = FX_STREAMTYPE_File; 1162 m_eStreamType = FX_STREAMTYPE_File;
1157 m_dwAccess = dwAccess; 1163 m_dwAccess = dwAccess;
1158 m_iLength = m_pStreamImp->GetLength(); 1164 m_iLength = m_pStreamImp->GetLength();
1159 return true; 1165 return true;
1160 } 1166 }
1161 1167
1162 bool CFGAS_Stream::LoadFileRead(IFX_SeekableReadStream* pFileRead, 1168 bool CFGAS_Stream::LoadFileRead(
1163 uint32_t dwAccess) { 1169 const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
1170 uint32_t dwAccess) {
1164 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) 1171 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp)
1165 return false; 1172 return false;
1166 1173
1167 if (!pFileRead) 1174 if (!pFileRead)
1168 return false; 1175 return false;
1169 1176
1170 std::unique_ptr<CFGAS_FileReadStreamImp> pImp(new CFGAS_FileReadStreamImp()); 1177 std::unique_ptr<CFGAS_FileReadStreamImp> pImp(new CFGAS_FileReadStreamImp());
1171 if (!pImp->LoadFileRead(pFileRead, dwAccess)) 1178 if (!pImp->LoadFileRead(pFileRead, dwAccess))
1172 return false; 1179 return false;
1173 1180
1174 m_pStreamImp = pImp.release(); 1181 m_pStreamImp = pImp.release();
1175 m_eStreamType = FX_STREAMTYPE_File; 1182 m_eStreamType = FX_STREAMTYPE_File;
1176 m_dwAccess = dwAccess; 1183 m_dwAccess = dwAccess;
1177 m_iLength = m_pStreamImp->GetLength(); 1184 m_iLength = m_pStreamImp->GetLength();
1178 return true; 1185 return true;
1179 } 1186 }
1180 1187
1181 bool CFGAS_Stream::LoadFileWrite(IFX_SeekableWriteStream* pFileWrite, 1188 bool CFGAS_Stream::LoadFileWrite(
1182 uint32_t dwAccess) { 1189 const CFX_RetainPtr<IFX_SeekableWriteStream>& pFileWrite,
1190 uint32_t dwAccess) {
1183 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) 1191 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp)
1184 return false; 1192 return false;
1185 1193
1186 if (!pFileWrite) 1194 if (!pFileWrite)
1187 return false; 1195 return false;
1188 1196
1189 std::unique_ptr<CFGAS_FileWriteStreamImp> pImp( 1197 auto pImp = pdfium::MakeUnique<CFGAS_FileWriteStreamImp>();
1190 new CFGAS_FileWriteStreamImp());
1191 if (!pImp->LoadFileWrite(pFileWrite, dwAccess)) 1198 if (!pImp->LoadFileWrite(pFileWrite, dwAccess))
1192 return false; 1199 return false;
1193 1200
1194 m_pStreamImp = pImp.release(); 1201 m_pStreamImp = pImp.release();
1195 m_eStreamType = FX_STREAMTYPE_File; 1202 m_eStreamType = FX_STREAMTYPE_File;
1196 m_dwAccess = dwAccess; 1203 m_dwAccess = dwAccess;
1197 m_iLength = m_pStreamImp->GetLength(); 1204 m_iLength = m_pStreamImp->GetLength();
1198 return true; 1205 return true;
1199 } 1206 }
1200 1207
(...skipping 10 matching lines...) Expand all
1211 if (!pImp->LoadBuffer(pData, iTotalSize, dwAccess)) 1218 if (!pImp->LoadBuffer(pData, iTotalSize, dwAccess))
1212 return false; 1219 return false;
1213 1220
1214 m_pStreamImp = pImp.release(); 1221 m_pStreamImp = pImp.release();
1215 m_eStreamType = FX_STREAMTYPE_Buffer; 1222 m_eStreamType = FX_STREAMTYPE_Buffer;
1216 m_dwAccess = dwAccess; 1223 m_dwAccess = dwAccess;
1217 m_iLength = m_pStreamImp->GetLength(); 1224 m_iLength = m_pStreamImp->GetLength();
1218 return true; 1225 return true;
1219 } 1226 }
1220 1227
1221 bool CFGAS_Stream::LoadBufferRead(IFX_BufferedReadStream* pBufferRead, 1228 bool CFGAS_Stream::LoadBufferRead(
1222 int32_t iFileSize, 1229 const CFX_RetainPtr<IFX_BufferedReadStream>& pBufferRead,
1223 uint32_t dwAccess, 1230 int32_t iFileSize,
1224 bool bReleaseBufferRead) { 1231 uint32_t dwAccess) {
1225 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) 1232 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp)
1226 return false; 1233 return false;
1227 1234
1228 if (!pBufferRead) 1235 if (!pBufferRead)
1229 return false; 1236 return false;
1230 1237
1231 std::unique_ptr<CFGAS_BufferReadStreamImp> pImp( 1238 auto pImp = pdfium::MakeUnique<CFGAS_BufferReadStreamImp>();
1232 new CFGAS_BufferReadStreamImp); 1239 if (!pImp->LoadBufferRead(pBufferRead, iFileSize, dwAccess))
1233 if (!pImp->LoadBufferRead(pBufferRead, iFileSize, dwAccess,
1234 bReleaseBufferRead))
1235 return false; 1240 return false;
1236 1241
1237 m_pStreamImp = pImp.release(); 1242 m_pStreamImp = pImp.release();
1238 m_eStreamType = FX_STREAMTYPE_BufferRead; 1243 m_eStreamType = FX_STREAMTYPE_BufferRead;
1239 m_dwAccess = dwAccess; 1244 m_dwAccess = dwAccess;
1240 m_iLength = m_pStreamImp->GetLength(); 1245 m_iLength = m_pStreamImp->GetLength();
1241 return true; 1246 return true;
1242 } 1247 }
1243 1248
1244 void CFGAS_Stream::Release() { 1249 void CFGAS_Stream::Release() {
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 pShared->m_iTotalSize = iLength; 1476 pShared->m_iTotalSize = iLength;
1472 pShared->m_iPosition = iStart; 1477 pShared->m_iPosition = iStart;
1473 pShared->m_iStart = iStart; 1478 pShared->m_iStart = iStart;
1474 pShared->m_iLength = (dwAccess & FX_STREAMACCESS_Write) != 0 ? 0 : iLength; 1479 pShared->m_iLength = (dwAccess & FX_STREAMACCESS_Write) != 0 ? 0 : iLength;
1475 if (dwAccess & FX_STREAMACCESS_Text) 1480 if (dwAccess & FX_STREAMACCESS_Text)
1476 return IFGAS_Stream::CreateTextStream(pShared, true); 1481 return IFGAS_Stream::CreateTextStream(pShared, true);
1477 1482
1478 return pShared; 1483 return pShared;
1479 } 1484 }
1480 1485
1481 IFX_SeekableReadStream* IFGAS_Stream::MakeSeekableReadStream() { 1486 CFX_RetainPtr<IFX_SeekableReadStream> IFGAS_Stream::MakeSeekableReadStream() {
1482 return new CFGAS_FileRead(this, false); 1487 return CFGAS_FileRead::Create(this, false);
1488 }
1489
1490 CFX_RetainPtr<CFGAS_FileRead> CFGAS_FileRead::Create(IFGAS_Stream* pStream,
1491 bool bReleaseStream) {
1492 return CFX_RetainPtr<CFGAS_FileRead>(
1493 new CFGAS_FileRead(pStream, bReleaseStream));
1483 } 1494 }
1484 1495
1485 CFGAS_FileRead::CFGAS_FileRead(IFGAS_Stream* pStream, bool bReleaseStream) 1496 CFGAS_FileRead::CFGAS_FileRead(IFGAS_Stream* pStream, bool bReleaseStream)
1486 : m_bReleaseStream(bReleaseStream), m_pStream(pStream) { 1497 : m_bReleaseStream(bReleaseStream), m_pStream(pStream) {
1487 ASSERT(m_pStream); 1498 ASSERT(m_pStream);
1488 } 1499 }
1500
1489 CFGAS_FileRead::~CFGAS_FileRead() { 1501 CFGAS_FileRead::~CFGAS_FileRead() {
1490 if (m_bReleaseStream) { 1502 if (m_bReleaseStream) {
1491 m_pStream->Release(); 1503 m_pStream->Release();
1492 } 1504 }
1493 } 1505 }
1494 FX_FILESIZE CFGAS_FileRead::GetSize() { 1506 FX_FILESIZE CFGAS_FileRead::GetSize() {
1495 return (FX_FILESIZE)m_pStream->GetLength(); 1507 return (FX_FILESIZE)m_pStream->GetLength();
1496 } 1508 }
1497 1509
1498 bool CFGAS_FileRead::ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) { 1510 bool CFGAS_FileRead::ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) {
1499 m_pStream->Seek(FX_STREAMSEEK_Begin, (int32_t)offset); 1511 m_pStream->Seek(FX_STREAMSEEK_Begin, (int32_t)offset);
1500 int32_t iLen = m_pStream->ReadData((uint8_t*)buffer, (int32_t)size); 1512 int32_t iLen = m_pStream->ReadData((uint8_t*)buffer, (int32_t)size);
1501 return iLen == (int32_t)size; 1513 return iLen == (int32_t)size;
1502 } 1514 }
1503
1504 void CFGAS_FileRead::Release() {
1505 delete this;
1506 }
OLDNEW
« no previous file with comments | « xfa/fgas/crt/fgas_stream.h ('k') | xfa/fgas/font/cfgas_fontmgr.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698