From 9d8ec5a6e37e8d1d4d4edca9040de234e2d4728f Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Tue, 4 Aug 2015 13:00:21 -0700 Subject: XFA: clang-format all pdfium code. No behavior change. Generated by: find . -name '*.cpp' -o -name '*.h' | \ grep -E -v 'third_party|thirdparties|lpng_v163|tiff_v403' | \ xargs ../../buildtools/mac/clang-format -i Then manually merged https://codereview.chromium.org/1269223002/ See thread "tabs vs spaces" on pdfium@googlegroups.com for discussion. BUG=none --- core/src/fxcrt/fx_basic_maps.cpp | 1158 +++++++++++++++++++------------------- 1 file changed, 566 insertions(+), 592 deletions(-) (limited to 'core/src/fxcrt/fx_basic_maps.cpp') diff --git a/core/src/fxcrt/fx_basic_maps.cpp b/core/src/fxcrt/fx_basic_maps.cpp index e34acb088d..14a681b832 100644 --- a/core/src/fxcrt/fx_basic_maps.cpp +++ b/core/src/fxcrt/fx_basic_maps.cpp @@ -7,636 +7,610 @@ #include "../../include/fxcrt/fx_basic.h" #include "plex.h" -static void ConstructElement(CFX_ByteString* pNewData) -{ - new (pNewData) CFX_ByteString(); +static void ConstructElement(CFX_ByteString* pNewData) { + new (pNewData) CFX_ByteString(); } -static void DestructElement(CFX_ByteString* pOldData) -{ - pOldData->~CFX_ByteString(); +static void DestructElement(CFX_ByteString* pOldData) { + pOldData->~CFX_ByteString(); } CFX_MapPtrToPtr::CFX_MapPtrToPtr(int nBlockSize) - : m_pHashTable(NULL) - , m_nHashTableSize(17) - , m_nCount(0) - , m_pFreeList(NULL) - , m_pBlocks(NULL) - , m_nBlockSize(nBlockSize) -{ - ASSERT(m_nBlockSize > 0); -} -void CFX_MapPtrToPtr::RemoveAll() -{ - if (m_pHashTable) { - FX_Free(m_pHashTable); - m_pHashTable = NULL; - } - m_nCount = 0; - m_pFreeList = NULL; - m_pBlocks->FreeDataChain(); - m_pBlocks = NULL; -} -CFX_MapPtrToPtr::~CFX_MapPtrToPtr() -{ - RemoveAll(); - ASSERT(m_nCount == 0); -} -FX_DWORD CFX_MapPtrToPtr::HashKey(void* key) const -{ - return ((FX_DWORD)(uintptr_t)key) >> 4; -} -void CFX_MapPtrToPtr::GetNextAssoc(FX_POSITION& rNextPosition, void*& rKey, void*& rValue) const -{ - ASSERT(m_pHashTable != NULL); - CAssoc* pAssocRet = (CAssoc*)rNextPosition; + : m_pHashTable(NULL), + m_nHashTableSize(17), + m_nCount(0), + m_pFreeList(NULL), + m_pBlocks(NULL), + m_nBlockSize(nBlockSize) { + ASSERT(m_nBlockSize > 0); +} +void CFX_MapPtrToPtr::RemoveAll() { + if (m_pHashTable) { + FX_Free(m_pHashTable); + m_pHashTable = NULL; + } + m_nCount = 0; + m_pFreeList = NULL; + m_pBlocks->FreeDataChain(); + m_pBlocks = NULL; +} +CFX_MapPtrToPtr::~CFX_MapPtrToPtr() { + RemoveAll(); + ASSERT(m_nCount == 0); +} +FX_DWORD CFX_MapPtrToPtr::HashKey(void* key) const { + return ((FX_DWORD)(uintptr_t)key) >> 4; +} +void CFX_MapPtrToPtr::GetNextAssoc(FX_POSITION& rNextPosition, + void*& rKey, + void*& rValue) const { + ASSERT(m_pHashTable != NULL); + CAssoc* pAssocRet = (CAssoc*)rNextPosition; + ASSERT(pAssocRet != NULL); + if (pAssocRet == (CAssoc*)-1) { + for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++) + if ((pAssocRet = m_pHashTable[nBucket]) != NULL) { + break; + } ASSERT(pAssocRet != NULL); - if (pAssocRet == (CAssoc*) - 1) { - for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++) - if ((pAssocRet = m_pHashTable[nBucket]) != NULL) { - break; - } - ASSERT(pAssocRet != NULL); - } - CAssoc* pAssocNext; - if ((pAssocNext = pAssocRet->pNext) == NULL) { - for (FX_DWORD nBucket = (HashKey(pAssocRet->key) % m_nHashTableSize) + 1; nBucket < m_nHashTableSize; nBucket ++) { - if ((pAssocNext = m_pHashTable[nBucket]) != NULL) { - break; - } - } - } - rNextPosition = (FX_POSITION) pAssocNext; - rKey = pAssocRet->key; - rValue = pAssocRet->value; -} -FX_BOOL CFX_MapPtrToPtr::Lookup(void* key, void*& rValue) const -{ - FX_DWORD nHash; - CAssoc* pAssoc = GetAssocAt(key, nHash); - if (pAssoc == NULL) { - return FALSE; - } - rValue = pAssoc->value; - return TRUE; -} -void* CFX_MapPtrToPtr::GetValueAt(void* key) const -{ - FX_DWORD nHash; - CAssoc* pAssoc = GetAssocAt(key, nHash); - if (pAssoc == NULL) { - return NULL; - } - return pAssoc->value; -} -void*& CFX_MapPtrToPtr::operator[](void* key) -{ - FX_DWORD nHash; - CAssoc* pAssoc; - if ((pAssoc = GetAssocAt(key, nHash)) == NULL) { - if (m_pHashTable == NULL) { - 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, FX_DWORD& nHash) const -{ - nHash = HashKey(key) % m_nHashTableSize; - if (m_pHashTable == NULL) { - return NULL; - } - CAssoc* pAssoc; - for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext) { - if (pAssoc->key == key) { - return pAssoc; - } - } + } + CAssoc* pAssocNext; + if ((pAssocNext = pAssocRet->pNext) == NULL) { + for (FX_DWORD nBucket = (HashKey(pAssocRet->key) % m_nHashTableSize) + 1; + nBucket < m_nHashTableSize; nBucket++) { + if ((pAssocNext = m_pHashTable[nBucket]) != NULL) { + break; + } + } + } + rNextPosition = (FX_POSITION)pAssocNext; + rKey = pAssocRet->key; + rValue = pAssocRet->value; +} +FX_BOOL CFX_MapPtrToPtr::Lookup(void* key, void*& rValue) const { + FX_DWORD nHash; + CAssoc* pAssoc = GetAssocAt(key, nHash); + if (pAssoc == NULL) { + return FALSE; + } + rValue = pAssoc->value; + return TRUE; +} +void* CFX_MapPtrToPtr::GetValueAt(void* key) const { + FX_DWORD nHash; + CAssoc* pAssoc = GetAssocAt(key, nHash); + if (pAssoc == NULL) { return NULL; + } + return pAssoc->value; } -CFX_MapPtrToPtr::CAssoc* -CFX_MapPtrToPtr::NewAssoc() -{ - if (m_pFreeList == NULL) { - 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; - } - } - ASSERT(m_pFreeList != NULL); - 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( - FX_DWORD nHashSize, FX_BOOL bAllocNow) -{ - ASSERT(m_nCount == 0); - ASSERT(nHashSize > 0); - if (m_pHashTable != NULL) { - FX_Free(m_pHashTable); - m_pHashTable = NULL; - } - if (bAllocNow) { - m_pHashTable = FX_Alloc(CAssoc*, nHashSize); - } - m_nHashTableSize = nHashSize; -} -FX_BOOL CFX_MapPtrToPtr::RemoveKey(void* key) -{ +void*& CFX_MapPtrToPtr::operator[](void* key) { + FX_DWORD nHash; + CAssoc* pAssoc; + if ((pAssoc = GetAssocAt(key, nHash)) == NULL) { if (m_pHashTable == NULL) { - return FALSE; - } - CAssoc** ppAssocPrev; - ppAssocPrev = &m_pHashTable[HashKey(key) % m_nHashTableSize]; - CAssoc* pAssoc; - for (pAssoc = *ppAssocPrev; pAssoc != NULL; pAssoc = pAssoc->pNext) { - if (pAssoc->key == key) { - *ppAssocPrev = pAssoc->pNext; - FreeAssoc(pAssoc); - return TRUE; - } - ppAssocPrev = &pAssoc->pNext; - } + 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, + FX_DWORD& nHash) const { + nHash = HashKey(key) % m_nHashTableSize; + if (m_pHashTable == NULL) { + return NULL; + } + CAssoc* pAssoc; + for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext) { + if (pAssoc->key == key) { + return pAssoc; + } + } + return NULL; +} +CFX_MapPtrToPtr::CAssoc* CFX_MapPtrToPtr::NewAssoc() { + if (m_pFreeList == NULL) { + 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; + } + } + ASSERT(m_pFreeList != NULL); + 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(FX_DWORD nHashSize, FX_BOOL bAllocNow) { + ASSERT(m_nCount == 0); + ASSERT(nHashSize > 0); + if (m_pHashTable != NULL) { + FX_Free(m_pHashTable); + m_pHashTable = NULL; + } + if (bAllocNow) { + m_pHashTable = FX_Alloc(CAssoc*, nHashSize); + } + m_nHashTableSize = nHashSize; +} +FX_BOOL CFX_MapPtrToPtr::RemoveKey(void* key) { + if (m_pHashTable == NULL) { 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(); - } + } + CAssoc** ppAssocPrev; + ppAssocPrev = &m_pHashTable[HashKey(key) % m_nHashTableSize]; + CAssoc* pAssoc; + for (pAssoc = *ppAssocPrev; pAssoc != NULL; 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(); + } } CFX_MapByteStringToPtr::CFX_MapByteStringToPtr(int nBlockSize) - : m_pHashTable(NULL) - , m_nHashTableSize(17) - , m_nCount(0) - , m_pFreeList(NULL) - , m_pBlocks(NULL) - , m_nBlockSize(nBlockSize) -{ - ASSERT(m_nBlockSize > 0); -} -void CFX_MapByteStringToPtr::RemoveAll() -{ - if (m_pHashTable != NULL) { - for (FX_DWORD nHash = 0; nHash < m_nHashTableSize; nHash++) { - CAssoc* pAssoc; - for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; - pAssoc = pAssoc->pNext) { - DestructElement(&pAssoc->key); - } - } - FX_Free(m_pHashTable); - m_pHashTable = NULL; - } - m_nCount = 0; - m_pFreeList = NULL; - m_pBlocks->FreeDataChain(); - m_pBlocks = NULL; -} -CFX_MapByteStringToPtr::~CFX_MapByteStringToPtr() -{ - RemoveAll(); - ASSERT(m_nCount == 0); + : m_pHashTable(NULL), + m_nHashTableSize(17), + m_nCount(0), + m_pFreeList(NULL), + m_pBlocks(NULL), + m_nBlockSize(nBlockSize) { + ASSERT(m_nBlockSize > 0); +} +void CFX_MapByteStringToPtr::RemoveAll() { + if (m_pHashTable != NULL) { + for (FX_DWORD nHash = 0; nHash < m_nHashTableSize; nHash++) { + CAssoc* pAssoc; + for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; + pAssoc = pAssoc->pNext) { + DestructElement(&pAssoc->key); + } + } + FX_Free(m_pHashTable); + m_pHashTable = NULL; + } + m_nCount = 0; + m_pFreeList = NULL; + m_pBlocks->FreeDataChain(); + m_pBlocks = NULL; +} +CFX_MapByteStringToPtr::~CFX_MapByteStringToPtr() { + RemoveAll(); + ASSERT(m_nCount == 0); } void CFX_MapByteStringToPtr::GetNextAssoc(FX_POSITION& rNextPosition, - CFX_ByteString& rKey, void*& rValue) const -{ - ASSERT(m_pHashTable != NULL); - CAssoc* pAssocRet = (CAssoc*)rNextPosition; + CFX_ByteString& rKey, + void*& rValue) const { + ASSERT(m_pHashTable != NULL); + CAssoc* pAssocRet = (CAssoc*)rNextPosition; + ASSERT(pAssocRet != NULL); + if (pAssocRet == (CAssoc*)-1) { + for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++) + if ((pAssocRet = m_pHashTable[nBucket]) != NULL) { + break; + } ASSERT(pAssocRet != NULL); - if (pAssocRet == (CAssoc*) - 1) { - for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++) - if ((pAssocRet = m_pHashTable[nBucket]) != NULL) { - break; - } - ASSERT(pAssocRet != NULL); - } - CAssoc* pAssocNext; - if ((pAssocNext = pAssocRet->pNext) == NULL) { - for (FX_DWORD nBucket = pAssocRet->nHashValue + 1; - nBucket < m_nHashTableSize; nBucket++) - if ((pAssocNext = m_pHashTable[nBucket]) != NULL) { - break; - } - } - rNextPosition = (FX_POSITION) pAssocNext; - rKey = pAssocRet->key; - rValue = pAssocRet->value; -} -void* CFX_MapByteStringToPtr::GetNextValue(FX_POSITION& rNextPosition) const -{ - ASSERT(m_pHashTable != NULL); - CAssoc* pAssocRet = (CAssoc*)rNextPosition; + } + CAssoc* pAssocNext; + if ((pAssocNext = pAssocRet->pNext) == NULL) { + for (FX_DWORD nBucket = pAssocRet->nHashValue + 1; + nBucket < m_nHashTableSize; nBucket++) + if ((pAssocNext = m_pHashTable[nBucket]) != NULL) { + break; + } + } + rNextPosition = (FX_POSITION)pAssocNext; + rKey = pAssocRet->key; + rValue = pAssocRet->value; +} +void* CFX_MapByteStringToPtr::GetNextValue(FX_POSITION& rNextPosition) const { + ASSERT(m_pHashTable != NULL); + CAssoc* pAssocRet = (CAssoc*)rNextPosition; + ASSERT(pAssocRet != NULL); + if (pAssocRet == (CAssoc*)-1) { + for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++) + if ((pAssocRet = m_pHashTable[nBucket]) != NULL) { + break; + } ASSERT(pAssocRet != NULL); - if (pAssocRet == (CAssoc*) - 1) { - for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++) - if ((pAssocRet = m_pHashTable[nBucket]) != NULL) { - break; - } - ASSERT(pAssocRet != NULL); - } - CAssoc* pAssocNext; - if ((pAssocNext = pAssocRet->pNext) == NULL) { - for (FX_DWORD nBucket = pAssocRet->nHashValue + 1; - nBucket < m_nHashTableSize; nBucket++) - if ((pAssocNext = m_pHashTable[nBucket]) != NULL) { - break; - } - } - rNextPosition = (FX_POSITION) pAssocNext; - return pAssocRet->value; -} -void*& CFX_MapByteStringToPtr::operator[](const CFX_ByteStringC& key) -{ - FX_DWORD nHash; - CAssoc* pAssoc; - if ((pAssoc = GetAssocAt(key, nHash)) == NULL) { - if (m_pHashTable == NULL) { - InitHashTable(m_nHashTableSize); - } - pAssoc = NewAssoc(); - pAssoc->nHashValue = nHash; - pAssoc->key = key; - pAssoc->pNext = m_pHashTable[nHash]; - m_pHashTable[nHash] = pAssoc; - } - return pAssoc->value; -} -CFX_MapByteStringToPtr::CAssoc* -CFX_MapByteStringToPtr::NewAssoc() -{ - if (m_pFreeList == NULL) { - CFX_Plex* newBlock = CFX_Plex::Create(m_pBlocks, m_nBlockSize, sizeof(CFX_MapByteStringToPtr::CAssoc)); - CFX_MapByteStringToPtr::CAssoc* pAssoc = (CFX_MapByteStringToPtr::CAssoc*)newBlock->data(); - pAssoc += m_nBlockSize - 1; - for (int i = m_nBlockSize - 1; i >= 0; i--, pAssoc--) { - pAssoc->pNext = m_pFreeList; - m_pFreeList = pAssoc; - } - } - ASSERT(m_pFreeList != NULL); - CFX_MapByteStringToPtr::CAssoc* pAssoc = m_pFreeList; - m_pFreeList = m_pFreeList->pNext; - m_nCount++; - ASSERT(m_nCount > 0); - ConstructElement(&pAssoc->key); - pAssoc->value = 0; - return pAssoc; -} -void CFX_MapByteStringToPtr::FreeAssoc(CFX_MapByteStringToPtr::CAssoc* pAssoc) -{ - DestructElement(&pAssoc->key); - pAssoc->pNext = m_pFreeList; - m_pFreeList = pAssoc; - m_nCount--; - ASSERT(m_nCount >= 0); - if (m_nCount == 0) { - RemoveAll(); - } -} -CFX_MapByteStringToPtr::CAssoc* -CFX_MapByteStringToPtr::GetAssocAt(const CFX_ByteStringC& key, FX_DWORD& nHash) const -{ - nHash = HashKey(key) % m_nHashTableSize; + } + CAssoc* pAssocNext; + if ((pAssocNext = pAssocRet->pNext) == NULL) { + for (FX_DWORD nBucket = pAssocRet->nHashValue + 1; + nBucket < m_nHashTableSize; nBucket++) + if ((pAssocNext = m_pHashTable[nBucket]) != NULL) { + break; + } + } + rNextPosition = (FX_POSITION)pAssocNext; + return pAssocRet->value; +} +void*& CFX_MapByteStringToPtr::operator[](const CFX_ByteStringC& key) { + FX_DWORD nHash; + CAssoc* pAssoc; + if ((pAssoc = GetAssocAt(key, nHash)) == NULL) { if (m_pHashTable == NULL) { - return NULL; - } - CAssoc* pAssoc; - for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext) { - if (pAssoc->key == key) { - return pAssoc; - } - } - return NULL; -} -FX_BOOL CFX_MapByteStringToPtr::Lookup(const CFX_ByteStringC& key, void*& rValue) const -{ - FX_DWORD nHash; - CAssoc* pAssoc = GetAssocAt(key, nHash); - if (pAssoc == NULL) { - return FALSE; - } - rValue = pAssoc->value; - return TRUE; -} -void CFX_MapByteStringToPtr::InitHashTable( - FX_DWORD nHashSize, FX_BOOL bAllocNow) -{ - ASSERT(m_nCount == 0); - ASSERT(nHashSize > 0); - if (m_pHashTable != NULL) { - FX_Free(m_pHashTable); - m_pHashTable = NULL; - } - if (bAllocNow) { - m_pHashTable = FX_Alloc(CAssoc*, nHashSize); - } - m_nHashTableSize = nHashSize; -} -inline FX_DWORD CFX_MapByteStringToPtr::HashKey(const CFX_ByteStringC& key) const -{ - FX_DWORD nHash = 0; - int len = key.GetLength(); - const uint8_t* buf = key.GetPtr(); - for (int i = 0; i < len; i ++) { - nHash = (nHash << 5) + nHash + buf[i]; - } - return nHash; + InitHashTable(m_nHashTableSize); + } + pAssoc = NewAssoc(); + pAssoc->nHashValue = nHash; + pAssoc->key = key; + pAssoc->pNext = m_pHashTable[nHash]; + m_pHashTable[nHash] = pAssoc; + } + return pAssoc->value; +} +CFX_MapByteStringToPtr::CAssoc* CFX_MapByteStringToPtr::NewAssoc() { + if (m_pFreeList == NULL) { + CFX_Plex* newBlock = CFX_Plex::Create( + m_pBlocks, m_nBlockSize, sizeof(CFX_MapByteStringToPtr::CAssoc)); + CFX_MapByteStringToPtr::CAssoc* pAssoc = + (CFX_MapByteStringToPtr::CAssoc*)newBlock->data(); + pAssoc += m_nBlockSize - 1; + for (int i = m_nBlockSize - 1; i >= 0; i--, pAssoc--) { + pAssoc->pNext = m_pFreeList; + m_pFreeList = pAssoc; + } + } + ASSERT(m_pFreeList != NULL); + CFX_MapByteStringToPtr::CAssoc* pAssoc = m_pFreeList; + m_pFreeList = m_pFreeList->pNext; + m_nCount++; + ASSERT(m_nCount > 0); + ConstructElement(&pAssoc->key); + pAssoc->value = 0; + return pAssoc; +} +void CFX_MapByteStringToPtr::FreeAssoc(CFX_MapByteStringToPtr::CAssoc* pAssoc) { + DestructElement(&pAssoc->key); + pAssoc->pNext = m_pFreeList; + m_pFreeList = pAssoc; + m_nCount--; + ASSERT(m_nCount >= 0); + if (m_nCount == 0) { + RemoveAll(); + } } -FX_BOOL CFX_MapByteStringToPtr::RemoveKey(const CFX_ByteStringC& key) -{ - if (m_pHashTable == NULL) { - return FALSE; - } - CAssoc** ppAssocPrev; - ppAssocPrev = &m_pHashTable[HashKey(key) % m_nHashTableSize]; - CAssoc* pAssoc; - for (pAssoc = *ppAssocPrev; pAssoc != NULL; pAssoc = pAssoc->pNext) { - if (pAssoc->key == key) { - *ppAssocPrev = pAssoc->pNext; - FreeAssoc(pAssoc); - return TRUE; - } - ppAssocPrev = &pAssoc->pNext; - } +CFX_MapByteStringToPtr::CAssoc* CFX_MapByteStringToPtr::GetAssocAt( + const CFX_ByteStringC& key, + FX_DWORD& nHash) const { + nHash = HashKey(key) % m_nHashTableSize; + if (m_pHashTable == NULL) { + return NULL; + } + CAssoc* pAssoc; + for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext) { + if (pAssoc->key == key) { + return pAssoc; + } + } + return NULL; +} +FX_BOOL CFX_MapByteStringToPtr::Lookup(const CFX_ByteStringC& key, + void*& rValue) const { + FX_DWORD nHash; + CAssoc* pAssoc = GetAssocAt(key, nHash); + if (pAssoc == NULL) { + return FALSE; + } + rValue = pAssoc->value; + return TRUE; +} +void CFX_MapByteStringToPtr::InitHashTable(FX_DWORD nHashSize, + FX_BOOL bAllocNow) { + ASSERT(m_nCount == 0); + ASSERT(nHashSize > 0); + if (m_pHashTable != NULL) { + FX_Free(m_pHashTable); + m_pHashTable = NULL; + } + if (bAllocNow) { + m_pHashTable = FX_Alloc(CAssoc*, nHashSize); + } + m_nHashTableSize = nHashSize; +} +inline FX_DWORD CFX_MapByteStringToPtr::HashKey( + const CFX_ByteStringC& key) const { + FX_DWORD nHash = 0; + int len = key.GetLength(); + const uint8_t* buf = key.GetPtr(); + for (int i = 0; i < len; i++) { + nHash = (nHash << 5) + nHash + buf[i]; + } + return nHash; +} +FX_BOOL CFX_MapByteStringToPtr::RemoveKey(const CFX_ByteStringC& key) { + if (m_pHashTable == NULL) { return FALSE; + } + CAssoc** ppAssocPrev; + ppAssocPrev = &m_pHashTable[HashKey(key) % m_nHashTableSize]; + CAssoc* pAssoc; + for (pAssoc = *ppAssocPrev; pAssoc != NULL; pAssoc = pAssoc->pNext) { + if (pAssoc->key == key) { + *ppAssocPrev = pAssoc->pNext; + FreeAssoc(pAssoc); + return TRUE; + } + ppAssocPrev = &pAssoc->pNext; + } + return FALSE; } struct _CompactString { - uint8_t m_CompactLen; - uint8_t m_LenHigh; - uint8_t m_LenLow; - uint8_t m_Unused; - uint8_t* m_pBuffer; + uint8_t m_CompactLen; + uint8_t m_LenHigh; + uint8_t m_LenLow; + uint8_t m_Unused; + uint8_t* m_pBuffer; }; -static void _CompactStringRelease(_CompactString* pCompact) -{ - if (pCompact->m_CompactLen == 0xff) { - FX_Free(pCompact->m_pBuffer); - } -} -static FX_BOOL _CompactStringSame(_CompactString* pCompact, const uint8_t* pStr, int len) -{ - if (len < sizeof(_CompactString)) { - if (pCompact->m_CompactLen != len) { - return FALSE; - } - return FXSYS_memcmp(&pCompact->m_LenHigh, pStr, len) == 0; - } - if (pCompact->m_CompactLen != 0xff || pCompact->m_LenHigh * 256 + pCompact->m_LenLow != len) { - return FALSE; - } - return FXSYS_memcmp(pCompact->m_pBuffer, pStr, len) == 0; -} -static void _CompactStringStore(_CompactString* pCompact, const uint8_t* pStr, int len) -{ - if (len < (int)sizeof(_CompactString)) { - pCompact->m_CompactLen = (uint8_t)len; - FXSYS_memcpy(&pCompact->m_LenHigh, pStr, len); - return; - } - pCompact->m_CompactLen = 0xff; - pCompact->m_LenHigh = len / 256; - pCompact->m_LenLow = len % 256; - pCompact->m_pBuffer = FX_Alloc(uint8_t, len); - FXSYS_memcpy(pCompact->m_pBuffer, pStr, len); -} -static CFX_ByteStringC _CompactStringGet(_CompactString* pCompact) -{ - if (pCompact->m_CompactLen == 0xff) { - return CFX_ByteStringC(pCompact->m_pBuffer, pCompact->m_LenHigh * 256 + pCompact->m_LenLow); - } - if (pCompact->m_CompactLen == 0xfe) { - return CFX_ByteStringC(); - } - return CFX_ByteStringC(&pCompact->m_LenHigh, pCompact->m_CompactLen); -} -#define CMAP_ALLOC_STEP 8 -#define CMAP_INDEX_SIZE 8 +static void _CompactStringRelease(_CompactString* pCompact) { + if (pCompact->m_CompactLen == 0xff) { + FX_Free(pCompact->m_pBuffer); + } +} +static FX_BOOL _CompactStringSame(_CompactString* pCompact, + const uint8_t* pStr, + int len) { + if (len < sizeof(_CompactString)) { + if (pCompact->m_CompactLen != len) { + return FALSE; + } + return FXSYS_memcmp(&pCompact->m_LenHigh, pStr, len) == 0; + } + if (pCompact->m_CompactLen != 0xff || + pCompact->m_LenHigh * 256 + pCompact->m_LenLow != len) { + return FALSE; + } + return FXSYS_memcmp(pCompact->m_pBuffer, pStr, len) == 0; +} +static void _CompactStringStore(_CompactString* pCompact, + const uint8_t* pStr, + int len) { + if (len < (int)sizeof(_CompactString)) { + pCompact->m_CompactLen = (uint8_t)len; + FXSYS_memcpy(&pCompact->m_LenHigh, pStr, len); + return; + } + pCompact->m_CompactLen = 0xff; + pCompact->m_LenHigh = len / 256; + pCompact->m_LenLow = len % 256; + pCompact->m_pBuffer = FX_Alloc(uint8_t, len); + FXSYS_memcpy(pCompact->m_pBuffer, pStr, len); +} +static CFX_ByteStringC _CompactStringGet(_CompactString* pCompact) { + if (pCompact->m_CompactLen == 0xff) { + return CFX_ByteStringC(pCompact->m_pBuffer, + pCompact->m_LenHigh * 256 + pCompact->m_LenLow); + } + if (pCompact->m_CompactLen == 0xfe) { + return CFX_ByteStringC(); + } + return CFX_ByteStringC(&pCompact->m_LenHigh, pCompact->m_CompactLen); +} +#define CMAP_ALLOC_STEP 8 +#define CMAP_INDEX_SIZE 8 CFX_CMapByteStringToPtr::CFX_CMapByteStringToPtr() - : m_Buffer(sizeof(_CompactString) + sizeof(void*), CMAP_ALLOC_STEP, CMAP_INDEX_SIZE) -{ -} -CFX_CMapByteStringToPtr::~CFX_CMapByteStringToPtr() -{ - RemoveAll(); -} -void CFX_CMapByteStringToPtr::RemoveAll() -{ - int size = m_Buffer.GetSize(); - for (int i = 0; i < size; i++) { - _CompactStringRelease((_CompactString*)m_Buffer.GetAt(i)); - } - m_Buffer.RemoveAll(); -} -FX_POSITION CFX_CMapByteStringToPtr::GetStartPosition() const -{ - int size = m_Buffer.GetSize(); - for (int i = 0; i < size; i ++) { - _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i); - if (pKey->m_CompactLen != 0xfe) { - return (FX_POSITION)(uintptr_t)(i + 1); - } - } + : m_Buffer(sizeof(_CompactString) + sizeof(void*), + CMAP_ALLOC_STEP, + CMAP_INDEX_SIZE) {} +CFX_CMapByteStringToPtr::~CFX_CMapByteStringToPtr() { + RemoveAll(); +} +void CFX_CMapByteStringToPtr::RemoveAll() { + int size = m_Buffer.GetSize(); + for (int i = 0; i < size; i++) { + _CompactStringRelease((_CompactString*)m_Buffer.GetAt(i)); + } + m_Buffer.RemoveAll(); +} +FX_POSITION CFX_CMapByteStringToPtr::GetStartPosition() const { + int size = m_Buffer.GetSize(); + for (int i = 0; i < size; i++) { + _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i); + if (pKey->m_CompactLen != 0xfe) { + return (FX_POSITION)(uintptr_t)(i + 1); + } + } + return NULL; +} +void CFX_CMapByteStringToPtr::GetNextAssoc(FX_POSITION& rNextPosition, + CFX_ByteString& rKey, + void*& rValue) const { + if (rNextPosition == NULL) { + return; + } + int index = (int)(uintptr_t)rNextPosition - 1; + _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); + rKey = _CompactStringGet(pKey); + rValue = *(void**)(pKey + 1); + index++; + int size = m_Buffer.GetSize(); + while (index < size) { + pKey = (_CompactString*)m_Buffer.GetAt(index); + if (pKey->m_CompactLen != 0xfe) { + rNextPosition = (FX_POSITION)(uintptr_t)(index + 1); + return; + } + index++; + } + rNextPosition = NULL; +} +void* CFX_CMapByteStringToPtr::GetNextValue(FX_POSITION& rNextPosition) const { + if (rNextPosition == NULL) { return NULL; -} -void CFX_CMapByteStringToPtr::GetNextAssoc(FX_POSITION& rNextPosition, CFX_ByteString& rKey, void*& rValue) const -{ - if (rNextPosition == NULL) { - return; - } - int index = (int)(uintptr_t)rNextPosition - 1; + } + int index = (int)(uintptr_t)rNextPosition - 1; + _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); + void* rValue = *(void**)(pKey + 1); + index++; + int size = m_Buffer.GetSize(); + while (index < size) { + pKey = (_CompactString*)m_Buffer.GetAt(index); + if (pKey->m_CompactLen != 0xfe) { + rNextPosition = (FX_POSITION)(uintptr_t)(index + 1); + return rValue; + } + index++; + } + rNextPosition = NULL; + return rValue; +} +FX_BOOL _CMapLookupCallback(void* param, void* pData) { + return !_CompactStringSame((_CompactString*)pData, + ((CFX_ByteStringC*)param)->GetPtr(), + ((CFX_ByteStringC*)param)->GetLength()); +} +FX_BOOL CFX_CMapByteStringToPtr::Lookup(const CFX_ByteStringC& key, + void*& rValue) const { + void* p = m_Buffer.Iterate(_CMapLookupCallback, (void*)&key); + if (!p) { + return FALSE; + } + rValue = *(void**)((_CompactString*)p + 1); + return TRUE; +} +void CFX_CMapByteStringToPtr::SetAt(const CFX_ByteStringC& key, void* value) { + ASSERT(value != NULL); + int index, key_len = key.GetLength(); + int size = m_Buffer.GetSize(); + for (index = 0; index < size; index++) { _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); - rKey = _CompactStringGet(pKey); - rValue = *(void**)(pKey + 1); - index ++; - int size = m_Buffer.GetSize(); - while (index < size) { - pKey = (_CompactString*)m_Buffer.GetAt(index); - if (pKey->m_CompactLen != 0xfe) { - rNextPosition = (FX_POSITION)(uintptr_t)(index + 1); - return; - } - index ++; - } - rNextPosition = NULL; -} -void* CFX_CMapByteStringToPtr::GetNextValue(FX_POSITION& rNextPosition) const -{ - if (rNextPosition == NULL) { - return NULL; + if (!_CompactStringSame(pKey, key.GetPtr(), key_len)) { + continue; } - int index = (int)(uintptr_t)rNextPosition - 1; + *(void**)(pKey + 1) = value; + return; + } + for (index = 0; index < size; index++) { _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); - void* rValue = *(void**)(pKey + 1); - index ++; - int size = m_Buffer.GetSize(); - while (index < size) { - pKey = (_CompactString*)m_Buffer.GetAt(index); - if (pKey->m_CompactLen != 0xfe) { - rNextPosition = (FX_POSITION)(uintptr_t)(index + 1); - return rValue; - } - index ++; - } - rNextPosition = NULL; - return rValue; -} -FX_BOOL _CMapLookupCallback(void* param, void* pData) -{ - return !_CompactStringSame((_CompactString*)pData, ((CFX_ByteStringC*)param)->GetPtr(), ((CFX_ByteStringC*)param)->GetLength()); -} -FX_BOOL CFX_CMapByteStringToPtr::Lookup(const CFX_ByteStringC& key, void*& rValue) const -{ - void* p = m_Buffer.Iterate(_CMapLookupCallback, (void*)&key); - if (!p) { - return FALSE; - } - rValue = *(void**)((_CompactString*)p + 1); - return TRUE; -} -void CFX_CMapByteStringToPtr::SetAt(const CFX_ByteStringC& key, void* value) -{ - ASSERT(value != NULL); - int index, key_len = key.GetLength(); - int size = m_Buffer.GetSize(); - for (index = 0; index < size; index ++) { - _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); - if (!_CompactStringSame(pKey, key.GetPtr(), key_len)) { - continue; - } - *(void**)(pKey + 1) = value; - return; + if (pKey->m_CompactLen) { + continue; } - for (index = 0; index < size; index ++) { - _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); - if (pKey->m_CompactLen) { - continue; - } - _CompactStringStore(pKey, key.GetPtr(), key_len); - *(void**)(pKey + 1) = value; - return; - } - _CompactString* pKey = (_CompactString*)m_Buffer.Add(); _CompactStringStore(pKey, key.GetPtr(), key_len); *(void**)(pKey + 1) = value; -} -void CFX_CMapByteStringToPtr::AddValue(const CFX_ByteStringC& key, void* value) -{ - ASSERT(value != NULL); - _CompactString* pKey = (_CompactString*)m_Buffer.Add(); - _CompactStringStore(pKey, key.GetPtr(), key.GetLength()); - *(void**)(pKey + 1) = value; -} -void CFX_CMapByteStringToPtr::RemoveKey(const CFX_ByteStringC& key) -{ - int key_len = key.GetLength(); - int size = m_Buffer.GetSize(); - for (int index = 0; index < size; index++) { - _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); - if (!_CompactStringSame(pKey, key.GetPtr(), key_len)) { - continue; - } - _CompactStringRelease(pKey); - pKey->m_CompactLen = 0xfe; - return; + return; + } + _CompactString* pKey = (_CompactString*)m_Buffer.Add(); + _CompactStringStore(pKey, key.GetPtr(), key_len); + *(void**)(pKey + 1) = value; +} +void CFX_CMapByteStringToPtr::AddValue(const CFX_ByteStringC& key, + void* value) { + ASSERT(value != NULL); + _CompactString* pKey = (_CompactString*)m_Buffer.Add(); + _CompactStringStore(pKey, key.GetPtr(), key.GetLength()); + *(void**)(pKey + 1) = value; +} +void CFX_CMapByteStringToPtr::RemoveKey(const CFX_ByteStringC& key) { + int key_len = key.GetLength(); + int size = m_Buffer.GetSize(); + for (int index = 0; index < size; index++) { + _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); + if (!_CompactStringSame(pKey, key.GetPtr(), key_len)) { + continue; } + _CompactStringRelease(pKey); + pKey->m_CompactLen = 0xfe; + return; + } } -int CFX_CMapByteStringToPtr::GetCount() const -{ - int count = 0; - int size = m_Buffer.GetSize(); - for (int i = 0; i < size; i ++) { - _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i); - if (pKey->m_CompactLen != 0xfe) { - count ++; - } +int CFX_CMapByteStringToPtr::GetCount() const { + int count = 0; + int size = m_Buffer.GetSize(); + for (int i = 0; i < size; i++) { + _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i); + if (pKey->m_CompactLen != 0xfe) { + count++; } - return count; + } + return count; } extern "C" { - static int _CompareDWord(const void* p1, const void* p2) - { - return (*(FX_DWORD*)p1) - (*(FX_DWORD*)p2); - } +static int _CompareDWord(const void* p1, const void* p2) { + return (*(FX_DWORD*)p1) - (*(FX_DWORD*)p2); +} }; struct _DWordPair { - FX_DWORD key; - FX_DWORD value; + FX_DWORD key; + FX_DWORD value; }; -FX_BOOL CFX_CMapDWordToDWord::Lookup(FX_DWORD key, FX_DWORD& value) const -{ - void* pResult = FXSYS_bsearch(&key, m_Buffer.GetBuffer(), m_Buffer.GetSize() / sizeof(_DWordPair), - sizeof(_DWordPair), _CompareDWord); - if (pResult == NULL) { - return FALSE; - } - value = ((FX_DWORD*)pResult)[1]; - return TRUE; -} -FX_POSITION CFX_CMapDWordToDWord::GetStartPosition() const -{ - FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair); - if (count == 0) { - return NULL; - } - return (FX_POSITION)1; +FX_BOOL CFX_CMapDWordToDWord::Lookup(FX_DWORD key, FX_DWORD& value) const { + void* pResult = FXSYS_bsearch(&key, m_Buffer.GetBuffer(), + m_Buffer.GetSize() / sizeof(_DWordPair), + sizeof(_DWordPair), _CompareDWord); + if (pResult == NULL) { + return FALSE; + } + value = ((FX_DWORD*)pResult)[1]; + return TRUE; } -void CFX_CMapDWordToDWord::GetNextAssoc(FX_POSITION& pos, FX_DWORD& key, FX_DWORD& value) const -{ - if (pos == 0) { - return; - } - FX_DWORD index = ((FX_DWORD)(uintptr_t)pos) - 1; - FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair); - _DWordPair* buf = (_DWordPair*)m_Buffer.GetBuffer(); - key = buf[index].key; - value = buf[index].value; - if (index == count - 1) { - pos = 0; +FX_POSITION CFX_CMapDWordToDWord::GetStartPosition() const { + FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair); + if (count == 0) { + return NULL; + } + return (FX_POSITION)1; +} +void CFX_CMapDWordToDWord::GetNextAssoc(FX_POSITION& pos, + FX_DWORD& key, + FX_DWORD& value) const { + if (pos == 0) { + return; + } + FX_DWORD index = ((FX_DWORD)(uintptr_t)pos) - 1; + FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair); + _DWordPair* buf = (_DWordPair*)m_Buffer.GetBuffer(); + key = buf[index].key; + value = buf[index].value; + if (index == count - 1) { + pos = 0; + } else { + pos = (FX_POSITION)((uintptr_t)pos + 1); + } +} +void CFX_CMapDWordToDWord::SetAt(FX_DWORD key, FX_DWORD value) { + FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair); + _DWordPair* buf = (_DWordPair*)m_Buffer.GetBuffer(); + _DWordPair pair = {key, value}; + if (count == 0 || key > buf[count - 1].key) { + m_Buffer.AppendBlock(&pair, sizeof(_DWordPair)); + return; + } + int low = 0, high = count - 1; + while (low <= high) { + int mid = (low + high) / 2; + if (buf[mid].key < key) { + low = mid + 1; + } else if (buf[mid].key > key) { + high = mid - 1; } else { - pos = (FX_POSITION)((uintptr_t)pos + 1); - } -} -void CFX_CMapDWordToDWord::SetAt(FX_DWORD key, FX_DWORD value) -{ - FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair); - _DWordPair* buf = (_DWordPair*)m_Buffer.GetBuffer(); - _DWordPair pair = {key, value}; - if (count == 0 || key > buf[count - 1].key) { - m_Buffer.AppendBlock(&pair, sizeof(_DWordPair)); - return; - } - int low = 0, high = count - 1; - while (low <= high) { - int mid = (low + high) / 2; - if (buf[mid].key < key) { - low = mid + 1; - } else if (buf[mid].key > key) { - high = mid - 1; - } else { - buf[mid].value = value; - return; - } + buf[mid].value = value; + return; } - m_Buffer.InsertBlock(low * sizeof(_DWordPair), &pair, sizeof(_DWordPair)); + } + m_Buffer.InsertBlock(low * sizeof(_DWordPair), &pair, sizeof(_DWordPair)); } -void CFX_CMapDWordToDWord::EstimateSize(FX_DWORD size, FX_DWORD grow_by) -{ - m_Buffer.EstimateSize(size, grow_by); +void CFX_CMapDWordToDWord::EstimateSize(FX_DWORD size, FX_DWORD grow_by) { + m_Buffer.EstimateSize(size, grow_by); } -- cgit v1.2.3