diff options
Diffstat (limited to 'core/fxcrt/fx_basic_maps.cpp')
-rw-r--r-- | core/fxcrt/fx_basic_maps.cpp | 158 |
1 files changed, 0 insertions, 158 deletions
diff --git a/core/fxcrt/fx_basic_maps.cpp b/core/fxcrt/fx_basic_maps.cpp deleted file mode 100644 index 149951aa2e..0000000000 --- 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(); - } -} |