X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e05c8fa7bb8aa3a2d8d61dce57500ddbd317156f..0bbe61b8c18a1795189f0cf73cc61c14a0fb846d:/src/common/hashmap.cpp?ds=sidebyside diff --git a/src/common/hashmap.cpp b/src/common/hashmap.cpp index 04cbd63111..e3742aed7c 100644 --- a/src/common/hashmap.cpp +++ b/src/common/hashmap.cpp @@ -1,34 +1,29 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: hashmap.cpp +// Name: src/common/hashmap.cpp // Purpose: wxHashMap implementation // Author: Mattia Barbon -// Modified by: +// Modified by: // Created: 29/01/2002 // RCS-ID: $Id$ // Copyright: (c) Mattia Barbon // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "hashmap.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #include "wx/hashmap.h" -#include - /* FYI: This is the "One-at-a-Time" algorithm by Bob Jenkins */ /* from requirements by Colin Plumb. */ /* (http://burtleburtle.net/bob/hash/doobs.html) */ /* adapted from Perl sources ( hv.h ) */ -unsigned long wxStringHash::wxCharStringHash( const wxChar* k ) +template +static unsigned long DoStringHash(T *k) { unsigned long hash = 0; @@ -44,26 +39,17 @@ unsigned long wxStringHash::wxCharStringHash( const wxChar* k ) return hash + (hash << 15); } -#if wxUSE_UNICODE -unsigned long wxStringHash::charStringHash( const char* k ) -{ - unsigned long hash = 0; +unsigned long wxStringHash::stringHash( const char* k ) + { return DoStringHash(k); } - while( *k ) - { - hash += *k++; - hash += (hash << 10); - hash ^= (hash >> 6); - } - hash += (hash << 3); - hash ^= (hash >> 11); +unsigned long wxStringHash::stringHash( const wchar_t* k ) + { return DoStringHash(k); } - return hash + (hash << 15); -} -#endif + +#if !wxUSE_STL || !defined(HAVE_STL_HASH_MAP) /* from SGI STL */ -const unsigned long _wxHashTableBase2::s_primes[prime_count] = +const unsigned long _wxHashTableBase2::ms_primes[prime_count] = { 7ul, 13ul, 29ul, 53ul, 97ul, 193ul, 389ul, 769ul, @@ -76,7 +62,7 @@ const unsigned long _wxHashTableBase2::s_primes[prime_count] = unsigned long _wxHashTableBase2::GetNextPrime( unsigned long n ) { - const unsigned long* ptr = &s_primes[0]; + const unsigned long* ptr = &ms_primes[0]; for( size_t i = 0; i < prime_count; ++i, ++ptr ) { if( n < *ptr ) @@ -84,14 +70,15 @@ unsigned long _wxHashTableBase2::GetNextPrime( unsigned long n ) } /* someone might try to alloc a 2^32-element hash table */ - assert(0); + wxFAIL_MSG( _T("hash table too big?") ); + /* quiet warning */ return 0; } unsigned long _wxHashTableBase2::GetPreviousPrime( unsigned long n ) { - const unsigned long* ptr = &s_primes[prime_count - 1]; + const unsigned long* ptr = &ms_primes[prime_count - 1]; for( size_t i = 0; i < prime_count; ++i, --ptr ) { @@ -116,7 +103,7 @@ void _wxHashTableBase2::DeleteNodes( size_t buckets, while( node ) { - tmp = node->m_nxt; + tmp = node->m_next; dtor( node ); node = tmp; } @@ -139,9 +126,9 @@ void _wxHashTableBase2::CopyHashTable( _wxHashTable_NodeBase** srcTable, { size_t bucket = func( dst, node ); - nextnode = node->m_nxt; + nextnode = node->m_next; _wxHashTable_NodeBase* newnode = proc( node ); - newnode->m_nxt = dstTable[bucket]; + newnode->m_next = dstTable[bucket]; dstTable[bucket] = newnode; } } @@ -152,3 +139,4 @@ _wxHashTable_NodeBase* _wxHashTableBase2::DummyProcessNode(_wxHashTable_NodeBase return node; } +#endif // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)