Index: xfa/fgas/crt/fgas_stream.cpp |
diff --git a/xfa/fgas/crt/fgas_stream.cpp b/xfa/fgas/crt/fgas_stream.cpp |
index 3ccb6521413470369f34adecfa8a79d18d6951c3..966f615676feff74cba9a062174649187ff1bec8 100644 |
--- a/xfa/fgas/crt/fgas_stream.cpp |
+++ b/xfa/fgas/crt/fgas_stream.cpp |
@@ -208,8 +208,6 @@ class CFGAS_Stream : public IFGAS_Stream { |
uint32_t dwAccess); |
// IFGAS_Stream |
- void Release() override; |
- IFGAS_Stream* Retain() override; |
uint32_t GetAccessModes() const override; |
int32_t GetLength() const override; |
int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override; |
@@ -224,9 +222,9 @@ class CFGAS_Stream : public IFGAS_Stream { |
int32_t GetBOM(uint8_t bom[4]) const override; |
uint16_t GetCodePage() const override; |
uint16_t SetCodePage(uint16_t wCodePage) override; |
- IFGAS_Stream* CreateSharedStream(uint32_t dwAccess, |
- int32_t iOffset, |
- int32_t iLength) override; |
+ CFX_RetainPtr<IFGAS_Stream> CreateSharedStream(uint32_t dwAccess, |
+ int32_t iOffset, |
+ int32_t iLength) override; |
protected: |
FX_STREAMTYPE m_eStreamType; |
@@ -241,12 +239,10 @@ class CFGAS_Stream : public IFGAS_Stream { |
class CFGAS_TextStream : public IFGAS_Stream { |
public: |
- CFGAS_TextStream(IFGAS_Stream* pStream, bool bDelStream); |
+ explicit CFGAS_TextStream(const CFX_RetainPtr<IFGAS_Stream>& pStream); |
~CFGAS_TextStream() override; |
// IFGAS_Stream |
- void Release() override; |
- IFGAS_Stream* Retain() override; |
uint32_t GetAccessModes() const override; |
int32_t GetLength() const override; |
int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override; |
@@ -261,26 +257,27 @@ class CFGAS_TextStream : public IFGAS_Stream { |
int32_t GetBOM(uint8_t bom[4]) const override; |
uint16_t GetCodePage() const override; |
uint16_t SetCodePage(uint16_t wCodePage) override; |
- IFGAS_Stream* CreateSharedStream(uint32_t dwAccess, |
- int32_t iOffset, |
- int32_t iLength) override; |
+ CFX_RetainPtr<IFGAS_Stream> CreateSharedStream(uint32_t dwAccess, |
+ int32_t iOffset, |
+ int32_t iLength) override; |
protected: |
+ void InitStream(); |
+ |
uint16_t m_wCodePage; |
int32_t m_wBOMLength; |
uint32_t m_dwBOM; |
uint8_t* m_pBuf; |
int32_t m_iBufSize; |
- bool m_bDelStream; |
- IFGAS_Stream* m_pStreamImp; |
- int32_t m_iRefCount; |
- void InitStream(); |
+ CFX_RetainPtr<IFGAS_Stream> m_pStreamImp; |
}; |
class CFGAS_FileRead : public IFX_SeekableReadStream { |
public: |
- static CFX_RetainPtr<CFGAS_FileRead> Create(IFGAS_Stream* pStream, |
- bool bReleaseStream); |
+ static CFX_RetainPtr<CFGAS_FileRead> Create( |
+ const CFX_RetainPtr<IFGAS_Stream>& pStream); |
+ |
+ explicit CFGAS_FileRead(const CFX_RetainPtr<IFGAS_Stream>& pStream); |
~CFGAS_FileRead() override; |
// IFX_SeekableReadStream |
@@ -288,10 +285,7 @@ class CFGAS_FileRead : public IFX_SeekableReadStream { |
bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override; |
protected: |
- CFGAS_FileRead(IFGAS_Stream* pStream, bool bReleaseStream); |
- |
- bool m_bReleaseStream; |
- IFGAS_Stream* m_pStream; |
+ CFX_RetainPtr<IFGAS_Stream> m_pStream; |
}; |
int32_t FileLength(FXSYS_FILE* file) { |
@@ -326,46 +320,43 @@ bool FileSetSize(FXSYS_FILE* file, int32_t size) { |
} // namespace |
// static |
-IFGAS_Stream* IFGAS_Stream::CreateStream( |
+CFX_RetainPtr<IFGAS_Stream> IFGAS_Stream::CreateStream( |
const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead, |
uint32_t dwAccess) { |
- CFGAS_Stream* pSR = new CFGAS_Stream; |
- if (!pSR->LoadFileRead(pFileRead, dwAccess)) { |
- pSR->Release(); |
+ auto pSR = pdfium::MakeRetain<CFGAS_Stream>(); |
+ if (!pSR->LoadFileRead(pFileRead, dwAccess)) |
return nullptr; |
- } |
+ |
if (dwAccess & FX_STREAMACCESS_Text) |
- return new CFGAS_TextStream(pSR, true); |
+ return pdfium::MakeRetain<CFGAS_TextStream>(pSR); |
return pSR; |
} |
// static |
-IFGAS_Stream* IFGAS_Stream::CreateStream( |
+CFX_RetainPtr<IFGAS_Stream> IFGAS_Stream::CreateStream( |
const CFX_RetainPtr<IFX_SeekableWriteStream>& pFileWrite, |
uint32_t dwAccess) { |
- CFGAS_Stream* pSR = new CFGAS_Stream; |
- if (!pSR->LoadFileWrite(pFileWrite, dwAccess)) { |
- pSR->Release(); |
+ auto pSR = pdfium::MakeRetain<CFGAS_Stream>(); |
+ if (!pSR->LoadFileWrite(pFileWrite, dwAccess)) |
return nullptr; |
- } |
+ |
if (dwAccess & FX_STREAMACCESS_Text) |
- return new CFGAS_TextStream(pSR, true); |
+ return pdfium::MakeRetain<CFGAS_TextStream>(pSR); |
return pSR; |
} |
// static |
-IFGAS_Stream* IFGAS_Stream::CreateStream(uint8_t* pData, |
- int32_t length, |
- uint32_t dwAccess) { |
- CFGAS_Stream* pSR = new CFGAS_Stream; |
- if (!pSR->LoadBuffer(pData, length, dwAccess)) { |
- pSR->Release(); |
+CFX_RetainPtr<IFGAS_Stream> IFGAS_Stream::CreateStream(uint8_t* pData, |
+ int32_t length, |
+ uint32_t dwAccess) { |
+ auto pSR = pdfium::MakeRetain<CFGAS_Stream>(); |
+ if (!pSR->LoadBuffer(pData, length, dwAccess)) |
return nullptr; |
- } |
+ |
if (dwAccess & FX_STREAMACCESS_Text) |
- return new CFGAS_TextStream(pSR, true); |
+ return pdfium::MakeRetain<CFGAS_TextStream>(pSR); |
return pSR; |
} |
@@ -905,30 +896,24 @@ int32_t CFGAS_BufferStreamImp::WriteString(const FX_WCHAR* pStr, |
} |
// static |
-IFGAS_Stream* IFGAS_Stream::CreateTextStream(IFGAS_Stream* pBaseStream, |
- bool bDeleteOnRelease) { |
+CFX_RetainPtr<IFGAS_Stream> IFGAS_Stream::CreateTextStream( |
+ const CFX_RetainPtr<IFGAS_Stream>& pBaseStream) { |
ASSERT(pBaseStream); |
- return new CFGAS_TextStream(pBaseStream, bDeleteOnRelease); |
+ return pdfium::MakeRetain<CFGAS_TextStream>(pBaseStream); |
} |
-CFGAS_TextStream::CFGAS_TextStream(IFGAS_Stream* pStream, bool bDelStream) |
+CFGAS_TextStream::CFGAS_TextStream(const CFX_RetainPtr<IFGAS_Stream>& pStream) |
: m_wCodePage(FX_CODEPAGE_DefANSI), |
m_wBOMLength(0), |
m_dwBOM(0), |
m_pBuf(nullptr), |
m_iBufSize(0), |
- m_bDelStream(bDelStream), |
- m_pStreamImp(pStream), |
- m_iRefCount(1) { |
+ m_pStreamImp(pStream) { |
ASSERT(m_pStreamImp); |
- m_pStreamImp->Retain(); |
InitStream(); |
} |
CFGAS_TextStream::~CFGAS_TextStream() { |
- m_pStreamImp->Release(); |
- if (m_bDelStream) |
- m_pStreamImp->Release(); |
if (m_pBuf) |
FX_Free(m_pBuf); |
} |
@@ -979,16 +964,6 @@ void CFGAS_TextStream::InitStream() { |
m_pStreamImp->Seek(FX_STREAMSEEK_Begin, std::max(m_wBOMLength, iPosition)); |
} |
-void CFGAS_TextStream::Release() { |
- if (--m_iRefCount < 1) |
- delete this; |
-} |
- |
-IFGAS_Stream* CFGAS_TextStream::Retain() { |
- m_iRefCount++; |
- return this; |
-} |
- |
uint32_t CFGAS_TextStream::GetAccessModes() const { |
return m_pStreamImp->GetAccessModes() | FX_STREAMACCESS_Text; |
} |
@@ -1030,16 +1005,17 @@ uint16_t CFGAS_TextStream::GetCodePage() const { |
return m_wCodePage; |
} |
-IFGAS_Stream* CFGAS_TextStream::CreateSharedStream(uint32_t dwAccess, |
- int32_t iOffset, |
- int32_t iLength) { |
- IFGAS_Stream* pSR = |
+CFX_RetainPtr<IFGAS_Stream> CFGAS_TextStream::CreateSharedStream( |
+ uint32_t dwAccess, |
+ int32_t iOffset, |
+ int32_t iLength) { |
+ CFX_RetainPtr<IFGAS_Stream> pSR = |
m_pStreamImp->CreateSharedStream(dwAccess, iOffset, iLength); |
if (!pSR) |
return nullptr; |
if (dwAccess & FX_STREAMACCESS_Text) |
- return new CFGAS_TextStream(pSR, true); |
+ return pdfium::MakeRetain<CFGAS_TextStream>(pSR); |
return pSR; |
} |
@@ -1246,16 +1222,6 @@ bool CFGAS_Stream::LoadBufferRead( |
return true; |
} |
-void CFGAS_Stream::Release() { |
- if (--m_iRefCount < 1) { |
- delete this; |
- } |
-} |
-IFGAS_Stream* CFGAS_Stream::Retain() { |
- m_iRefCount++; |
- return this; |
-} |
- |
uint32_t CFGAS_Stream::GetAccessModes() const { |
return m_dwAccess; |
} |
@@ -1445,9 +1411,10 @@ uint16_t CFGAS_Stream::SetCodePage(uint16_t wCodePage) { |
return FX_CODEPAGE_UTF16BE; |
#endif |
} |
-IFGAS_Stream* CFGAS_Stream::CreateSharedStream(uint32_t dwAccess, |
- int32_t iOffset, |
- int32_t iLength) { |
+ |
+CFX_RetainPtr<IFGAS_Stream> CFGAS_Stream::CreateSharedStream(uint32_t dwAccess, |
+ int32_t iOffset, |
+ int32_t iLength) { |
ASSERT(iLength > 0); |
if (!m_pStreamImp) |
return nullptr; |
@@ -1469,7 +1436,7 @@ IFGAS_Stream* CFGAS_Stream::CreateSharedStream(uint32_t dwAccess, |
if (iEnd < iStart || iEnd > iTotal) |
return nullptr; |
- CFGAS_Stream* pShared = new CFGAS_Stream; |
+ auto pShared = pdfium::MakeRetain<CFGAS_Stream>(); |
pShared->m_eStreamType = FX_STREAMTYPE_Stream; |
pShared->m_pStreamImp = m_pStreamImp; |
pShared->m_dwAccess = dwAccess; |
@@ -1478,31 +1445,27 @@ IFGAS_Stream* CFGAS_Stream::CreateSharedStream(uint32_t dwAccess, |
pShared->m_iStart = iStart; |
pShared->m_iLength = (dwAccess & FX_STREAMACCESS_Write) != 0 ? 0 : iLength; |
if (dwAccess & FX_STREAMACCESS_Text) |
- return IFGAS_Stream::CreateTextStream(pShared, true); |
+ return IFGAS_Stream::CreateTextStream(pShared); |
return pShared; |
} |
CFX_RetainPtr<IFX_SeekableReadStream> IFGAS_Stream::MakeSeekableReadStream() { |
- return CFGAS_FileRead::Create(this, false); |
+ return CFGAS_FileRead::Create(CFX_RetainPtr<IFGAS_Stream>(this)); |
} |
-CFX_RetainPtr<CFGAS_FileRead> CFGAS_FileRead::Create(IFGAS_Stream* pStream, |
- bool bReleaseStream) { |
- return CFX_RetainPtr<CFGAS_FileRead>( |
- new CFGAS_FileRead(pStream, bReleaseStream)); |
+CFX_RetainPtr<CFGAS_FileRead> CFGAS_FileRead::Create( |
+ const CFX_RetainPtr<IFGAS_Stream>& pStream) { |
+ return pdfium::MakeRetain<CFGAS_FileRead>(pStream); |
} |
-CFGAS_FileRead::CFGAS_FileRead(IFGAS_Stream* pStream, bool bReleaseStream) |
- : m_bReleaseStream(bReleaseStream), m_pStream(pStream) { |
+CFGAS_FileRead::CFGAS_FileRead(const CFX_RetainPtr<IFGAS_Stream>& pStream) |
+ : m_pStream(pStream) { |
ASSERT(m_pStream); |
} |
-CFGAS_FileRead::~CFGAS_FileRead() { |
- if (m_bReleaseStream) { |
- m_pStream->Release(); |
- } |
-} |
+CFGAS_FileRead::~CFGAS_FileRead() {} |
+ |
FX_FILESIZE CFGAS_FileRead::GetSize() { |
return (FX_FILESIZE)m_pStream->GetLength(); |
} |