]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed DeleteContents inconsistency: didn't free memory if DeleteContents called befor...
authorVáclav Slavík <vslavik@fastmail.fm>
Wed, 2 Feb 2000 21:17:40 +0000 (21:17 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Wed, 2 Feb 2000 21:17:40 +0000 (21:17 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5812 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/hash.h
src/common/hash.cpp

index 2e17fb019c96ffa174f15744cb5c322a0cf7cbbe..e5450054f07b57091672ef60ec5650bc0170a826 100644 (file)
@@ -104,7 +104,7 @@ class WXDLLEXPORT wxHashTable: public wxObject
 
  private:
    size_t m_count;             // number of elements in the hashtable
 
  private:
    size_t m_count;             // number of elements in the hashtable
-
+   bool m_deleteContents;
 };
 
 #endif
 };
 
 #endif
index 4c6ad97c6d6e0bd52f10305f6e5b5195fe96d00e..5110f8228c3781394030b0c92e9998fffc646674 100644 (file)
@@ -37,6 +37,7 @@ wxHashTable::wxHashTable (int the_key_type, int size)
   hash_table = (wxList**) NULL;
   Create(the_key_type, size);
   m_count = 0;
   hash_table = (wxList**) NULL;
   Create(the_key_type, size);
   m_count = 0;
+  m_deleteContents = FALSE;
 /*
   n = size;
   current_position = -1;
 /*
   n = size;
   current_position = -1;
@@ -110,7 +111,10 @@ void wxHashTable::Put (long key, long value, wxObject * object)
 
   int position = (int) (k % n);
   if (!hash_table[position])
 
   int position = (int) (k % n);
   if (!hash_table[position])
+  {
     hash_table[position] = new wxList (wxKEY_INTEGER);
     hash_table[position] = new wxList (wxKEY_INTEGER);
+    if (m_deleteContents) hash_table[position]->DeleteContents(TRUE);
+  }
 
   hash_table[position]->Append (value, object);
   m_count++;
 
   hash_table[position]->Append (value, object);
   m_count++;
@@ -125,7 +129,10 @@ void wxHashTable::Put (long key, const wxChar *value, wxObject * object)
 
   int position = (int) (k % n);
   if (!hash_table[position])
 
   int position = (int) (k % n);
   if (!hash_table[position])
+  {
     hash_table[position] = new wxList (wxKEY_INTEGER);
     hash_table[position] = new wxList (wxKEY_INTEGER);
+    if (m_deleteContents) hash_table[position]->DeleteContents(TRUE);
+  }
 
   hash_table[position]->Append (value, object);
   m_count++;
 
   hash_table[position]->Append (value, object);
   m_count++;
@@ -140,8 +147,11 @@ void wxHashTable::Put (long key, wxObject * object)
 
   int position = (int) (k % n);
   if (!hash_table[position])
 
   int position = (int) (k % n);
   if (!hash_table[position])
+  {
     hash_table[position] = new wxList (wxKEY_INTEGER);
     hash_table[position] = new wxList (wxKEY_INTEGER);
-
+    if (m_deleteContents) hash_table[position]->DeleteContents(TRUE);
+  }
+  
   hash_table[position]->Append (k, object);
   m_count++;
 }
   hash_table[position]->Append (k, object);
   m_count++;
 }
@@ -151,7 +161,10 @@ void wxHashTable::Put (const wxChar *key, wxObject * object)
   int position = (int) (MakeKey (key) % n);
 
   if (!hash_table[position])
   int position = (int) (MakeKey (key) % n);
 
   if (!hash_table[position])
+  {
     hash_table[position] = new wxList (wxKEY_STRING);
     hash_table[position] = new wxList (wxKEY_STRING);
+    if (m_deleteContents) hash_table[position]->DeleteContents(TRUE);
+  }
 
   hash_table[position]->Append (key, object);
   m_count++;
 
   hash_table[position]->Append (key, object);
   m_count++;
@@ -369,6 +382,7 @@ wxNode *wxHashTable::Next (void)
 void wxHashTable::DeleteContents (bool flag)
 {
   int i;
 void wxHashTable::DeleteContents (bool flag)
 {
   int i;
+  m_deleteContents = flag;
   for (i = 0; i < n; i++)
     {
       if (hash_table[i])
   for (i = 0; i < n; i++)
     {
       if (hash_table[i])