X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d8274c928e8a68e6514d07d4dd268aaf8167db17..5524d92aaa1752e94e8b81abd7859713c96ba963:/include/wx/hash.h diff --git a/include/wx/hash.h b/include/wx/hash.h index 280c91e83e..3720dd0c1f 100644 --- a/include/wx/hash.h +++ b/include/wx/hash.h @@ -12,7 +12,7 @@ #ifndef _WX_HASH_H__ #define _WX_HASH_H__ -#if defined(__GNUG__) && !defined(__APPLE__) +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma interface "hash.h" #endif @@ -140,7 +140,24 @@ WX_DECLARE_EXPORTED_HASH_MAP( wxHashKeyValue, void*, wxHashTableHash, wxHashTableEqual, - wxHashTableBaseBase ); + wxHashTableBaseBaseBase ); + +// hack: we should really have HASH_MULTI(MAP|SET), but this requires +// less work + +class WXDLLIMPEXP_BASE wxHashTableBaseBase : public wxHashTableBaseBaseBase +{ +public: + wxHashTableBaseBase(size_t size, const wxHashTableHash& hash, + const wxHashTableEqual& equal) + : wxHashTableBaseBaseBase(size, hash, equal) + { } + + void multi_insert(const wxHashKeyValue& key, void* value) + { + CreateNodeLast(value_type(key, value)); + } +}; class WXDLLIMPEXP_BASE wxHashTableBase { @@ -176,7 +193,7 @@ protected: wxASSERT( m_keyType == wxKEY_INTEGER ); wxHashKeyValue k; k.integer = key; - m_map[k] = data; + m_map.multi_insert(k, data); } void DoPut( const wxChar* key, void* data ) @@ -184,17 +201,8 @@ protected: wxASSERT( m_keyType == wxKEY_STRING ); wxHashKeyValue k; - k.string = (wxChar*)key; - wxHashTableBaseBase::iterator it = m_map.find(k); - - if( it == m_map.end() ) - { - k.string = new wxChar[wxStrlen(key) + 1]; - wxStrcpy(k.string, key); - m_map[k] = data; - } - else - it->second = data; + k.string = wxStrcpy(new wxChar[wxStrlen(key) + 1], key); + m_map.multi_insert(k, data); } void* DoGet( long key ) const @@ -383,12 +391,6 @@ public: it lit = i->m_iter; return citer( i->m_hash, ++lit ); } - citer GetPrevious() const - { - citer* i = (citer*)this; - it lit = i->m_iter; - return citer( i->m_hash, ++lit ); - } void SetData( wxObject* e ) { citer* i = (citer*)this; @@ -413,8 +415,8 @@ public: wxObject *Get(const wxChar *value) const { return (wxObject*)DoGet( value ); } // Deletes entry and returns data if found - wxObject *Delete(long key) { return (wxObject*)DoGet( key ); } - wxObject *Delete(const wxChar *key) { return (wxObject*)DoGet( key ); } + wxObject *Delete(long key) { return (wxObject*)DoDelete( key ); } + wxObject *Delete(const wxChar *key) { return (wxObject*)DoDelete( key ); } #if 0 // Construct your own integer key from a string, e.g. in case @@ -434,6 +436,8 @@ public: } void Clear() { wxHashTableBase::Clear(); } + + size_t GetCount() const { return wxHashTableBase::GetCount(); } private: compatibility_iterator m_iter; };