+
+// ============================================================================
+// 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(key % 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
+// ----------------------------------------------------------------------------