Fix typo in ht_delete. Don't unnecessarily try to grow or shrink hash
authorChris Hanson <org/chris-hanson/cph>
Fri, 5 Jan 2001 20:43:06 +0000 (20:43 +0000)
committerChris Hanson <org/chris-hanson/cph>
Fri, 5 Jan 2001 20:43:06 +0000 (20:43 +0000)
table.

v7/src/microcode/string.c

index 8db21832fe3c5fca7fdb12b28afcee151ea0150c..4b1cec0c2a7b26c2a28a7458a63548ea297e2a40 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: string.c,v 9.40 2001/01/04 22:24:15 cph Exp $
+$Id: string.c,v 9.41 2001/01/05 20:43:06 cph Exp $
 
 Copyright (c) 1987-2001 Massachusetts Institute of Technology
 
@@ -727,7 +727,8 @@ DEFUN (ht_insert, (table, record),
       (HT_RECORD_NEXT (scan)) = record;
     }
   (HT_N_RECORDS (table)) += 1;
-  if ((HT_N_RECORDS (table)) >= (HT_N_BUCKETS (table)))
+  if (((HT_N_RECORDS (table)) >= (HT_N_BUCKETS (table)))
+      && ((HT_N_BUCKETS (table)) < (EXPT_TO_N (HT_MAX_EXPT))))
     {
       unsigned int e = HT_MIN_EXPT;
       while (e <= HT_MAX_EXPT)
@@ -766,7 +767,8 @@ DEFUN (ht_delete, (table, key),
   else
     (HT_RECORD_NEXT (prev)) = (HT_RECORD_NEXT (scan));
   (HT_N_RECORDS (table)) -= 1;
-  if ((HT_N_RECORDS (table)) < (HT_SHRINK_POINT (table)))
+  if (((HT_N_RECORDS (table)) < (HT_SHRINK_POINT (table)))
+      && ((HT_N_BUCKETS (table)) > (EXPT_TO_N (HT_MIN_EXPT))))
     {
       unsigned int e = HT_MAX_EXPT;
       while (e >= HT_MIN_EXPT)
@@ -777,7 +779,7 @@ DEFUN (ht_delete, (table, key),
              ht_resize (table, n);
              break;
            }
-         e += 1;
+         e -= 1;
        }
     }
   return (scan);