]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/hash.cpp
added #if wxUSE_CLIPBOARD
[wxWidgets.git] / src / common / hash.cpp
index 1aba64563c41095de7271e009503b776427a4a1d..330f4b990a33f9589189a48cfc66fb76abfcfe70 100644 (file)
 IMPLEMENT_DYNAMIC_CLASS(wxHashTable, wxObject)
 #endif
 
 IMPLEMENT_DYNAMIC_CLASS(wxHashTable, wxObject)
 #endif
 
-wxHashTable::wxHashTable (const int the_key_type, const int size)
+wxHashTable::wxHashTable (int the_key_type, int size)
 {
   n = size;
   current_position = -1;
 {
   n = size;
   current_position = -1;
-  current_node = NULL;
+  current_node = (wxNode *) NULL;
 
   key_type = the_key_type;
   hash_table = new wxList *[size];
   int i;
   for (i = 0; i < size; i++)
 
   key_type = the_key_type;
   hash_table = new wxList *[size];
   int i;
   for (i = 0; i < size; i++)
-    hash_table[i] = NULL;
+    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(const int the_key_type, const int size)
+bool wxHashTable::Create(int the_key_type, int size)
 {
   n = size;
   current_position = -1;
 {
   n = size;
   current_position = -1;
-  current_node = NULL;
+  current_node = (wxNode *) NULL;
 
   key_type = the_key_type;
   if (hash_table)
 
   key_type = the_key_type;
   if (hash_table)
@@ -67,11 +74,30 @@ bool wxHashTable::Create(const int the_key_type, const int size)
   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++)
-    hash_table[i] = NULL;
+    hash_table[i] = (wxList *) NULL;
   return TRUE;
 }
 
   return TRUE;
 }
 
-void wxHashTable::Put (const long key, const long value, wxObject * object)
+
+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
   long k = (long) key;
 {
   // Should NEVER be
   long k = (long) key;
@@ -85,7 +111,7 @@ void wxHashTable::Put (const long key, const long value, wxObject * object)
   hash_table[position]->Append (value, object);
 }
 
   hash_table[position]->Append (value, object);
 }
 
-void wxHashTable::Put (const 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;
@@ -99,7 +125,7 @@ void wxHashTable::Put (const long key, const char *value, wxObject * object)
   hash_table[position]->Append (value, object);
 }
 
   hash_table[position]->Append (value, object);
 }
 
-void wxHashTable::Put (const long key, wxObject * object)
+void wxHashTable::Put (long key, wxObject * object)
 {
   // Should NEVER be
   long k = (long) key;
 {
   // Should NEVER be
   long k = (long) key;
@@ -113,7 +139,7 @@ void wxHashTable::Put (const long key, wxObject * object)
   hash_table[position]->Append (k, object);
 }
 
   hash_table[position]->Append (k, object);
 }
 
-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);
 
@@ -123,7 +149,7 @@ void wxHashTable::Put (const char *key, wxObject * object)
   hash_table[position]->Append (key, object);
 }
 
   hash_table[position]->Append (key, object);
 }
 
-wxObject *wxHashTable::Get (const long key, const long value) const
+wxObject *wxHashTable::Get (long key, long value) const
 {
   // Should NEVER be
   long k = (long) key;
 {
   // Should NEVER be
   long k = (long) key;
@@ -132,18 +158,18 @@ wxObject *wxHashTable::Get (const long key, const long value) const
 
   int position = (int) (k % n);
   if (!hash_table[position])
 
   int position = (int) (k % n);
   if (!hash_table[position])
-    return NULL;
+    return (wxObject *) NULL;
   else
     {
       wxNode *node = hash_table[position]->Find (value);
       if (node)
        return node->Data ();
       else
   else
     {
       wxNode *node = hash_table[position]->Find (value);
       if (node)
        return node->Data ();
       else
-       return NULL;
+       return (wxObject *) NULL;
     }
 }
 
     }
 }
 
-wxObject *wxHashTable::Get (const 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;
@@ -152,18 +178,18 @@ wxObject *wxHashTable::Get (const long key, const char *value) const
 
   int position = (int) (k % n);
   if (!hash_table[position])
 
   int position = (int) (k % n);
   if (!hash_table[position])
-    return NULL;
+    return (wxObject *) NULL;
   else
     {
       wxNode *node = hash_table[position]->Find (value);
       if (node)
        return node->Data ();
       else
   else
     {
       wxNode *node = hash_table[position]->Find (value);
       if (node)
        return node->Data ();
       else
-       return NULL;
+       return (wxObject *) NULL;
     }
 }
 
     }
 }
 
-wxObject *wxHashTable::Get (const long key) const
+wxObject *wxHashTable::Get (long key) const
 {
   // Should NEVER be
   long k = (long) key;
 {
   // Should NEVER be
   long k = (long) key;
@@ -172,7 +198,7 @@ wxObject *wxHashTable::Get (const long key) const
 
   int position = (int) (k % n);
   if (!hash_table[position])
 
   int position = (int) (k % n);
   if (!hash_table[position])
-    return NULL;
+    return (wxObject *) NULL;
   else
     {
       wxNode *node = hash_table[position]->Find (k);
   else
     {
       wxNode *node = hash_table[position]->Find (k);
@@ -180,12 +206,12 @@ wxObject *wxHashTable::Get (const long key) const
     }
 }
 
     }
 }
 
-wxObject *wxHashTable::Get (const char *key) const
+wxObject *wxHashTable::Get (const wxChar *key) const
 {
   int position = (int) (MakeKey (key) % n);
 
   if (!hash_table[position])
 {
   int position = (int) (MakeKey (key) % n);
 
   if (!hash_table[position])
-    return NULL;
+    return (wxObject *) NULL;
   else
     {
       wxNode *node = hash_table[position]->Find (key);
   else
     {
       wxNode *node = hash_table[position]->Find (key);
@@ -193,7 +219,7 @@ wxObject *wxHashTable::Get (const char *key) const
     }
 }
 
     }
 }
 
-wxObject *wxHashTable::Delete (const long key)
+wxObject *wxHashTable::Delete (long key)
 {
   // Should NEVER be
   long k = (long) key;
 {
   // Should NEVER be
   long k = (long) key;
@@ -202,7 +228,7 @@ wxObject *wxHashTable::Delete (const long key)
 
   int position = (int) (k % n);
   if (!hash_table[position])
 
   int position = (int) (k % n);
   if (!hash_table[position])
-    return NULL;
+    return (wxObject *) NULL;
   else
     {
       wxNode *node = hash_table[position]->Find (k);
   else
     {
       wxNode *node = hash_table[position]->Find (k);
@@ -213,15 +239,15 @@ wxObject *wxHashTable::Delete (const long key)
          return data;
        }
       else
          return data;
        }
       else
-       return NULL;
+       return (wxObject *) NULL;
     }
 }
 
     }
 }
 
-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])
-    return NULL;
+    return (wxObject *) NULL;
   else
     {
       wxNode *node = hash_table[position]->Find (key);
   else
     {
       wxNode *node = hash_table[position]->Find (key);
@@ -232,11 +258,11 @@ wxObject *wxHashTable::Delete (const char *key)
          return data;
        }
       else
          return data;
        }
       else
-       return NULL;
+       return (wxObject *) NULL;
     }
 }
 
     }
 }
 
-wxObject *wxHashTable::Delete (const long key, const int value)
+wxObject *wxHashTable::Delete (long key, int value)
 {
   // Should NEVER be
   long k = (long) key;
 {
   // Should NEVER be
   long k = (long) key;
@@ -245,7 +271,7 @@ wxObject *wxHashTable::Delete (const long key, const int value)
 
   int position = (int) (k % n);
   if (!hash_table[position])
 
   int position = (int) (k % n);
   if (!hash_table[position])
-    return NULL;
+    return (wxObject *) NULL;
   else
     {
       wxNode *node = hash_table[position]->Find (value);
   else
     {
       wxNode *node = hash_table[position]->Find (value);
@@ -256,15 +282,15 @@ wxObject *wxHashTable::Delete (const long key, const int value)
          return data;
        }
       else
          return data;
        }
       else
-       return NULL;
+       return (wxObject *) NULL;
     }
 }
 
     }
 }
 
-wxObject *wxHashTable::Delete (const 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])
-    return NULL;
+    return (wxObject *) NULL;
   else
     {
       wxNode *node = hash_table[position]->Find (value);
   else
     {
       wxNode *node = hash_table[position]->Find (value);
@@ -275,16 +301,16 @@ wxObject *wxHashTable::Delete (const long key, const char *value)
          return data;
        }
       else
          return data;
        }
       else
-       return NULL;
+       return (wxObject *) NULL;
     }
 }
 
     }
 }
 
-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;
 }
@@ -292,12 +318,12 @@ long wxHashTable::MakeKey (const char *string) const
 void wxHashTable::BeginFind (void)
 {
   current_position = -1;
 void wxHashTable::BeginFind (void)
 {
   current_position = -1;
-  current_node = NULL;
+  current_node = (wxNode *) NULL;
 }
 
 wxNode *wxHashTable::Next (void)
 {
 }
 
 wxNode *wxHashTable::Next (void)
 {
-  wxNode *found = NULL;
+  wxNode *found = (wxNode *) NULL;
   bool end = FALSE;
   while (!end && !found)
     {
   bool end = FALSE;
   while (!end && !found)
     {
@@ -307,7 +333,7 @@ wxNode *wxHashTable::Next (void)
          if (current_position >= n)
            {
              current_position = -1;
          if (current_position >= n)
            {
              current_position = -1;
-             current_node = NULL;
+             current_node = (wxNode *) NULL;
              end = TRUE;
            }
          else
              end = TRUE;
            }
          else
@@ -328,7 +354,7 @@ wxNode *wxHashTable::Next (void)
   return found;
 }
 
   return found;
 }
 
-void wxHashTable::DeleteContents (const bool flag)
+void wxHashTable::DeleteContents (bool flag)
 {
   int i;
   for (i = 0; i < n; i++)
 {
   int i;
   for (i = 0; i < n; i++)