// Modified by: VZ at 25.02.00: type safe hashes with WX_DECLARE_HASH()
// Created: 01/02/97
// RCS-ID: $Id$
-// Copyright: (c) Julian Smart and Markus Holzem
+// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "hash.h"
#endif
#include "wx/hash.h"
+#if !wxUSE_STL
+
#include <string.h>
#include <stdarg.h>
return node;
}
+#if WXWIN_COMPATIBILITY_2_4
+
// ----------------------------------------------------------------------------
// wxHashTableLong
// ----------------------------------------------------------------------------
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
// ----------------------------------------------------------------------------
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;
if (!hash_table[position])
{
- hash_table[position] = new wxList (wxKEY_STRING);
+ hash_table[position] = new wxList (wxKEY_INTEGER);
if (m_deleteContents) hash_table[position]->DeleteContents(TRUE);
}
if (!hash_table[position])
{
- hash_table[position] = new wxList (wxKEY_INTEGER);
+ hash_table[position] = new wxList (wxKEY_STRING);
if (m_deleteContents) hash_table[position]->DeleteContents(TRUE);
}
{
wxNode *node = hash_table[position]->Find (value);
if (node)
- return node->Data ();
+ return node->GetData ();
else
return (wxObject *) NULL;
}
{
wxNode *node = hash_table[position]->Find (value);
if (node)
- return node->Data ();
+ return node->GetData ();
else
return (wxObject *) NULL;
}
else
{
wxNode *node = hash_table[position]->Find (k);
- return node ? node->Data () : (wxObject*)NULL;
+ return node ? node->GetData () : (wxObject*)NULL;
}
}
else
{
wxNode *node = hash_table[position]->Find (key);
- return node ? node->Data () : (wxObject*)NULL;
+ return node ? node->GetData () : (wxObject*)NULL;
}
}
wxNode *node = hash_table[position]->Find (k);
if (node)
{
- wxObject *data = node->Data ();
+ wxObject *data = node->GetData ();
delete node;
m_count--;
return data;
wxNode *node = hash_table[position]->Find (key);
if (node)
{
- wxObject *data = node->Data ();
+ wxObject *data = node->GetData ();
delete node;
m_count--;
return data;
wxNode *node = hash_table[position]->Find (value);
if (node)
{
- wxObject *data = node->Data ();
+ wxObject *data = node->GetData ();
delete node;
m_count--;
return data;
wxNode *node = hash_table[position]->Find (value);
if (node)
{
- wxObject *data = node->Data ();
+ wxObject *data = node->GetData ();
delete node;
m_count--;
return data;
{
if (hash_table[current_position])
{
- current_node = hash_table[current_position]->First ();
+ current_node = hash_table[current_position]->GetFirst ();
found = current_node;
}
}
}
else
{
- current_node = current_node->Next ();
+ current_node = current_node->GetNext ();
found = current_node;
}
}
void wxHashTable::Clear ()
{
- int i;
- for (i = 0; i < n; i++)
+ int i;
+ if (hash_table)
{
- if (hash_table[i])
- hash_table[i]->Clear ();
+ for (i = 0; i < n; i++)
+ {
+ if (hash_table[i])
+ hash_table[i]->Clear ();
+ }
}
m_count = 0;
}
+#endif // !wxUSE_STL