X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1a6d9c7680c19f25613380ab5b151806da6decb0..badea317077a1bddca31b76cbd855f0cd3ed4fb5:/src/common/hash.cpp diff --git a/src/common/hash.cpp b/src/common/hash.cpp index d2a71fa8d3..a782166d02 100644 --- a/src/common/hash.cpp +++ b/src/common/hash.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: hash.cpp +// Name: src/common/hash.cpp // Purpose: wxHashTable implementation // Author: Julian Smart // Modified by: VZ at 25.02.00: type safe hashes with WX_DECLARE_HASH() @@ -17,24 +17,19 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "hash.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #ifndef WX_PRECOMP -#include "wx/list.h" + #include "wx/list.h" + #include "wx/hash.h" #endif -#include "wx/hash.h" - -#if !wxUSE_STL +#if wxUSE_OLD_HASH_TABLE #include #include @@ -55,7 +50,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxHashTable, wxObject) wxHashTableBase::wxHashTableBase() { - m_deleteContents = FALSE; + m_deleteContents = false; m_hashTable = (wxListBase **)NULL; m_hashSize = 0; m_count = 0; @@ -121,225 +116,6 @@ wxNodeBase *wxHashTableBase::GetNode(long key, long value) const return node; } -#if WXWIN_COMPATIBILITY_2_4 - -// ---------------------------------------------------------------------------- -// wxHashTableLong -// ---------------------------------------------------------------------------- - -wxHashTableLong::~wxHashTableLong() -{ - Destroy(); -} - -void wxHashTableLong::Init(size_t size) -{ - m_hashSize = size; - m_values = new wxArrayLong *[size]; - m_keys = new wxArrayLong *[size]; - - for ( size_t n = 0; n < m_hashSize; n++ ) - { - m_values[n] = - m_keys[n] = (wxArrayLong *)NULL; - } - - m_count = 0; -} - -void wxHashTableLong::Create(size_t size) -{ - Init(size); -} - -void wxHashTableLong::Destroy() -{ - for ( size_t n = 0; n < m_hashSize; n++ ) - { - delete m_values[n]; - delete m_keys[n]; - } - - delete [] m_values; - delete [] m_keys; - m_hashSize = 0; - m_count = 0; -} - -void wxHashTableLong::Put(long key, long value) -{ - wxCHECK_RET( m_hashSize, _T("must call Create() first") ); - - size_t slot = (size_t)abs((int)(key % (long)m_hashSize)); - - if ( !m_keys[slot] ) - { - m_keys[slot] = new wxArrayLong; - m_values[slot] = new wxArrayLong; - } - - m_keys[slot]->Add(key); - m_values[slot]->Add(value); - - m_count++; -} - -long wxHashTableLong::Get(long key) const -{ - wxCHECK_MSG( m_hashSize, wxNOT_FOUND, _T("must call Create() first") ); - - size_t slot = (size_t)abs((int)(key % (long)m_hashSize)); - - wxArrayLong *keys = m_keys[slot]; - if ( keys ) - { - size_t count = keys->GetCount(); - for ( size_t n = 0; n < count; n++ ) - { - if ( keys->Item(n) == key ) - { - return m_values[slot]->Item(n); - } - } - } - - return wxNOT_FOUND; -} - -long wxHashTableLong::Delete(long key) -{ - wxCHECK_MSG( m_hashSize, wxNOT_FOUND, _T("must call Create() first") ); - - size_t slot = (size_t)abs((int)(key % (long)m_hashSize)); - - wxArrayLong *keys = m_keys[slot]; - if ( keys ) - { - size_t count = keys->GetCount(); - for ( size_t n = 0; n < count; n++ ) - { - if ( keys->Item(n) == key ) - { - long val = m_values[slot]->Item(n); - - keys->RemoveAt(n); - m_values[slot]->RemoveAt(n); - - m_count--; - - return val; - } - } - } - - return wxNOT_FOUND; -} - -// ---------------------------------------------------------------------------- -// wxStringHashTable: more efficient than storing strings in a list -// ---------------------------------------------------------------------------- - -wxStringHashTable::wxStringHashTable(size_t sizeTable) -{ - m_keys = new wxArrayLong *[sizeTable]; - m_values = new wxArrayString *[sizeTable]; - - m_hashSize = sizeTable; - for ( size_t n = 0; n < m_hashSize; n++ ) - { - m_values[n] = (wxArrayString *)NULL; - m_keys[n] = (wxArrayLong *)NULL; - } -} - -wxStringHashTable::~wxStringHashTable() -{ - Destroy(); -} - -void wxStringHashTable::Destroy() -{ - for ( size_t n = 0; n < m_hashSize; n++ ) - { - delete m_values[n]; - delete m_keys[n]; - } - - delete [] m_values; - delete [] m_keys; - m_hashSize = 0; -} - -void wxStringHashTable::Put(long key, const wxString& value) -{ - wxCHECK_RET( m_hashSize, _T("must call Create() first") ); - - size_t slot = (size_t)abs((int)(key % (long)m_hashSize)); - - if ( !m_keys[slot] ) - { - m_keys[slot] = new wxArrayLong; - m_values[slot] = new wxArrayString; - } - - m_keys[slot]->Add(key); - m_values[slot]->Add(value); -} - -wxString wxStringHashTable::Get(long key, bool *wasFound) const -{ - wxCHECK_MSG( m_hashSize, _T(""), _T("must call Create() first") ); - - size_t slot = (size_t)abs((int)(key % (long)m_hashSize)); - - wxArrayLong *keys = m_keys[slot]; - if ( keys ) - { - size_t count = keys->GetCount(); - for ( size_t n = 0; n < count; n++ ) - { - if ( keys->Item(n) == key ) - { - if ( wasFound ) - *wasFound = TRUE; - - return m_values[slot]->Item(n); - } - } - } - - if ( wasFound ) - *wasFound = FALSE; - - return _T(""); -} - -bool wxStringHashTable::Delete(long key) const -{ - wxCHECK_MSG( m_hashSize, FALSE, _T("must call Create() first") ); - - size_t slot = (size_t)abs((int)(key % (long)m_hashSize)); - - wxArrayLong *keys = m_keys[slot]; - if ( keys ) - { - size_t count = keys->GetCount(); - for ( size_t n = 0; n < count; n++ ) - { - if ( keys->Item(n) == key ) - { - keys->RemoveAt(n); - m_values[slot]->RemoveAt(n); - return TRUE; - } - } - } - - return FALSE; -} - -#endif // WXWIN_COMPATIBILITY_2_4 - // ---------------------------------------------------------------------------- // old not type safe wxHashTable // ---------------------------------------------------------------------------- @@ -350,7 +126,7 @@ wxHashTable::wxHashTable (int the_key_type, int size) hash_table = (wxList**) NULL; Create(the_key_type, size); m_count = 0; - m_deleteContents = FALSE; + m_deleteContents = false; /* n = size; current_position = -1; @@ -393,7 +169,7 @@ bool wxHashTable::Create(int the_key_type, int size) int i; for (i = 0; i < size; i++) hash_table[i] = (wxList *) NULL; - return TRUE; + return true; } @@ -427,7 +203,7 @@ void wxHashTable::Put (long key, long value, wxObject * object) if (!hash_table[position]) { hash_table[position] = new wxList (wxKEY_INTEGER); - if (m_deleteContents) hash_table[position]->DeleteContents(TRUE); + if (m_deleteContents) hash_table[position]->DeleteContents(true); } hash_table[position]->Append (value, object); @@ -445,7 +221,7 @@ void wxHashTable::Put (long key, const wxChar *value, wxObject * object) if (!hash_table[position]) { hash_table[position] = new wxList (wxKEY_STRING); - if (m_deleteContents) hash_table[position]->DeleteContents(TRUE); + if (m_deleteContents) hash_table[position]->DeleteContents(true); } hash_table[position]->Append (value, object); @@ -463,7 +239,7 @@ void wxHashTable::Put (long key, wxObject * object) if (!hash_table[position]) { hash_table[position] = new wxList (wxKEY_INTEGER); - if (m_deleteContents) hash_table[position]->DeleteContents(TRUE); + if (m_deleteContents) hash_table[position]->DeleteContents(true); } hash_table[position]->Append (k, object); @@ -478,7 +254,7 @@ void wxHashTable::Put (const wxChar *key, wxObject * object) if (!hash_table[position]) { hash_table[position] = new wxList (wxKEY_STRING); - if (m_deleteContents) hash_table[position]->DeleteContents(TRUE); + if (m_deleteContents) hash_table[position]->DeleteContents(true); } hash_table[position]->Append (key, object); @@ -669,7 +445,7 @@ void wxHashTable::BeginFind () wxHashTable::Node* wxHashTable::Next () { wxNode *found = (wxNode *) NULL; - bool end = FALSE; + bool end = false; while (!end && !found) { if (!current_node) @@ -679,7 +455,7 @@ wxHashTable::Node* wxHashTable::Next () { current_position = -1; current_node = (wxNode *) NULL; - end = TRUE; + end = true; } else { @@ -724,9 +500,7 @@ void wxHashTable::Clear () m_count = 0; } -#else // if wxUSE_STL - -#include "wx/object.h" +#else // if !wxUSE_OLD_HASH_TABLE wxHashTableBase_Node::wxHashTableBase_Node( long key, void* value, wxHashTableBase* table ) @@ -755,11 +529,6 @@ wxHashTableBase::wxHashTableBase() { } -wxHashTableBase::~wxHashTableBase() -{ - Destroy(); -} - void wxHashTableBase::Create( wxKeyType keyType, size_t size ) { m_keyType = keyType; @@ -815,7 +584,7 @@ void wxHashTableBase::DoRemoveNode( wxHashTableBase_Node* node ) Node* prev = start; for( curr = prev->GetNext(); curr != node; - prev = curr, curr = curr->GetNext() ); + prev = curr, curr = curr->GetNext() ) ; DoUnlinkNode( bucket, node, prev ); } @@ -1025,9 +794,12 @@ long wxHashTableBase::MakeKey( const wxChar *str ) return int_key; } -// +// ---------------------------------------------------------------------------- +// wxHashTable +// ---------------------------------------------------------------------------- wxHashTable::wxHashTable( const wxHashTable& table ) + : wxHashTableBase() { DoCopy( table ); } @@ -1040,11 +812,11 @@ const wxHashTable& wxHashTable::operator=( const wxHashTable& table ) return *this; } -void wxHashTable::DoCopy( const wxHashTable& table ) +void wxHashTable::DoCopy( const wxHashTable& WXUNUSED(table) ) { Create( m_keyType, m_size ); - wxASSERT( false ); + wxFAIL; } void wxHashTable::DoDeleteContents( wxHashTableBase_Node* node ) @@ -1083,4 +855,4 @@ wxHashTable::Node* wxHashTable::Next() return m_curr; } -#endif // wxUSE_STL +#endif // !wxUSE_OLD_HASH_TABLE