Maintain bins in sorted order
authorCarl Worth <cworth@cworth.org>
Tue, 17 Apr 2007 15:19:16 +0000 (08:19 -0700)
committerCarl Worth <cworth@cworth.org>
Tue, 17 Apr 2007 15:19:16 +0000 (08:19 -0700)
mnemon.c

index a1872bcf9632b9b0b00debd2d6cd0c1a5ba490b9..f35c0b7aabd8696520aef61f03239661b3ec65ba 100644 (file)
--- a/mnemon.c
+++ b/mnemon.c
@@ -345,10 +345,16 @@ mnemon_get_bin (mnemon_t  *mnemon,
     for (i = 0; i < mnemon->num_bins; i++)
        if (mnemon->bins[i].count == count)
            return &mnemon->bins[i];
+       else if (mnemon->bins[i].count > count)
+           break;
 
     mnemon_bins_grow (mnemon);
 
-    bin = &mnemon->bins[mnemon->num_bins++];
+    bin = &mnemon->bins[i];
+
+    /* Make room to insert new bin at its sorted location. */
+    memmove (bin + 1, bin, (mnemon->num_bins - i) * sizeof (bin_t));
+    mnemon->num_bins++;
 
     bin_init (bin, count);