From 0518029cecf127dc5e792bb3fcd6781d46c0e0b1 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 25 Apr 2007 19:21:46 +0000 Subject: [PATCH] leave only wxString overloads for of the functions working with string keys; remove the old variant of hash table (deprecated since 2.4) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45644 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/hash.h | 267 ++--------------------- src/common/hash.cpp | 500 ++------------------------------------------ 2 files changed, 25 insertions(+), 742 deletions(-) diff --git a/include/wx/hash.h b/include/wx/hash.h index 5cf258f5d2..32789cdd78 100644 --- a/include/wx/hash.h +++ b/include/wx/hash.h @@ -15,16 +15,11 @@ #include "wx/defs.h" #include "wx/string.h" -#define wxUSE_OLD_HASH_TABLE 0 - #if !wxUSE_STL #include "wx/object.h" #else class WXDLLIMPEXP_BASE wxObject; #endif -#if wxUSE_OLD_HASH_TABLE - #include "wx/list.h" -#endif // the default size of the hash #define wxHASH_SIZE_DEFAULT (1000) @@ -36,69 +31,10 @@ * the list to find the desired item. */ -// ---------------------------------------------------------------------------- -// this is the base class for object hashes: hash tables which contain -// pointers to objects -// ---------------------------------------------------------------------------- - -#if wxUSE_OLD_HASH_TABLE - -class WXDLLIMPEXP_BASE wxHashTableBase : public wxObject -{ -public: - wxHashTableBase(); - - void Create(wxKeyType keyType = wxKEY_INTEGER, - size_t size = wxHASH_SIZE_DEFAULT); - void Destroy(); - - size_t GetSize() const { return m_hashSize; } - size_t GetCount() const { return m_count; } - - void DeleteContents(bool flag); - -protected: - // find the node for (key, value) - wxNodeBase *GetNode(long key, long value) const; - - // the array of lists in which we store the values for given key hash - wxListBase **m_hashTable; - - // the size of m_lists array - size_t m_hashSize; - - // the type of indexing we use - wxKeyType m_keyType; - - // the total number of elements in the hash - size_t m_count; - - // should we delete our data? - bool m_deleteContents; - -private: - // no copy ctor/assignment operator (yet) - DECLARE_NO_COPY_CLASS(wxHashTableBase) -}; - -#else // if !wxUSE_OLD_HASH_TABLE - -#if !defined(wxENUM_KEY_TYPE_DEFINED) -#define wxENUM_KEY_TYPE_DEFINED - -enum wxKeyType -{ - wxKEY_NONE, - wxKEY_INTEGER, - wxKEY_STRING -}; - -#endif - union wxHashKeyValue { long integer; - wxChar *string; + wxString *string; }; // for some compilers (AIX xlC), defining it as friend inside the class is not @@ -112,12 +48,12 @@ class WXDLLIMPEXP_BASE wxHashTableBase_Node public: wxHashTableBase_Node( long key, void* value, wxHashTableBase* table ); - wxHashTableBase_Node( const wxChar* key, void* value, + wxHashTableBase_Node( const wxString& key, void* value, wxHashTableBase* table ); ~wxHashTableBase_Node(); long GetKeyInteger() const { return m_key.integer; } - const wxChar* GetKeyString() const { return m_key.string; } + const wxString& GetKeyString() const { return *m_key.string; } void* GetData() const { return m_value; } void SetData( void* data ) { m_value = data; } @@ -165,15 +101,15 @@ public: void DeleteContents( bool flag ) { m_deleteContents = flag; } - static long MakeKey(const wxChar *string); + static long MakeKey(const wxString& string); protected: void DoPut( long key, long hash, void* data ); - void DoPut( const wxChar* key, long hash, void* data ); + void DoPut( const wxString& key, long hash, void* data ); void* DoGet( long key, long hash ) const; - void* DoGet( const wxChar* key, long hash ) const; + void* DoGet( const wxString& key, long hash ) const; void* DoDelete( long key, long hash ); - void* DoDelete( const wxChar* key, long hash ); + void* DoDelete( const wxString& key, long hash ); private: // Remove the node from the hash, *only called from @@ -217,14 +153,10 @@ private: DECLARE_NO_COPY_CLASS(wxHashTableBase) }; -#endif // wxUSE_OLD_HASH_TABLE - // ---------------------------------------------------------------------------- // for compatibility only // ---------------------------------------------------------------------------- -#if !wxUSE_OLD_HASH_TABLE - class WXDLLIMPEXP_BASE wxHashTable_Node : public wxHashTableBase_Node { friend class WXDLLIMPEXP_BASE wxHashTable; @@ -232,7 +164,7 @@ public: wxHashTable_Node( long key, void* value, wxHashTableBase* table ) : wxHashTableBase_Node( key, value, table ) { } - wxHashTable_Node( const wxChar* key, void* value, + wxHashTable_Node( const wxString& key, void* value, wxHashTableBase* table ) : wxHashTableBase_Node( key, value, table ) { } @@ -268,12 +200,9 @@ public: { DoPut( value, value, object ); } void Put(long lhash, long value, wxObject *object) { DoPut( value, lhash, object ); } - void Put(const wxChar *value, wxObject *object) - { DoPut( value, MakeKey( value ), object ); } - // FIXME-UTF8: have only wxString forms here void Put(const wxString& value, wxObject *object) { DoPut( value, MakeKey( value ), object ); } - void Put(long lhash, const wxChar *value, wxObject *object) + void Put(long lhash, const wxString& value, wxObject *object) { DoPut( value, lhash, object ); } // key and value are the same @@ -281,12 +210,9 @@ public: { return (wxObject*)DoGet( value, value ); } wxObject *Get(long lhash, long value) const { return (wxObject*)DoGet( value, lhash ); } - wxObject *Get(const wxChar *value) const - { return (wxObject*)DoGet( value, MakeKey( value ) ); } - // FIXME-UTF8: have only wxString forms here wxObject *Get(const wxString& value) const { return (wxObject*)DoGet( value, MakeKey( value ) ); } - wxObject *Get(long lhash, const wxChar *value) const + wxObject *Get(long lhash, const wxString& value) const { return (wxObject*)DoGet( value, lhash ); } // Deletes entry and returns data if found @@ -294,19 +220,11 @@ public: { return (wxObject*)DoDelete( key, key ); } wxObject *Delete(long lhash, long key) { return (wxObject*)DoDelete( key, lhash ); } - wxObject *Delete(const wxChar *key) - { return (wxObject*)DoDelete( key, MakeKey( key ) ); } - // FIXME-UTF8: have only wxString forms here wxObject *Delete(const wxString& key) { return (wxObject*)DoDelete( key, MakeKey( key ) ); } - wxObject *Delete(long lhash, const wxChar *key) + wxObject *Delete(long lhash, const wxString& key) { return (wxObject*)DoDelete( key, lhash ); } - // Construct your own integer key from a string, e.g. in case - // you need to combine it with something - long MakeKey(const wxChar *string) const - { return wxHashTableBase::MakeKey(string); } - // Way of iterating through whole hash table (e.g. to delete everything) // Not necessary, of course, if you're only storing pointers to // objects maintained separately @@ -333,103 +251,6 @@ private: size_t m_currBucket; }; -#else // if wxUSE_OLD_HASH_TABLE - -typedef wxNode wxHashTable_Node; - -class WXDLLIMPEXP_BASE wxHashTable : public wxObject -{ -public: - typedef wxNode Node; - typedef wxNode* compatibility_iterator; - - int n; - int current_position; - wxNode *current_node; - - unsigned int key_type; - wxList **hash_table; - - wxHashTable(int the_key_type = wxKEY_INTEGER, - int size = wxHASH_SIZE_DEFAULT); - virtual ~wxHashTable(); - - // copy ctor and assignment operator - wxHashTable(const wxHashTable& table) : wxObject() - { DoCopy(table); } - wxHashTable& operator=(const wxHashTable& table) - { Clear(); DoCopy(table); return *this; } - - void DoCopy(const wxHashTable& table); - - void Destroy(); - - bool Create(int the_key_type = wxKEY_INTEGER, - int size = wxHASH_SIZE_DEFAULT); - - // Note that there are 2 forms of Put, Get. - // With a key and a value, the *value* will be checked - // when a collision is detected. Otherwise, if there are - // 2 items with a different value but the same key, - // we'll retrieve the WRONG ONE. So where possible, - // supply the required value along with the key. - // In fact, the value-only versions make a key, and still store - // the value. The use of an explicit key might be required - // e.g. when combining several values into one key. - // When doing that, it's highly likely we'll get a collision, - // e.g. 1 + 2 = 3, 2 + 1 = 3. - - // key and value are NOT necessarily the same - void Put(long key, long value, wxObject *object); - void Put(long key, const wxChar *value, wxObject *object); - - // key and value are the same - void Put(long value, wxObject *object); - void Put(const wxChar *value, wxObject *object); - - // key and value not the same - wxObject *Get(long key, long value) const; - wxObject *Get(long key, const wxChar *value) const; - - // key and value are the same - wxObject *Get(long value) const; - wxObject *Get(const wxChar *value) const; - - // Deletes entry and returns data if found - wxObject *Delete(long key); - wxObject *Delete(const wxChar *key); - - wxObject *Delete(long key, int value); - wxObject *Delete(long key, const wxChar *value); - - // Construct your own integer key from a string, e.g. in case - // you need to combine it with something - long MakeKey(const wxChar *string) const; - - // Way of iterating through whole hash table (e.g. to delete everything) - // Not necessary, of course, if you're only storing pointers to - // objects maintained separately - - void BeginFind(); - Node* Next(); - - void DeleteContents(bool flag); - void Clear(); - - // Returns number of nodes - size_t GetCount() const { return m_count; } - -private: - size_t m_count; // number of elements in the hashtable - bool m_deleteContents; - - DECLARE_DYNAMIC_CLASS(wxHashTable) -}; - -#endif // wxUSE_OLD_HASH_TABLE - -#if !wxUSE_OLD_HASH_TABLE - // defines a new type safe hash table which stores the elements of type eltype // in lists of class listclass #define _WX_DECLARE_HASH(eltype, dummy, hashclass, classexp) \ @@ -458,69 +279,6 @@ private: DECLARE_NO_COPY_CLASS(hashclass) \ } -#else // if wxUSE_OLD_HASH_TABLE - -#define _WX_DECLARE_HASH(eltype, listclass, hashclass, classexp) \ - classexp hashclass : public wxHashTableBase \ - { \ - public: \ - hashclass(wxKeyType keyType = wxKEY_INTEGER, \ - size_t size = wxHASH_SIZE_DEFAULT) \ - { Create(keyType, size); } \ - \ - virtual ~hashclass() { Destroy(); } \ - \ - void Put(long key, long val, eltype *data) { DoPut(key, val, data); } \ - void Put(long key, eltype *data) { DoPut(key, key, data); } \ - \ - eltype *Get(long key, long value) const \ - { \ - wxNodeBase *node = GetNode(key, value); \ - return node ? ((listclass::Node *)node)->GetData() : (eltype *)0; \ - } \ - eltype *Get(long key) const { return Get(key, key); } \ - \ - eltype *Delete(long key, long value) \ - { \ - eltype *data; \ - \ - wxNodeBase *node = GetNode(key, value); \ - if ( node ) \ - { \ - data = ((listclass::Node *)node)->GetData(); \ - \ - delete node; \ - m_count--; \ - } \ - else \ - { \ - data = (eltype *)0; \ - } \ - \ - return data; \ - } \ - eltype *Delete(long key) { return Delete(key, key); } \ - \ - protected: \ - void DoPut(long key, long value, eltype *data) \ - { \ - size_t slot = (size_t)abs((int)(key % (long)m_hashSize)); \ - \ - if ( !m_hashTable[slot] ) \ - { \ - m_hashTable[slot] = new listclass(m_keyType); \ - if ( m_deleteContents ) \ - m_hashTable[slot]->DeleteContents(true); \ - } \ - \ - ((listclass *)m_hashTable[slot])->Append(value, data); \ - m_count++; \ - } \ - \ - DECLARE_NO_COPY_CLASS(hashclass) \ - } - -#endif // wxUSE_OLD_HASH_TABLE // this macro is to be used in the user code #define WX_DECLARE_HASH(el, list, hash) \ @@ -552,5 +310,4 @@ private: (hash).Clear(); \ } -#endif - // _WX_HASH_H__ +#endif // _WX_HASH_H__ diff --git a/src/common/hash.cpp b/src/common/hash.cpp index a782166d02..8333e1cdea 100644 --- a/src/common/hash.cpp +++ b/src/common/hash.cpp @@ -25,483 +25,9 @@ #endif #ifndef WX_PRECOMP - #include "wx/list.h" #include "wx/hash.h" #endif -#if wxUSE_OLD_HASH_TABLE - -#include -#include - -// ---------------------------------------------------------------------------- -// wxWin macros -// ---------------------------------------------------------------------------- - -IMPLEMENT_DYNAMIC_CLASS(wxHashTable, wxObject) - -// ============================================================================ -// implementation -// ============================================================================ - -// ---------------------------------------------------------------------------- -// wxHashTablleBase for working with "void *" data -// ---------------------------------------------------------------------------- - -wxHashTableBase::wxHashTableBase() -{ - m_deleteContents = false; - m_hashTable = (wxListBase **)NULL; - m_hashSize = 0; - m_count = 0; - m_keyType = wxKEY_NONE; -} - -void wxHashTableBase::Create(wxKeyType keyType, size_t size) -{ - Destroy(); - - m_hashSize = size; - m_keyType = keyType; - m_hashTable = new wxListBase *[size]; - for ( size_t n = 0; n < m_hashSize; n++ ) - { - m_hashTable[n] = (wxListBase *) NULL; - } -} - -void wxHashTableBase::Destroy() -{ - if ( m_hashTable ) - { - for ( size_t n = 0; n < m_hashSize; n++ ) - { - delete m_hashTable[n]; - } - - delete [] m_hashTable; - - m_hashTable = (wxListBase **)NULL; - - m_count = 0; - } -} - -void wxHashTableBase::DeleteContents(bool flag) -{ - m_deleteContents = flag; - for ( size_t n = 0; n < m_hashSize; n++ ) - { - if ( m_hashTable[n] ) - { - m_hashTable[n]->DeleteContents(flag); - } - } -} - -wxNodeBase *wxHashTableBase::GetNode(long key, long value) const -{ - size_t slot = (size_t)abs((int)(key % (long)m_hashSize)); - - wxNodeBase *node; - if ( m_hashTable[slot] ) - { - node = m_hashTable[slot]->Find(wxListKey(value)); - } - else - { - node = (wxNodeBase *)NULL; - } - - return node; -} - -// ---------------------------------------------------------------------------- -// old not type safe wxHashTable -// ---------------------------------------------------------------------------- - -wxHashTable::wxHashTable (int the_key_type, int size) -{ - n = 0; - hash_table = (wxList**) NULL; - Create(the_key_type, size); - m_count = 0; - m_deleteContents = false; -/* - n = size; - current_position = -1; - current_node = (wxNode *) NULL; - - key_type = the_key_type; - hash_table = new wxList *[size]; - int i; - for (i = 0; i < size; i++) - hash_table[i] = (wxList *) NULL; -*/ -} - -wxHashTable::~wxHashTable () -{ - Destroy(); -} - -void wxHashTable::Destroy() -{ - if (!hash_table) return; - int i; - for (i = 0; i < n; i++) - if (hash_table[i]) - delete hash_table[i]; - delete[] hash_table; - hash_table = NULL; -} - -bool wxHashTable::Create(int the_key_type, int size) -{ - Destroy(); - - n = size; - current_position = -1; - current_node = (wxNode *) NULL; - - key_type = the_key_type; - hash_table = new wxList *[size]; - int i; - for (i = 0; i < size; i++) - hash_table[i] = (wxList *) NULL; - return true; -} - - -void wxHashTable::DoCopy(const wxHashTable& table) -{ - n = table.n; - m_count = table.m_count; - current_position = table.current_position; - current_node = NULL; // doesn't matter - Next() will reconstruct it - key_type = table.key_type; - - hash_table = new wxList *[n]; - for (int i = 0; i < n; i++) { - if (table.hash_table[i] == NULL) - hash_table[i] = NULL; - else { - hash_table[i] = new wxList(key_type); - *(hash_table[i]) = *(table.hash_table[i]); - } - } -} - -void wxHashTable::Put (long key, long value, wxObject * object) -{ - // Should NEVER be - long k = (long) key; - - int position = (int) (k % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - { - hash_table[position] = new wxList (wxKEY_INTEGER); - if (m_deleteContents) hash_table[position]->DeleteContents(true); - } - - hash_table[position]->Append (value, object); - m_count++; -} - -void wxHashTable::Put (long key, const wxChar *value, wxObject * object) -{ - // Should NEVER be - long k = (long) key; - - int position = (int) (k % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - { - hash_table[position] = new wxList (wxKEY_STRING); - if (m_deleteContents) hash_table[position]->DeleteContents(true); - } - - hash_table[position]->Append (value, object); - m_count++; -} - -void wxHashTable::Put (long key, wxObject * object) -{ - // Should NEVER be - long k = (long) key; - - int position = (int) (k % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - { - hash_table[position] = new wxList (wxKEY_INTEGER); - if (m_deleteContents) hash_table[position]->DeleteContents(true); - } - - hash_table[position]->Append (k, object); - m_count++; -} - -void wxHashTable::Put (const wxChar *key, wxObject * object) -{ - int position = (int) (MakeKey (key) % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - { - hash_table[position] = new wxList (wxKEY_STRING); - if (m_deleteContents) hash_table[position]->DeleteContents(true); - } - - hash_table[position]->Append (key, object); - m_count++; -} - -wxObject *wxHashTable::Get (long key, long value) const -{ - // Should NEVER be - long k = (long) key; - - int position = (int) (k % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - return (wxObject *) NULL; - else - { - wxNode *node = hash_table[position]->Find (value); - if (node) - return node->GetData (); - else - return (wxObject *) NULL; - } -} - -wxObject *wxHashTable::Get (long key, const wxChar *value) const -{ - // Should NEVER be - long k = (long) key; - - int position = (int) (k % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - return (wxObject *) NULL; - else - { - wxNode *node = hash_table[position]->Find (value); - if (node) - return node->GetData (); - else - return (wxObject *) NULL; - } -} - -wxObject *wxHashTable::Get (long key) const -{ - // Should NEVER be - long k = (long) key; - - int position = (int) (k % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - return (wxObject *) NULL; - else - { - wxNode *node = hash_table[position]->Find (k); - return node ? node->GetData () : (wxObject*)NULL; - } -} - -wxObject *wxHashTable::Get (const wxChar *key) const -{ - int position = (int) (MakeKey (key) % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - return (wxObject *) NULL; - else - { - wxNode *node = hash_table[position]->Find (key); - return node ? node->GetData () : (wxObject*)NULL; - } -} - -wxObject *wxHashTable::Delete (long key) -{ - // Should NEVER be - long k = (long) key; - - int position = (int) (k % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - return (wxObject *) NULL; - else - { - wxNode *node = hash_table[position]->Find (k); - if (node) - { - wxObject *data = node->GetData (); - delete node; - m_count--; - return data; - } - else - return (wxObject *) NULL; - } -} - -wxObject *wxHashTable::Delete (const wxChar *key) -{ - int position = (int) (MakeKey (key) % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - return (wxObject *) NULL; - else - { - wxNode *node = hash_table[position]->Find (key); - if (node) - { - wxObject *data = node->GetData (); - delete node; - m_count--; - return data; - } - else - return (wxObject *) NULL; - } -} - -wxObject *wxHashTable::Delete (long key, int value) -{ - // Should NEVER be - long k = (long) key; - - int position = (int) (k % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - return (wxObject *) NULL; - else - { - wxNode *node = hash_table[position]->Find (value); - if (node) - { - wxObject *data = node->GetData (); - delete node; - m_count--; - return data; - } - else - return (wxObject *) NULL; - } -} - -wxObject *wxHashTable::Delete (long key, const wxChar *value) -{ - int position = (int) (key % n); - if (position < 0) position = -position; - - if (!hash_table[position]) - return (wxObject *) NULL; - else - { - wxNode *node = hash_table[position]->Find (value); - if (node) - { - wxObject *data = node->GetData (); - delete node; - m_count--; - return data; - } - else - return (wxObject *) NULL; - } -} - -long wxHashTable::MakeKey (const wxChar *string) const -{ - long int_key = 0; - - while (*string) - int_key += (wxUChar) *string++; - - return int_key; -} - -void wxHashTable::BeginFind () -{ - current_position = -1; - current_node = (wxNode *) NULL; -} - -wxHashTable::Node* wxHashTable::Next () -{ - wxNode *found = (wxNode *) NULL; - bool end = false; - while (!end && !found) - { - if (!current_node) - { - current_position++; - if (current_position >= n) - { - current_position = -1; - current_node = (wxNode *) NULL; - end = true; - } - else - { - if (hash_table[current_position]) - { - current_node = hash_table[current_position]->GetFirst (); - found = current_node; - } - } - } - else - { - current_node = current_node->GetNext (); - found = current_node; - } - } - return found; -} - -void wxHashTable::DeleteContents (bool flag) -{ - int i; - m_deleteContents = flag; - for (i = 0; i < n; i++) - { - if (hash_table[i]) - hash_table[i]->DeleteContents (flag); - } -} - -void wxHashTable::Clear () -{ - int i; - if (hash_table) - { - for (i = 0; i < n; i++) - { - if (hash_table[i]) - hash_table[i]->Clear (); - } - } - m_count = 0; -} - -#else // if !wxUSE_OLD_HASH_TABLE - wxHashTableBase_Node::wxHashTableBase_Node( long key, void* value, wxHashTableBase* table ) : m_value( value ), m_hashPtr( table ) @@ -509,11 +35,11 @@ wxHashTableBase_Node::wxHashTableBase_Node( long key, void* value, m_key.integer = key; } -wxHashTableBase_Node::wxHashTableBase_Node( const wxChar* key, void* value, +wxHashTableBase_Node::wxHashTableBase_Node( const wxString& key, void* value, wxHashTableBase* table ) : m_value( value ), m_hashPtr( table ) { - m_key.string = wxStrcpy( new wxChar[wxStrlen( key ) + 1], key ); + m_key.string = new wxString(key); } wxHashTableBase_Node::~wxHashTableBase_Node() @@ -571,7 +97,7 @@ void wxHashTableBase::DoRemoveNode( wxHashTableBase_Node* node ) { size_t bucket = ( m_keyType == wxKEY_INTEGER ? node->m_key.integer : - MakeKey( node->m_key.string ) ) % m_size; + MakeKey( *node->m_key.string ) ) % m_size; if( node->GetNext() == node ) { @@ -599,7 +125,7 @@ void wxHashTableBase::DoDestroyNode( wxHashTableBase_Node* node ) node->m_hashPtr = NULL; if( m_keyType == wxKEY_STRING ) - delete[] node->m_key.string; + delete node->m_key.string; if( m_deleteContents ) DoDeleteContents( node ); } @@ -643,7 +169,7 @@ void wxHashTableBase::DoPut( long key, long hash, void* data ) DoInsertNode( bucket, node ); } -void wxHashTableBase::DoPut( const wxChar* key, long hash, void* data ) +void wxHashTableBase::DoPut( const wxString& key, long hash, void* data ) { wxASSERT( m_keyType == wxKEY_STRING ); @@ -677,7 +203,7 @@ void* wxHashTableBase::DoGet( long key, long hash ) const return NULL; } -void* wxHashTableBase::DoGet( const wxChar* key, long hash ) const +void* wxHashTableBase::DoGet( const wxString& key, long hash ) const { wxASSERT( m_keyType == wxKEY_STRING ); @@ -691,7 +217,7 @@ void* wxHashTableBase::DoGet( const wxChar* key, long hash ) const do { - if( wxStrcmp( curr->m_key.string, key ) == 0 ) + if( *curr->m_key.string == key ) return curr->m_value; curr = curr->GetNext(); @@ -750,7 +276,7 @@ void* wxHashTableBase::DoDelete( long key, long hash ) return NULL; } -void* wxHashTableBase::DoDelete( const wxChar* key, long hash ) +void* wxHashTableBase::DoDelete( const wxString& key, long hash ) { wxASSERT( m_keyType == wxKEY_STRING ); @@ -765,7 +291,7 @@ void* wxHashTableBase::DoDelete( const wxChar* key, long hash ) do { - if( wxStrcmp( curr->m_key.string, key ) == 0 ) + if( *curr->m_key.string == key ) { void* retval = curr->m_value; curr->m_value = NULL; @@ -784,12 +310,13 @@ void* wxHashTableBase::DoDelete( const wxChar* key, long hash ) return NULL; } -long wxHashTableBase::MakeKey( const wxChar *str ) +long wxHashTableBase::MakeKey( const wxString& str ) { long int_key = 0; - while( *str ) - int_key += (wxUChar)*str++; + const wxStringCharType *p = str.wx_str(); + while( *p ) + int_key += *p++; return int_key; } @@ -855,4 +382,3 @@ wxHashTable::Node* wxHashTable::Next() return m_curr; } -#endif // !wxUSE_OLD_HASH_TABLE -- 2.45.2