From 1b4f6b36b3ed8d1f6cea96bc32c1b376f4a499bc Mon Sep 17 00:00:00 2001 From: weili Date: Thu, 4 Aug 2016 16:37:48 -0700 Subject: Use smart pointers for class owned pointers For classes under xfa/fgas, xfa/fwl/basewidget, and xfa/fwl/core, use smart pointers instead of raw pointer to make memory management easier. BUG=pdfium:518 Review-Url: https://codereview.chromium.org/2207093005 --- xfa/fgas/font/fgas_gefont.cpp | 52 +++++++++++-------------------------------- xfa/fgas/font/fgas_gefont.h | 17 +++++++------- 2 files changed, 22 insertions(+), 47 deletions(-) (limited to 'xfa/fgas/font') diff --git a/xfa/fgas/font/fgas_gefont.cpp b/xfa/fgas/font/fgas_gefont.cpp index 48635cabf7..7492de246b 100644 --- a/xfa/fgas/font/fgas_gefont.cpp +++ b/xfa/fgas/font/fgas_gefont.cpp @@ -77,12 +77,6 @@ CFGAS_GEFont::CFGAS_GEFont(IFGAS_FontMgr* pFontMgr) m_pFontMgr(pFontMgr), m_iRefCount(1), m_bExtFont(FALSE), - m_pStream(nullptr), - m_pFileRead(nullptr), - m_pFontEncoding(nullptr), - m_pCharWidthMap(nullptr), - m_pRectArray(nullptr), - m_pBBoxMap(nullptr), m_pProvider(nullptr) { } @@ -96,12 +90,6 @@ CFGAS_GEFont::CFGAS_GEFont(const CFGAS_GEFont& src, uint32_t dwFontStyles) m_pFontMgr(src.m_pFontMgr), m_iRefCount(1), m_bExtFont(FALSE), - m_pStream(nullptr), - m_pFileRead(nullptr), - m_pFontEncoding(nullptr), - m_pCharWidthMap(nullptr), - m_pRectArray(nullptr), - m_pBBoxMap(nullptr), m_pProvider(nullptr) { ASSERT(src.m_pFont); m_pFont = new CFX_Font; @@ -125,16 +113,7 @@ CFGAS_GEFont::~CFGAS_GEFont() { m_SubstFonts.RemoveAll(); m_FontMapper.clear(); - if (m_pFileRead) - m_pFileRead->Release(); - if (m_pStream) - m_pStream->Release(); - - delete m_pFontEncoding; - delete m_pCharWidthMap; - delete m_pRectArray; - delete m_pBBoxMap; if (!m_bExtFont) delete m_pFont; } @@ -213,22 +192,17 @@ FX_BOOL CFGAS_GEFont::LoadFontInternal(const uint8_t* pBuffer, int32_t length) { FX_BOOL CFGAS_GEFont::LoadFontInternal(IFX_Stream* pFontStream, FX_BOOL bSaveStream) { - if (m_pFont || m_pFileRead || !pFontStream || pFontStream->GetLength() < 1) { + if (m_pFont || m_pFileRead || !pFontStream || pFontStream->GetLength() < 1) return FALSE; - } - if (bSaveStream) { - m_pStream = pFontStream; - } - m_pFileRead = FX_CreateFileRead(pFontStream, FALSE); + if (bSaveStream) + m_pStream.reset(pFontStream); + + m_pFileRead.reset(FX_CreateFileRead(pFontStream, FALSE)); m_pFont = new CFX_Font; - FX_BOOL bRet = m_pFont->LoadFile(m_pFileRead); - if (bRet) { - bRet = InitFont(); - } else { - m_pFileRead->Release(); - m_pFileRead = nullptr; - } - return bRet; + if (m_pFont->LoadFile(m_pFileRead.get())) + return InitFont(); + m_pFileRead.reset(); + return FALSE; } #endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ @@ -245,16 +219,16 @@ FX_BOOL CFGAS_GEFont::InitFont() { if (!m_pFont) return FALSE; if (!m_pFontEncoding) { - m_pFontEncoding = FX_CreateFontEncodingEx(m_pFont); + m_pFontEncoding.reset(FX_CreateFontEncodingEx(m_pFont)); if (!m_pFontEncoding) return FALSE; } if (!m_pCharWidthMap) - m_pCharWidthMap = new CFX_DiscreteArrayTemplate(1024); + m_pCharWidthMap.reset(new CFX_DiscreteArrayTemplate(1024)); if (!m_pRectArray) - m_pRectArray = new CFX_MassArrayTemplate(16); + m_pRectArray.reset(new CFX_MassArrayTemplate(16)); if (!m_pBBoxMap) - m_pBBoxMap = new CFX_MapPtrToPtr(16); + m_pBBoxMap.reset(new CFX_MapPtrToPtr(16)); return TRUE; } diff --git a/xfa/fgas/font/fgas_gefont.h b/xfa/fgas/font/fgas_gefont.h index a94583fa65..37aa03eda9 100644 --- a/xfa/fgas/font/fgas_gefont.h +++ b/xfa/fgas/font/fgas_gefont.h @@ -9,6 +9,7 @@ #include +#include "core/fxcrt/include/fx_memory.h" #include "xfa/fgas/crt/fgas_utils.h" #include "xfa/fgas/font/fgas_font.h" @@ -92,16 +93,16 @@ class CFGAS_GEFont { uint32_t m_dwLogFontStyle; #endif CFX_Font* m_pFont; - IFGAS_FontMgr* m_pFontMgr; + IFGAS_FontMgr* const m_pFontMgr; int32_t m_iRefCount; FX_BOOL m_bExtFont; - IFX_Stream* m_pStream; - IFX_FileRead* m_pFileRead; - CFX_UnicodeEncoding* m_pFontEncoding; - CFX_DiscreteArrayTemplate* m_pCharWidthMap; - CFX_MassArrayTemplate* m_pRectArray; - CFX_MapPtrToPtr* m_pBBoxMap; - CXFA_PDFFontMgr* m_pProvider; + std::unique_ptr> m_pStream; + std::unique_ptr> m_pFileRead; + std::unique_ptr m_pFontEncoding; + std::unique_ptr> m_pCharWidthMap; + std::unique_ptr> m_pRectArray; + std::unique_ptr m_pBBoxMap; + CXFA_PDFFontMgr* m_pProvider; // not owned. CFX_ArrayTemplate m_SubstFonts; std::map m_FontMapper; }; -- cgit v1.2.3