]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/hash.cpp
Now wxGIFDecoder always tries to read to the end of the GIF data.
[wxWidgets.git] / src / common / hash.cpp
index fbee85aceb619cce06625fec8cb3dbbfb793509e..5110f8228c3781394030b0c92e9998fffc646674 100644 (file)
@@ -33,6 +33,12 @@ IMPLEMENT_DYNAMIC_CLASS(wxHashTable, wxObject)
 
 wxHashTable::wxHashTable (int the_key_type, int size)
 {
+  n = 0;
+  hash_table = (wxList**) NULL;
+  Create(the_key_type, size);
+  m_count = 0;
+  m_deleteContents = FALSE;
+/*
   n = size;
   current_position = -1;
   current_node = (wxNode *) NULL;
@@ -42,6 +48,7 @@ wxHashTable::wxHashTable (int the_key_type, int size)
   int i;
   for (i = 0; i < size; i++)
     hash_table[i] = (wxList *) NULL;
+*/
 }
 
 wxHashTable::~wxHashTable (void)
@@ -62,13 +69,13 @@ void wxHashTable::Destroy(void)
 
 bool wxHashTable::Create(int the_key_type, int size)
 {
+  Destroy();
+
   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++)
@@ -104,9 +111,13 @@ void wxHashTable::Put (long key, long value, wxObject * object)
 
   int position = (int) (k % n);
   if (!hash_table[position])
+  {
     hash_table[position] = new wxList (wxKEY_INTEGER);
+    if (m_deleteContents) hash_table[position]->DeleteContents(TRUE);
+  }
 
   hash_table[position]->Append (value, object);
+  m_count++;
 }
 
 void wxHashTable::Put (long key, const wxChar *value, wxObject * object)
@@ -118,9 +129,13 @@ void wxHashTable::Put (long key, const wxChar *value, wxObject * object)
 
   int position = (int) (k % n);
   if (!hash_table[position])
+  {
     hash_table[position] = new wxList (wxKEY_INTEGER);
+    if (m_deleteContents) hash_table[position]->DeleteContents(TRUE);
+  }
 
   hash_table[position]->Append (value, object);
+  m_count++;
 }
 
 void wxHashTable::Put (long key, wxObject * object)
@@ -132,9 +147,13 @@ void wxHashTable::Put (long key, wxObject * object)
 
   int position = (int) (k % n);
   if (!hash_table[position])
+  {
     hash_table[position] = new wxList (wxKEY_INTEGER);
-
+    if (m_deleteContents) hash_table[position]->DeleteContents(TRUE);
+  }
+  
   hash_table[position]->Append (k, object);
+  m_count++;
 }
 
 void wxHashTable::Put (const wxChar *key, wxObject * object)
@@ -142,9 +161,13 @@ void wxHashTable::Put (const wxChar *key, wxObject * object)
   int position = (int) (MakeKey (key) % n);
 
   if (!hash_table[position])
+  {
     hash_table[position] = new wxList (wxKEY_STRING);
+    if (m_deleteContents) hash_table[position]->DeleteContents(TRUE);
+  }
 
   hash_table[position]->Append (key, object);
+  m_count++;
 }
 
 wxObject *wxHashTable::Get (long key, long value) const
@@ -234,6 +257,7 @@ wxObject *wxHashTable::Delete (long key)
        {
          wxObject *data = node->Data ();
          delete node;
+         m_count--;
          return data;
        }
       else
@@ -253,6 +277,7 @@ wxObject *wxHashTable::Delete (const wxChar *key)
        {
          wxObject *data = node->Data ();
          delete node;
+         m_count--;
          return data;
        }
       else
@@ -277,6 +302,7 @@ wxObject *wxHashTable::Delete (long key, int value)
        {
          wxObject *data = node->Data ();
          delete node;
+         m_count--;
          return data;
        }
       else
@@ -296,6 +322,7 @@ wxObject *wxHashTable::Delete (long key, const wxChar *value)
        {
          wxObject *data = node->Data ();
          delete node;
+         m_count--;
          return data;
        }
       else
@@ -355,6 +382,7 @@ wxNode *wxHashTable::Next (void)
 void wxHashTable::DeleteContents (bool flag)
 {
   int i;
+  m_deleteContents = flag;
   for (i = 0; i < n; i++)
     {
       if (hash_table[i])
@@ -370,5 +398,6 @@ void wxHashTable::Clear (void)
       if (hash_table[i])
        hash_table[i]->Clear ();
     }
+  m_count = 0;
 }