Index: core/fxcrt/fx_extension.cpp |
diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp |
index cbbb86f26be6e62f33d72d9fa8f47a99943a79da..6142c8a8ce6b95cca07d53c537f28d5394cd2780 100644 |
--- a/core/fxcrt/fx_extension.cpp |
+++ b/core/fxcrt/fx_extension.cpp |
@@ -74,9 +74,6 @@ bool CFX_CRTFileAccess::Init(const CFX_WideStringC& wsPath) { |
class CFX_CRTFileStream final : public IFX_SeekableStream { |
public: |
- explicit CFX_CRTFileStream(std::unique_ptr<IFXCRT_FileAccess> pFA); |
- ~CFX_CRTFileStream() override; |
- |
// IFX_SeekableStream: |
FX_FILESIZE GetSize() override; |
bool IsEOF() override; |
@@ -87,6 +84,12 @@ class CFX_CRTFileStream final : public IFX_SeekableStream { |
bool Flush() override; |
private: |
+ template <typename T, typename... Args> |
+ friend CFX_RetainPtr<T> pdfium::MakeRetain(Args&&... args); |
+ |
+ explicit CFX_CRTFileStream(std::unique_ptr<IFXCRT_FileAccess> pFA); |
+ ~CFX_CRTFileStream() override; |
+ |
std::unique_ptr<IFXCRT_FileAccess> m_pFile; |
}; |
@@ -133,10 +136,6 @@ bool CFX_CRTFileStream::Flush() { |
class CFX_MemoryStream final : public IFX_MemoryStream { |
public: |
- explicit CFX_MemoryStream(bool bConsecutive); |
- CFX_MemoryStream(uint8_t* pBuffer, size_t nSize, bool bTakeOver); |
- ~CFX_MemoryStream() override; |
- |
// IFX_MemoryStream |
FX_FILESIZE GetSize() override; |
bool IsEOF() override; |
@@ -154,6 +153,13 @@ class CFX_MemoryStream final : public IFX_MemoryStream { |
void DetachBuffer() override; |
private: |
+ template <typename T, typename... Args> |
+ friend CFX_RetainPtr<T> pdfium::MakeRetain(Args&&... args); |
dsinclair
2016/12/07 21:12:57
I didn't know you could do that..... cool.
|
+ |
+ explicit CFX_MemoryStream(bool bConsecutive); |
+ CFX_MemoryStream(uint8_t* pBuffer, size_t nSize, bool bTakeOver); |
+ ~CFX_MemoryStream() override; |
+ |
bool ExpandBlocks(size_t size); |
CFX_ArrayTemplate<uint8_t*> m_Blocks; |
@@ -396,8 +402,7 @@ CFX_RetainPtr<IFX_SeekableStream> IFX_SeekableStream::CreateFromFilename( |
std::unique_ptr<IFXCRT_FileAccess> pFA(IFXCRT_FileAccess::Create()); |
if (!pFA->Open(filename, dwModes)) |
return nullptr; |
- return CFX_RetainPtr<IFX_SeekableStream>( |
- new CFX_CRTFileStream(std::move(pFA))); |
+ return pdfium::MakeRetain<CFX_CRTFileStream>(std::move(pFA)); |
} |
// static |
@@ -407,8 +412,7 @@ CFX_RetainPtr<IFX_SeekableStream> IFX_SeekableStream::CreateFromFilename( |
std::unique_ptr<IFXCRT_FileAccess> pFA(IFXCRT_FileAccess::Create()); |
if (!pFA->Open(filename, dwModes)) |
return nullptr; |
- return CFX_RetainPtr<IFX_SeekableStream>( |
- new CFX_CRTFileStream(std::move(pFA))); |
+ return pdfium::MakeRetain<CFX_CRTFileStream>(std::move(pFA)); |
} |
// static |
@@ -421,13 +425,12 @@ IFX_SeekableReadStream::CreateFromFilename(const FX_CHAR* filename) { |
CFX_RetainPtr<IFX_MemoryStream> IFX_MemoryStream::Create(uint8_t* pBuffer, |
size_t dwSize, |
bool bTakeOver) { |
- return CFX_RetainPtr<IFX_MemoryStream>( |
- new CFX_MemoryStream(pBuffer, dwSize, bTakeOver)); |
+ return pdfium::MakeRetain<CFX_MemoryStream>(pBuffer, dwSize, bTakeOver); |
} |
// static |
CFX_RetainPtr<IFX_MemoryStream> IFX_MemoryStream::Create(bool bConsecutive) { |
- return CFX_RetainPtr<IFX_MemoryStream>(new CFX_MemoryStream(bConsecutive)); |
+ return pdfium::MakeRetain<CFX_MemoryStream>(bConsecutive); |
} |
FX_FLOAT FXSYS_tan(FX_FLOAT a) { |