]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/hash.cpp
wxBase compilation fixes
[wxWidgets.git] / src / common / hash.cpp
index f4139dd5f9d7beadf69ad7de653a1d401e1fc6e3..4c6ad97c6d6e0bd52f10305f6e5b5195fe96d00e 100644 (file)
 #include <string.h>
 #include <stdarg.h>
 
 #include <string.h>
 #include <stdarg.h>
 
-#if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxHashTable, wxObject)
 IMPLEMENT_DYNAMIC_CLASS(wxHashTable, wxObject)
-#endif
 
 wxHashTable::wxHashTable (int the_key_type, int size)
 {
 
 wxHashTable::wxHashTable (int the_key_type, int size)
 {
+  n = 0;
+  hash_table = (wxList**) NULL;
+  Create(the_key_type, size);
+  m_count = 0;
+/*
   n = size;
   current_position = -1;
   current_node = (wxNode *) NULL;
   n = size;
   current_position = -1;
   current_node = (wxNode *) NULL;
@@ -44,26 +47,34 @@ wxHashTable::wxHashTable (int the_key_type, int size)
   int i;
   for (i = 0; i < size; i++)
     hash_table[i] = (wxList *) NULL;
   int i;
   for (i = 0; i < size; i++)
     hash_table[i] = (wxList *) NULL;
+*/
 }
 
 wxHashTable::~wxHashTable (void)
 {
 }
 
 wxHashTable::~wxHashTable (void)
 {
+  Destroy();
+}
+
+void wxHashTable::Destroy(void)
+{
+  if (!hash_table) return;
   int i;
   for (i = 0; i < n; i++)
     if (hash_table[i])
       delete hash_table[i];
   delete[] hash_table;
   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)
 {
 }
 
 bool wxHashTable::Create(int the_key_type, int size)
 {
+  Destroy();
+
   n = size;
   current_position = -1;
   current_node = (wxNode *) NULL;
 
   key_type = the_key_type;
   n = size;
   current_position = -1;
   current_node = (wxNode *) NULL;
 
   key_type = the_key_type;
-  if (hash_table)
-    delete[] hash_table;
   hash_table = new wxList *[size];
   int i;
   for (i = 0; i < size; i++)
   hash_table = new wxList *[size];
   int i;
   for (i = 0; i < size; i++)
@@ -71,6 +82,25 @@ bool wxHashTable::Create(int the_key_type, int size)
   return TRUE;
 }
 
   return TRUE;
 }
 
+
+void wxHashTable::DoCopy(const wxHashTable& table)
+{
+  n = table.n;
+  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
 void wxHashTable::Put (long key, long value, wxObject * object)
 {
   // Should NEVER be
@@ -83,9 +113,10 @@ void wxHashTable::Put (long key, long value, wxObject * object)
     hash_table[position] = new wxList (wxKEY_INTEGER);
 
   hash_table[position]->Append (value, object);
     hash_table[position] = new wxList (wxKEY_INTEGER);
 
   hash_table[position]->Append (value, object);
+  m_count++;
 }
 
 }
 
-void wxHashTable::Put (long key, const char *value, wxObject * object)
+void wxHashTable::Put (long key, const wxChar *value, wxObject * object)
 {
   // Should NEVER be
   long k = (long) key;
 {
   // Should NEVER be
   long k = (long) key;
@@ -97,6 +128,7 @@ void wxHashTable::Put (long key, const char *value, wxObject * object)
     hash_table[position] = new wxList (wxKEY_INTEGER);
 
   hash_table[position]->Append (value, object);
     hash_table[position] = new wxList (wxKEY_INTEGER);
 
   hash_table[position]->Append (value, object);
+  m_count++;
 }
 
 void wxHashTable::Put (long key, wxObject * object)
 }
 
 void wxHashTable::Put (long key, wxObject * object)
@@ -111,9 +143,10 @@ void wxHashTable::Put (long key, wxObject * object)
     hash_table[position] = new wxList (wxKEY_INTEGER);
 
   hash_table[position]->Append (k, object);
     hash_table[position] = new wxList (wxKEY_INTEGER);
 
   hash_table[position]->Append (k, object);
+  m_count++;
 }
 
 }
 
-void wxHashTable::Put (const char *key, wxObject * object)
+void wxHashTable::Put (const wxChar *key, wxObject * object)
 {
   int position = (int) (MakeKey (key) % n);
 
 {
   int position = (int) (MakeKey (key) % n);
 
@@ -121,6 +154,7 @@ void wxHashTable::Put (const char *key, wxObject * object)
     hash_table[position] = new wxList (wxKEY_STRING);
 
   hash_table[position]->Append (key, object);
     hash_table[position] = new wxList (wxKEY_STRING);
 
   hash_table[position]->Append (key, object);
+  m_count++;
 }
 
 wxObject *wxHashTable::Get (long key, long value) const
 }
 
 wxObject *wxHashTable::Get (long key, long value) const
@@ -143,7 +177,7 @@ wxObject *wxHashTable::Get (long key, long value) const
     }
 }
 
     }
 }
 
-wxObject *wxHashTable::Get (long key, const char *value) const
+wxObject *wxHashTable::Get (long key, const wxChar *value) const
 {
   // Should NEVER be
   long k = (long) key;
 {
   // Should NEVER be
   long k = (long) key;
@@ -180,7 +214,7 @@ wxObject *wxHashTable::Get (long key) const
     }
 }
 
     }
 }
 
-wxObject *wxHashTable::Get (const char *key) const
+wxObject *wxHashTable::Get (const wxChar *key) const
 {
   int position = (int) (MakeKey (key) % n);
 
 {
   int position = (int) (MakeKey (key) % n);
 
@@ -210,6 +244,7 @@ wxObject *wxHashTable::Delete (long key)
        {
          wxObject *data = node->Data ();
          delete node;
        {
          wxObject *data = node->Data ();
          delete node;
+         m_count--;
          return data;
        }
       else
          return data;
        }
       else
@@ -217,7 +252,7 @@ wxObject *wxHashTable::Delete (long key)
     }
 }
 
     }
 }
 
-wxObject *wxHashTable::Delete (const char *key)
+wxObject *wxHashTable::Delete (const wxChar *key)
 {
   int position = (int) (MakeKey (key) % n);
   if (!hash_table[position])
 {
   int position = (int) (MakeKey (key) % n);
   if (!hash_table[position])
@@ -229,6 +264,7 @@ wxObject *wxHashTable::Delete (const char *key)
        {
          wxObject *data = node->Data ();
          delete node;
        {
          wxObject *data = node->Data ();
          delete node;
+         m_count--;
          return data;
        }
       else
          return data;
        }
       else
@@ -253,6 +289,7 @@ wxObject *wxHashTable::Delete (long key, int value)
        {
          wxObject *data = node->Data ();
          delete node;
        {
          wxObject *data = node->Data ();
          delete node;
+         m_count--;
          return data;
        }
       else
          return data;
        }
       else
@@ -260,7 +297,7 @@ wxObject *wxHashTable::Delete (long key, int value)
     }
 }
 
     }
 }
 
-wxObject *wxHashTable::Delete (long key, const char *value)
+wxObject *wxHashTable::Delete (long key, const wxChar *value)
 {
   int position = (int) (key % n);
   if (!hash_table[position])
 {
   int position = (int) (key % n);
   if (!hash_table[position])
@@ -272,6 +309,7 @@ wxObject *wxHashTable::Delete (long key, const char *value)
        {
          wxObject *data = node->Data ();
          delete node;
        {
          wxObject *data = node->Data ();
          delete node;
+         m_count--;
          return data;
        }
       else
          return data;
        }
       else
@@ -279,12 +317,12 @@ wxObject *wxHashTable::Delete (long key, const char *value)
     }
 }
 
     }
 }
 
-long wxHashTable::MakeKey (const char *string) const
+long wxHashTable::MakeKey (const wxChar *string) const
 {
   long int_key = 0;
 
   while (*string)
 {
   long int_key = 0;
 
   while (*string)
-    int_key += (unsigned char) *string++;
+    int_key += (wxUChar) *string++;
 
   return int_key;
 }
 
   return int_key;
 }
@@ -346,5 +384,6 @@ void wxHashTable::Clear (void)
       if (hash_table[i])
        hash_table[i]->Clear ();
     }
       if (hash_table[i])
        hash_table[i]->Clear ();
     }
+  m_count = 0;
 }
 
 }