From e6db16e7e6cdc3dd213c16de0d792b77656ac7a6 Mon Sep 17 00:00:00 2001 From: tsepez Date: Mon, 19 Sep 2016 10:45:09 -0700 Subject: Clean up CPDF_Stream. Replace the CPDF_Stream(nullptr, 0, nullptr) pattern with a default ctor. Remove unused parameters from CPDF_Stream::SetData(). Both are always passed as FALSE. CPDF_Stream declared its own m_GenNum, which shadowed the one in CPDF_Object. It was used only to distinguish file/memory streams, so add a bool explicitly for this purpose. Remove the union, it would be sad if we confused user data with a C++ object with virtual function calls. Use unique_ptrs with appropriate deleters to manage memory. Review-Url: https://codereview.chromium.org/2347993002 --- core/fpdfapi/fpdf_parser/include/cpdf_stream.h | 33 +++++++++++--------------- 1 file changed, 14 insertions(+), 19 deletions(-) (limited to 'core/fpdfapi/fpdf_parser/include/cpdf_stream.h') diff --git a/core/fpdfapi/fpdf_parser/include/cpdf_stream.h b/core/fpdfapi/fpdf_parser/include/cpdf_stream.h index 7ea761ef51..b39b20a1e9 100644 --- a/core/fpdfapi/fpdf_parser/include/cpdf_stream.h +++ b/core/fpdfapi/fpdf_parser/include/cpdf_stream.h @@ -7,14 +7,18 @@ #ifndef CORE_FPDFAPI_FPDF_PARSER_INCLUDE_CPDF_STREAM_H_ #define CORE_FPDFAPI_FPDF_PARSER_INCLUDE_CPDF_STREAM_H_ +#include #include #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" #include "core/fpdfapi/fpdf_parser/include/cpdf_object.h" -#include "core/fxcrt/include/fx_stream.h" +#include "core/fxcrt/include/fx_basic.h" class CPDF_Stream : public CPDF_Object { public: + CPDF_Stream(); + + // Takes onwership of |pData| and |pDict|. CPDF_Stream(uint8_t* pData, uint32_t size, CPDF_Dictionary* pDict); // CPDF_Object. @@ -27,12 +31,10 @@ class CPDF_Stream : public CPDF_Object { const CPDF_Stream* AsStream() const override; uint32_t GetRawSize() const { return m_dwSize; } - uint8_t* GetRawData() const { return m_pDataBuf; } + uint8_t* GetRawData() const { return m_pDataBuf.get(); } - void SetData(const uint8_t* pData, - uint32_t size, - FX_BOOL bCompressed, - FX_BOOL bKeepBuf); + // Does not takes onwership of |pData|, copies into internally-owned buffer. + void SetData(const uint8_t* pData, uint32_t size); void InitStream(const uint8_t* pData, uint32_t size, CPDF_Dictionary* pDict); void InitStreamFromFile(IFX_FileRead* pFile, CPDF_Dictionary* pDict); @@ -41,26 +43,19 @@ class CPDF_Stream : public CPDF_Object { uint8_t* pBuf, uint32_t buf_size) const; - bool IsMemoryBased() const { return m_GenNum == kMemoryBasedGenNum; } + bool IsMemoryBased() const { return m_bMemoryBased; } protected: - static const uint32_t kMemoryBasedGenNum = (uint32_t)-1; - ~CPDF_Stream() override; CPDF_Object* CloneNonCyclic( bool bDirect, std::set* pVisited) const override; - void InitStreamInternal(CPDF_Dictionary* pDict); - - CPDF_Dictionary* m_pDict; - uint32_t m_dwSize; - uint32_t m_GenNum; - - union { - uint8_t* m_pDataBuf; - IFX_FileRead* m_pFile; - }; + std::unique_ptr> m_pDict; + bool m_bMemoryBased = true; + uint32_t m_dwSize = 0; + std::unique_ptr m_pDataBuf; + IFX_FileRead* m_pFile = nullptr; }; #endif // CORE_FPDFAPI_FPDF_PARSER_INCLUDE_CPDF_STREAM_H_ -- cgit v1.2.3