From e8d3691c82d1be805ffdce3329d00313af7ce0ab Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Fri, 19 Jun 2015 15:09:45 -0700 Subject: Replace CFX_MapPtrTemplate with std::map. R=tsepez@chromium.org Review URL: https://codereview.chromium.org/1181593003. --- core/src/fxge/ge/fx_ge_text.cpp | 76 ++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 35 deletions(-) (limited to 'core/src/fxge/ge') diff --git a/core/src/fxge/ge/fx_ge_text.cpp b/core/src/fxge/ge/fx_ge_text.cpp index b55119b915..d15db7b43f 100644 --- a/core/src/fxge/ge/fx_ge_text.cpp +++ b/core/src/fxge/ge/fx_ge_text.cpp @@ -1002,64 +1002,70 @@ CFX_FontCache::~CFX_FontCache() { FreeCache(TRUE); } + CFX_FaceCache* CFX_FontCache::GetCachedFace(CFX_Font* pFont) { - FX_BOOL bExternal = pFont->GetFace() == NULL; - void* face = bExternal ? pFont->GetSubstFont()->m_ExtHandle : pFont->GetFace(); - CFX_FTCacheMap& map = bExternal ? m_ExtFaceMap : m_FTFaceMap; - CFX_CountedFaceCache* counted_face_cache = NULL; - if (map.Lookup((FXFT_Face)face, counted_face_cache)) { + FXFT_Face internal_face = pFont->GetFace(); + const FX_BOOL bExternal = internal_face == nullptr; + FXFT_Face face = bExternal ? + (FXFT_Face)pFont->GetSubstFont()->m_ExtHandle : internal_face; + CFX_FTCacheMap& map = bExternal ? m_ExtFaceMap : m_FTFaceMap; + auto it = map.find(face); + if (it != map.end()) { + CFX_CountedFaceCache* counted_face_cache = it->second; counted_face_cache->m_nCount++; return counted_face_cache->m_Obj; } - CFX_FaceCache* face_cache = new CFX_FaceCache(bExternal ? NULL : (FXFT_Face)face); - counted_face_cache = new CFX_CountedFaceCache; + + CFX_FaceCache* face_cache = new CFX_FaceCache(bExternal ? nullptr : face); + CFX_CountedFaceCache* counted_face_cache = new CFX_CountedFaceCache; counted_face_cache->m_nCount = 2; counted_face_cache->m_Obj = face_cache; - map.SetAt((FXFT_Face)face, counted_face_cache); + map[face] = counted_face_cache; return face_cache; } + void CFX_FontCache::ReleaseCachedFace(CFX_Font* pFont) { - FX_BOOL bExternal = pFont->GetFace() == NULL; - void* face = bExternal ? pFont->GetSubstFont()->m_ExtHandle : pFont->GetFace(); + FXFT_Face internal_face = pFont->GetFace(); + const FX_BOOL bExternal = internal_face == nullptr; + FXFT_Face face = bExternal ? + (FXFT_Face)pFont->GetSubstFont()->m_ExtHandle : internal_face; CFX_FTCacheMap& map = bExternal ? m_ExtFaceMap : m_FTFaceMap; - CFX_CountedFaceCache* counted_face_cache = NULL; - if (!map.Lookup((FXFT_Face)face, counted_face_cache)) { + + auto it = map.find(face); + if (it == map.end()) return; - } + + CFX_CountedFaceCache* counted_face_cache = it->second; if (counted_face_cache->m_nCount > 1) { counted_face_cache->m_nCount--; } } + void CFX_FontCache::FreeCache(FX_BOOL bRelease) { - { - FX_POSITION pos; - pos = m_FTFaceMap.GetStartPosition(); - while (pos) { - FXFT_Face face; - CFX_CountedFaceCache* cache; - m_FTFaceMap.GetNextAssoc(pos, face, cache); - if (bRelease || cache->m_nCount < 2) { - delete cache->m_Obj; - delete cache; - m_FTFaceMap.RemoveKey(face); - } + for (auto it = m_FTFaceMap.begin(); it != m_FTFaceMap.end();) { + auto curr_it = it++; + CFX_CountedFaceCache* cache = curr_it->second; + if (bRelease || cache->m_nCount < 2) { + delete cache->m_Obj; + delete cache; + m_FTFaceMap.erase(curr_it); } - pos = m_ExtFaceMap.GetStartPosition(); - while (pos) { - FXFT_Face face; - CFX_CountedFaceCache* cache; - m_ExtFaceMap.GetNextAssoc(pos, face, cache); - if (bRelease || cache->m_nCount < 2) { - delete cache->m_Obj; - delete cache; - m_ExtFaceMap.RemoveKey(face); - } + } + + for (auto it = m_ExtFaceMap.begin(); it != m_ExtFaceMap.end();) { + auto curr_it = it++; + CFX_CountedFaceCache* cache = curr_it->second; + if (bRelease || cache->m_nCount < 2) { + delete cache->m_Obj; + delete cache; + m_ExtFaceMap.erase(curr_it); } } } + CFX_FaceCache::CFX_FaceCache(FXFT_Face face) { m_Face = face; -- cgit v1.2.3