Index: core/fxcrt/fx_basic_maps.cpp |
diff --git a/core/fxcrt/fx_basic_maps.cpp b/core/fxcrt/fx_basic_maps.cpp |
deleted file mode 100644 |
index 149951aa2ee4f6c103a08902fb932dceaf9c29dc..0000000000000000000000000000000000000000 |
--- a/core/fxcrt/fx_basic_maps.cpp |
+++ /dev/null |
@@ -1,158 +0,0 @@ |
-// Copyright 2014 PDFium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
- |
-#include "core/fxcrt/fx_basic.h" |
-#include "core/fxcrt/plex.h" |
- |
-CFX_MapPtrToPtr::CFX_MapPtrToPtr(int nBlockSize) |
- : m_pHashTable(nullptr), |
- m_nHashTableSize(17), |
- m_nCount(0), |
- m_pFreeList(nullptr), |
- m_pBlocks(nullptr), |
- m_nBlockSize(nBlockSize) { |
- ASSERT(m_nBlockSize > 0); |
-} |
- |
-void CFX_MapPtrToPtr::RemoveAll() { |
- FX_Free(m_pHashTable); |
- m_pHashTable = nullptr; |
- m_nCount = 0; |
- m_pFreeList = nullptr; |
- if (m_pBlocks) { |
- m_pBlocks->FreeDataChain(); |
- m_pBlocks = nullptr; |
- } |
-} |
- |
-CFX_MapPtrToPtr::~CFX_MapPtrToPtr() { |
- RemoveAll(); |
- ASSERT(m_nCount == 0); |
-} |
-uint32_t CFX_MapPtrToPtr::HashKey(void* key) const { |
- return ((uint32_t)(uintptr_t)key) >> 4; |
-} |
-void CFX_MapPtrToPtr::GetNextAssoc(FX_POSITION& rNextPosition, |
- void*& rKey, |
- void*& rValue) const { |
- ASSERT(m_pHashTable); |
- CAssoc* pAssocRet = (CAssoc*)rNextPosition; |
- ASSERT(pAssocRet); |
- if (pAssocRet == (CAssoc*)-1) { |
- for (uint32_t nBucket = 0; nBucket < m_nHashTableSize; nBucket++) { |
- pAssocRet = m_pHashTable[nBucket]; |
- if (pAssocRet) |
- break; |
- } |
- ASSERT(pAssocRet); |
- } |
- CAssoc* pAssocNext = pAssocRet->pNext; |
- for (uint32_t nBucket = (HashKey(pAssocRet->key) % m_nHashTableSize) + 1; |
- nBucket < m_nHashTableSize && !pAssocNext; nBucket++) { |
- pAssocNext = m_pHashTable[nBucket]; |
- } |
- rNextPosition = (FX_POSITION)pAssocNext; |
- rKey = pAssocRet->key; |
- rValue = pAssocRet->value; |
-} |
-bool CFX_MapPtrToPtr::Lookup(void* key, void*& rValue) const { |
- uint32_t nHash; |
- CAssoc* pAssoc = GetAssocAt(key, nHash); |
- if (!pAssoc) { |
- return false; |
- } |
- rValue = pAssoc->value; |
- return true; |
-} |
- |
-void* CFX_MapPtrToPtr::GetValueAt(void* key) const { |
- uint32_t nHash; |
- CAssoc* pAssoc = GetAssocAt(key, nHash); |
- return pAssoc ? pAssoc->value : nullptr; |
-} |
- |
-void*& CFX_MapPtrToPtr::operator[](void* key) { |
- uint32_t nHash; |
- CAssoc* pAssoc = GetAssocAt(key, nHash); |
- if (!pAssoc) { |
- if (!m_pHashTable) |
- InitHashTable(m_nHashTableSize); |
- pAssoc = NewAssoc(); |
- pAssoc->key = key; |
- pAssoc->pNext = m_pHashTable[nHash]; |
- m_pHashTable[nHash] = pAssoc; |
- } |
- return pAssoc->value; |
-} |
-CFX_MapPtrToPtr::CAssoc* CFX_MapPtrToPtr::GetAssocAt(void* key, |
- uint32_t& nHash) const { |
- nHash = HashKey(key) % m_nHashTableSize; |
- if (!m_pHashTable) { |
- return nullptr; |
- } |
- CAssoc* pAssoc; |
- for (pAssoc = m_pHashTable[nHash]; pAssoc; pAssoc = pAssoc->pNext) { |
- if (pAssoc->key == key) |
- return pAssoc; |
- } |
- return nullptr; |
-} |
-CFX_MapPtrToPtr::CAssoc* CFX_MapPtrToPtr::NewAssoc() { |
- if (!m_pFreeList) { |
- CFX_Plex* newBlock = CFX_Plex::Create(m_pBlocks, m_nBlockSize, |
- sizeof(CFX_MapPtrToPtr::CAssoc)); |
- CFX_MapPtrToPtr::CAssoc* pAssoc = |
- (CFX_MapPtrToPtr::CAssoc*)newBlock->data(); |
- pAssoc += m_nBlockSize - 1; |
- for (int i = m_nBlockSize - 1; i >= 0; i--, pAssoc--) { |
- pAssoc->pNext = m_pFreeList; |
- m_pFreeList = pAssoc; |
- } |
- } |
- CFX_MapPtrToPtr::CAssoc* pAssoc = m_pFreeList; |
- m_pFreeList = m_pFreeList->pNext; |
- m_nCount++; |
- ASSERT(m_nCount > 0); |
- pAssoc->key = 0; |
- pAssoc->value = 0; |
- return pAssoc; |
-} |
-void CFX_MapPtrToPtr::InitHashTable(uint32_t nHashSize, bool bAllocNow) { |
- ASSERT(m_nCount == 0); |
- ASSERT(nHashSize > 0); |
- FX_Free(m_pHashTable); |
- m_pHashTable = nullptr; |
- if (bAllocNow) { |
- m_pHashTable = FX_Alloc(CAssoc*, nHashSize); |
- } |
- m_nHashTableSize = nHashSize; |
-} |
-bool CFX_MapPtrToPtr::RemoveKey(void* key) { |
- if (!m_pHashTable) { |
- return false; |
- } |
- CAssoc** ppAssocPrev; |
- ppAssocPrev = &m_pHashTable[HashKey(key) % m_nHashTableSize]; |
- CAssoc* pAssoc; |
- for (pAssoc = *ppAssocPrev; pAssoc; pAssoc = pAssoc->pNext) { |
- if (pAssoc->key == key) { |
- *ppAssocPrev = pAssoc->pNext; |
- FreeAssoc(pAssoc); |
- return true; |
- } |
- ppAssocPrev = &pAssoc->pNext; |
- } |
- return false; |
-} |
-void CFX_MapPtrToPtr::FreeAssoc(CFX_MapPtrToPtr::CAssoc* pAssoc) { |
- pAssoc->pNext = m_pFreeList; |
- m_pFreeList = pAssoc; |
- m_nCount--; |
- ASSERT(m_nCount >= 0); |
- if (m_nCount == 0) { |
- RemoveAll(); |
- } |
-} |