]> git.saurik.com Git - bison.git/blobdiff - lib/bitset_stats.c
Include <stddef.h>, for offsetof.
[bison.git] / lib / bitset_stats.c
index 11f3d6f8221c88eec1db4ff96a047d06b8d27afc..5bccac374f348de13e12c42a1e5a853bd7df33a0 100644 (file)
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_density[(I)]++
 
 
-typedef struct bitset_stats_struct
-{
-  bitset bset;
-} *bitset_stats;
-
-
-struct bitset_struct
-{
-  struct bbitset_struct b;
-  struct bitset_stats_struct s;
-};
-
-
 struct bitset_type_info_struct
 {
   unsigned int allocs;
@@ -118,16 +105,36 @@ int bitset_stats_enabled = 0;
 
 static void bitset_stats_set PARAMS ((bitset, bitset_bindex));
 static void bitset_stats_reset PARAMS ((bitset, bitset_bindex));
+static int bitset_stats_toggle PARAMS ((bitset, bitset_bindex));
 static int bitset_stats_test PARAMS ((bitset, bitset_bindex));
-static int bitset_stats_size PARAMS ((bitset));
-static int bitset_stats_op1 PARAMS ((bitset, enum bitset_ops));
-static int bitset_stats_op2 PARAMS ((bitset, bitset, enum bitset_ops));
-static int bitset_stats_op3 PARAMS ((bitset, bitset, bitset, enum bitset_ops));
-static int bitset_stats_op4 PARAMS ((bitset, bitset, bitset, bitset,
-                                    enum bitset_ops));
-static int bitset_stats_list PARAMS ((bitset, bitset_bindex *, bitset_bindex,
-                                     bitset_bindex *));
-static int bitset_stats_reverse_list
+static bitset_bindex bitset_stats_size PARAMS ((bitset));
+static bitset_bindex bitset_stats_count PARAMS ((bitset));
+static int bitset_stats_empty_p PARAMS ((bitset));
+static void bitset_stats_ones PARAMS ((bitset));
+static void bitset_stats_zero PARAMS ((bitset));
+static void bitset_stats_copy PARAMS ((bitset, bitset));
+static int bitset_stats_disjoint_p PARAMS ((bitset, bitset));
+static int bitset_stats_equal_p PARAMS ((bitset, bitset));
+static void bitset_stats_not PARAMS ((bitset, bitset));
+static int bitset_stats_subset_p PARAMS ((bitset, bitset));
+static void bitset_stats_and PARAMS ((bitset, bitset, bitset));
+static int bitset_stats_and_cmp PARAMS ((bitset, bitset, bitset));
+static void bitset_stats_andn PARAMS ((bitset, bitset, bitset));
+static int bitset_stats_andn_cmp PARAMS ((bitset, bitset, bitset));
+static void bitset_stats_or PARAMS ((bitset, bitset, bitset));
+static int bitset_stats_or_cmp PARAMS ((bitset, bitset, bitset));
+static void bitset_stats_xor PARAMS ((bitset, bitset, bitset));
+static int bitset_stats_xor_cmp PARAMS ((bitset, bitset, bitset));
+static void bitset_stats_and_or PARAMS ((bitset, bitset, bitset, bitset));
+static int bitset_stats_and_or_cmp PARAMS ((bitset, bitset, bitset, bitset));
+static void bitset_stats_andn_or PARAMS ((bitset, bitset, bitset, bitset));
+static int bitset_stats_andn_or_cmp PARAMS ((bitset, bitset, bitset, bitset));
+static void bitset_stats_or_and PARAMS ((bitset, bitset, bitset, bitset));
+static int bitset_stats_or_and_cmp PARAMS ((bitset, bitset, bitset, bitset));
+static bitset_bindex bitset_stats_list PARAMS ((bitset, bitset_bindex *,
+                                               bitset_bindex,
+                                               bitset_bindex *));
+static bitset_bindex bitset_stats_list_reverse
 PARAMS ((bitset, bitset_bindex *, bitset_bindex, bitset_bindex *));
 static void bitset_stats_free PARAMS ((bitset));
 static void bitset_percent_histogram_print PARAMS ((FILE *, const char *,
@@ -164,7 +171,7 @@ bitset_percent_histogram_print (file, name, msg, n_bins, bins)
 
   fprintf (file, "%s %s", name, msg);
   for (i = 0; i < n_bins; i++)
-    fprintf (file, "%.0f-%.0f%%\t%8d (%5.1f%%)\n",
+    fprintf (file, "%.0f-%.0f%%\t%8u (%5.1f%%)\n",
             i * 100.0 / n_bins,
             (i + 1) * 100.0 / n_bins, bins[i],
             (100.0 * bins[i]) / total);
@@ -183,7 +190,6 @@ bitset_log_histogram_print (file, name, msg, n_bins, bins)
   unsigned int i;
   unsigned int total;
   unsigned int max_width;
-  unsigned int last_bin;
 
   total = 0;
   for (i = 0; i < n_bins; i++)
@@ -192,22 +198,25 @@ bitset_log_histogram_print (file, name, msg, n_bins, bins)
   if (!total)
     return;
 
+  /* Determine number of useful bins.  */
   for (i = n_bins; i > 3 && ! bins[i - 1]; i--)
      continue;
-  last_bin = i - 1;
+  n_bins = i;
 
   /* 2 * ceil (log10 (2) * (N - 1)) + 1.  */
   max_width = 2 * (unsigned int) (0.30103 * (n_bins - 1) + 0.9999) + 1;
 
   fprintf (file, "%s %s", name, msg);
   for (i = 0; i < 2; i++)
-    fprintf (file, "%*d\t%8d (%5.1f%%)\n",
+    fprintf (file, "%*d\t%8u (%5.1f%%)\n",
             max_width, i, bins[i], 100.0 * bins[i] / total);
 
-  for (; i <= last_bin; i++)
-    fprintf (file, "%*d-%d\t%8d (%5.1f%%)\n",
+  for (; i < n_bins; i++)
+    fprintf (file, "%*lu-%lu\t%8u (%5.1f%%)\n",
             max_width - ((unsigned int) (0.30103 * (i) + 0.9999) + 1),
-            1 << (i - 1), (1 << i) - 1, bins[i],
+            (unsigned long) 1 << (i - 1),
+            ((unsigned long) 1 << i) - 1,
+            bins[i],
             (100.0 * bins[i]) / total);
 }
 
@@ -223,20 +232,20 @@ bitset_stats_print_1 (file, name, stats)
     return;
   
   fprintf (file, "%s:\n", name);
-  fprintf (file, _("%d bitset_allocs, %d freed (%.2f%%).\n"),
+  fprintf (file, _("%u bitset_allocs, %u freed (%.2f%%).\n"),
           stats->allocs, stats->frees,
           stats->allocs ? 100.0 * stats->frees / stats->allocs : 0);
-  fprintf (file, _("%d bitset_sets, %d cached (%.2f%%)\n"),
+  fprintf (file, _("%u bitset_sets, %u cached (%.2f%%)\n"),
           stats->sets, stats->cache_sets,
           stats->sets ? 100.0 * stats->cache_sets / stats->sets : 0);
-  fprintf (file, _("%d bitset_resets, %d cached (%.2f%%)\n"),
+  fprintf (file, _("%u bitset_resets, %u cached (%.2f%%)\n"),
           stats->resets, stats->cache_resets,
           stats->resets ? 100.0 * stats->cache_resets / stats->resets : 0);
-  fprintf (file, _("%d bitset_tests, %d cached (%.2f%%)\n"),
+  fprintf (file, _("%u bitset_tests, %u cached (%.2f%%)\n"),
           stats->tests, stats->cache_tests,
           stats->tests ? 100.0 * stats->cache_tests / stats->tests : 0);
 
-  fprintf (file, _("%d bitset_lists\n"), stats->lists);
+  fprintf (file, _("%u bitset_lists\n"), stats->lists);
 
   bitset_log_histogram_print (file, name, _("count log histogram\n"),
                              BITSET_LOG_COUNT_BINS, stats->list_counts);
@@ -256,7 +265,6 @@ bitset_stats_print (file, verbose)
      int verbose ATTRIBUTE_UNUSED;
 {
   int i;
-  static const char *names[] = BITSET_TYPE_NAMES;
 
   if (!bitset_stats_info)
     return;
@@ -264,10 +272,11 @@ bitset_stats_print (file, verbose)
   fprintf (file, _("Bitset statistics:\n\n"));
 
   if (bitset_stats_info->runs > 1)
-    fprintf (file, _("Accumulated runs = %d\n"), bitset_stats_info->runs);
+    fprintf (file, _("Accumulated runs = %u\n"), bitset_stats_info->runs);
 
   for (i = 0; i < BITSET_TYPE_NUM; i++)
-    bitset_stats_print_1 (file, names[i], &bitset_stats_info->types[i]);
+    bitset_stats_print_1 (file, bitset_type_names[i], 
+                         &bitset_stats_info->types[i]);
 }
 
 
@@ -404,6 +413,15 @@ bitset_stats_reset (dst, bitno)
 }
 
 
+static int
+bitset_stats_toggle (src, bitno)
+     bitset src;
+     bitset_bindex bitno;
+{
+    return BITSET_TOGGLE_ (src->s.bset, bitno);
+}
+
+
 static int
 bitset_stats_test (src, bitno)
      bitset src;
@@ -425,7 +443,7 @@ bitset_stats_test (src, bitno)
 }
 
 
-static int
+static bitset_bindex
 bitset_stats_size (src)
      bitset src;
 {
@@ -433,61 +451,255 @@ bitset_stats_size (src)
 }
 
 
+static bitset_bindex
+bitset_stats_count (src)
+     bitset src;
+{
+  return BITSET_COUNT_ (src->s.bset);
+}
+
+
 static int
-bitset_stats_op1 (dst, op)
+bitset_stats_empty_p (dst)
+     bitset dst;
+{
+  return BITSET_EMPTY_P_ (dst->s.bset);
+}
+
+
+static void
+bitset_stats_ones (dst)
+     bitset dst;
+{
+  BITSET_ONES_ (dst->s.bset);
+}
+
+
+static void
+bitset_stats_zero (dst)
      bitset dst;
-     enum bitset_ops op;
 {
-  return BITSET_OP1_ (dst->s.bset, op);
+  BITSET_ZERO_ (dst->s.bset);
+}
+
+
+static void
+bitset_stats_copy (dst, src)
+     bitset dst;
+     bitset src;
+{
+  BITSET_CHECK2_ (dst, src);
+  BITSET_COPY_ (dst->s.bset, src->s.bset);
 }
 
 
 static int
-bitset_stats_op2 (dst, src, op)
+bitset_stats_disjoint_p (dst, src)
      bitset dst;
      bitset src;
-     enum bitset_ops op;
 {
   BITSET_CHECK2_ (dst, src);
-  return BITSET_OP2_ (dst->s.bset, src->s.bset, op);
+  return BITSET_DISJOINT_P_ (dst->s.bset, src->s.bset);
 }
 
 
 static int
-bitset_stats_op3 (dst, src1, src2, op)
+bitset_stats_equal_p (dst, src)
+     bitset dst;
+     bitset src;
+{
+  BITSET_CHECK2_ (dst, src);
+  return BITSET_EQUAL_P_ (dst->s.bset, src->s.bset);
+}
+
+
+static void
+bitset_stats_not (dst, src)
+     bitset dst;
+     bitset src;
+{
+  BITSET_CHECK2_ (dst, src);
+  BITSET_NOT_ (dst->s.bset, src->s.bset);
+}
+
+
+static int
+bitset_stats_subset_p (dst, src)
+     bitset dst;
+     bitset src;
+{
+  BITSET_CHECK2_ (dst, src);
+  return BITSET_SUBSET_P_ (dst->s.bset, src->s.bset);
+}
+
+
+static void
+bitset_stats_and (dst, src1, src2)
      bitset dst;
      bitset src1;
      bitset src2;
-     enum bitset_ops op;
 {
   BITSET_CHECK3_ (dst, src1, src2);
-  return BITSET_OP3_ (dst->s.bset, src1->s.bset, src2->s.bset, op);
+  BITSET_AND_ (dst->s.bset, src1->s.bset, src2->s.bset);
 }
 
 
 static int
-bitset_stats_op4 (dst, src1, src2, src3, op)
+bitset_stats_and_cmp (dst, src1, src2)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+{
+  BITSET_CHECK3_ (dst, src1, src2);
+  return BITSET_AND_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset);
+}
+
+
+static void
+bitset_stats_andn (dst, src1, src2)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+{
+  BITSET_CHECK3_ (dst, src1, src2);
+  BITSET_ANDN_ (dst->s.bset, src1->s.bset, src2->s.bset);
+}
+
+
+static int
+bitset_stats_andn_cmp (dst, src1, src2)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+{
+  BITSET_CHECK3_ (dst, src1, src2);
+  return BITSET_ANDN_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset);
+}
+
+
+static void
+bitset_stats_or (dst, src1, src2)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+{
+  BITSET_CHECK3_ (dst, src1, src2);
+  BITSET_OR_ (dst->s.bset, src1->s.bset, src2->s.bset);
+}
+
+
+static int
+bitset_stats_or_cmp (dst, src1, src2)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+{
+  BITSET_CHECK3_ (dst, src1, src2);
+  return BITSET_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset);
+}
+
+
+static void
+bitset_stats_xor (dst, src1, src2)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+{
+  BITSET_CHECK3_ (dst, src1, src2);
+  BITSET_XOR_ (dst->s.bset, src1->s.bset, src2->s.bset);
+}
+
+
+static int
+bitset_stats_xor_cmp (dst, src1, src2)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+{
+  BITSET_CHECK3_ (dst, src1, src2);
+  return BITSET_XOR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset);
+}
+
+
+static void
+bitset_stats_and_or (dst, src1, src2, src3)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+     bitset src3;
+{
+  BITSET_CHECK4_ (dst, src1, src2, src3);
+
+  BITSET_AND_OR_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
+}
+
+
+static int
+bitset_stats_and_or_cmp (dst, src1, src2, src3)
      bitset dst;
      bitset src1;
      bitset src2;
      bitset src3;
-     enum bitset_ops op;
 {
   BITSET_CHECK4_ (dst, src1, src2, src3);
 
-  /* This is a bit of a hack.  If the implementation handles
-     a four operand operation then vector to it, passing
-     the enclosed bitsets.  Otherwise use the fallback 
-     bitset_op4 routine.  */
-  if (dst->s.bset->b.ops->op4 != bitset_op4)
-     return BITSET_OP4_ (dst->s.bset, src1->s.bset, src2->s.bset,
-                        src3->s.bset, op);
+  return BITSET_AND_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
+}
+
+
+static void
+bitset_stats_andn_or (dst, src1, src2, src3)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+     bitset src3;
+{
+  BITSET_CHECK4_ (dst, src1, src2, src3);
 
-  return bitset_op4 (dst, src1, src2, src3, op);
+  BITSET_ANDN_OR_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
 }
 
 
 static int
+bitset_stats_andn_or_cmp (dst, src1, src2, src3)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+     bitset src3;
+{
+  BITSET_CHECK4_ (dst, src1, src2, src3);
+
+  return BITSET_ANDN_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
+}
+
+
+static void
+bitset_stats_or_and (dst, src1, src2, src3)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+     bitset src3;
+{
+  BITSET_CHECK4_ (dst, src1, src2, src3);
+
+  BITSET_OR_AND_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
+}
+
+
+static int
+bitset_stats_or_and_cmp (dst, src1, src2, src3)
+     bitset dst;
+     bitset src1;
+     bitset src2;
+     bitset src3;
+{
+  BITSET_CHECK4_ (dst, src1, src2, src3);
+
+  return BITSET_OR_AND_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset);
+}
+
+
+static bitset_bindex
 bitset_stats_list (bset, list, num, next)
      bitset bset;
      bitset_bindex *list;
@@ -529,14 +741,14 @@ bitset_stats_list (bset, list, num, next)
 }
 
 
-static int
-bitset_stats_reverse_list (bset, list, num, next)
+static bitset_bindex
+bitset_stats_list_reverse (bset, list, num, next)
      bitset bset;
      bitset_bindex *list;
      bitset_bindex num;
      bitset_bindex *next;
 {
-  return BITSET_REVERSE_LIST_ (bset->s.bset, list, num, next);
+  return BITSET_LIST_REVERSE_ (bset->s.bset, list, num, next);
 }
 
 
@@ -549,17 +761,37 @@ bitset_stats_free (bset)
 }
 
 
-struct bitset_ops_struct bitset_stats_ops = {
+struct bitset_vtable bitset_stats_vtable = {
   bitset_stats_set,
   bitset_stats_reset,
+  bitset_stats_toggle,
   bitset_stats_test,
   bitset_stats_size,
-  bitset_stats_op1,
-  bitset_stats_op2,
-  bitset_stats_op3,
-  bitset_stats_op4,
+  bitset_stats_count,
+  bitset_stats_empty_p,
+  bitset_stats_ones,
+  bitset_stats_zero,
+  bitset_stats_copy,
+  bitset_stats_disjoint_p,
+  bitset_stats_equal_p,
+  bitset_stats_not,
+  bitset_stats_subset_p,
+  bitset_stats_and,
+  bitset_stats_and_cmp,
+  bitset_stats_andn,
+  bitset_stats_andn_cmp,
+  bitset_stats_or,
+  bitset_stats_or_cmp,
+  bitset_stats_xor,
+  bitset_stats_xor_cmp,
+  bitset_stats_and_or,
+  bitset_stats_and_or_cmp,
+  bitset_stats_andn_or,
+  bitset_stats_andn_or_cmp,
+  bitset_stats_or_and,
+  bitset_stats_or_and_cmp,
   bitset_stats_list,
-  bitset_stats_reverse_list,
+  bitset_stats_list_reverse,
   bitset_stats_free,
   BITSET_STATS
 };
@@ -574,9 +806,10 @@ bitset_stats_type_get (bset)
 }
 
 
-int bitset_stats_bytes (void)
+size_t
+bitset_stats_bytes (void)
 {
-  return sizeof (struct bitset_struct);
+  return sizeof (struct bitset_stats_struct);
 }
 
 
@@ -584,12 +817,12 @@ bitset
 bitset_stats_init (bset, n_bits, type)
      bitset bset;
      bitset_bindex n_bits;
-     enum bitset_type type;
+     enum_bitset_type type;
 {
-  unsigned int bytes;
+  size_t bytes;
   bitset sbset;
 
-  bset->b.ops = &bitset_stats_ops;
+  bset->b.vtable = &bitset_stats_vtable;
 
   /* Disable cache.  */
   bset->b.cindex = 0;