X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/d65ec44e3b2a1350280296f4916a7a74c586a5c0..b09a18c50d221b54e6bc94e03deb65ecd52c4288:/lib/bitset_stats.c diff --git a/lib/bitset_stats.c b/lib/bitset_stats.c index b14fbc3c..0b59865d 100644 --- a/lib/bitset_stats.c +++ b/lib/bitset_stats.c @@ -1,5 +1,5 @@ /* Bitset statistics. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This program is free software; you can redistribute it and/or modify @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This file is a wrapper bitset implementation for the other bitset @@ -33,6 +33,7 @@ #include "abitset.h" #include "ebitset.h" #include "lbitset.h" +#include "vbitset.h" #include "bitset_stats.h" #include #include @@ -49,29 +50,29 @@ /* Accessor macros. */ -#define BITSET_STATS_ALLOCS_INC(TYPE) \ +#define BITSET_STATS_ALLOCS_INC(TYPE) \ bitset_stats_info->types[(TYPE)].allocs++ -#define BITSET_STATS_FREES_INC(BSET) \ +#define BITSET_STATS_FREES_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].frees++ -#define BITSET_STATS_SETS_INC(BSET) \ +#define BITSET_STATS_SETS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].sets++ -#define BITSET_STATS_CACHE_SETS_INC(BSET) \ +#define BITSET_STATS_CACHE_SETS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_sets++ -#define BITSET_STATS_RESETS_INC(BSET) \ +#define BITSET_STATS_RESETS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].resets++ -#define BITSET_STATS_CACHE_RESETS_INC(BSET) \ +#define BITSET_STATS_CACHE_RESETS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_resets++ -#define BITSET_STATS_TESTS_INC(BSET) \ +#define BITSET_STATS_TESTS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].tests++ -#define BITSET_STATS_CACHE_TESTS_INC(BSET) \ +#define BITSET_STATS_CACHE_TESTS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_tests++ -#define BITSET_STATS_LISTS_INC(BSET) \ +#define BITSET_STATS_LISTS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].lists++ -#define BITSET_STATS_LIST_COUNTS_INC(BSET, I) \ +#define BITSET_STATS_LIST_COUNTS_INC(BSET, I) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_counts[(I)]++ -#define BITSET_STATS_LIST_SIZES_INC(BSET, I) \ +#define BITSET_STATS_LIST_SIZES_INC(BSET, I) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_sizes[(I)]++ -#define BITSET_STATS_LIST_DENSITY_INC(BSET, I) \ +#define BITSET_STATS_LIST_DENSITY_INC(BSET, I) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_density[(I)]++ @@ -100,7 +101,7 @@ struct bitset_stats_info_struct struct bitset_stats_info_struct bitset_stats_info_data; struct bitset_stats_info_struct *bitset_stats_info; -int bitset_stats_enabled = 0; +bool bitset_stats_enabled = false; /* Print a percentage histogram with message MSG to FILE. */ @@ -159,8 +160,8 @@ bitset_log_histogram_print (FILE *file, const char *name, const char *msg, for (; i < n_bins; i++) fprintf (file, "%*lu-%lu\t%8u (%5.1f%%)\n", max_width - ((unsigned int) (0.30103 * (i) + 0.9999) + 1), - (unsigned long) 1 << (i - 1), - ((unsigned long) 1 << i) - 1, + 1UL << (i - 1), + (1UL << i) - 1, bins[i], (100.0 * bins[i]) / total); } @@ -203,7 +204,7 @@ bitset_stats_print_1 (FILE *file, const char *name, /* Print all bitset statistics to FILE. */ static void -bitset_stats_print (FILE *file, int verbose ATTRIBUTE_UNUSED) +bitset_stats_print (FILE *file, bool verbose ATTRIBUTE_UNUSED) { int i; @@ -227,30 +228,30 @@ bitset_stats_enable (void) { if (!bitset_stats_info) bitset_stats_info = &bitset_stats_info_data; - bitset_stats_enabled = 1; + bitset_stats_enabled = true; } void bitset_stats_disable (void) { - bitset_stats_enabled = 0; + bitset_stats_enabled = false; } /* Read bitset statistics file. */ void -bitset_stats_read (const char *filename) +bitset_stats_read (const char *file_name) { FILE *file; if (!bitset_stats_info) return; - if (!filename) - filename = BITSET_STATS_FILE; + if (!file_name) + file_name = BITSET_STATS_FILE; - file = fopen (filename, "r"); + file = fopen (file_name, "r"); if (file) { if (fread (&bitset_stats_info_data, sizeof (bitset_stats_info_data), @@ -261,7 +262,8 @@ bitset_stats_read (const char *filename) else fprintf (stderr, _("Bad stats file size.\n")); } - fclose (file); + if (fclose (file) != 0) + perror (_("Could not read stats file.")); } bitset_stats_info_data.runs++; } @@ -269,23 +271,24 @@ bitset_stats_read (const char *filename) /* Write bitset statistics file. */ void -bitset_stats_write (const char *filename) +bitset_stats_write (const char *file_name) { FILE *file; if (!bitset_stats_info) return; - if (!filename) - filename = BITSET_STATS_FILE; + if (!file_name) + file_name = BITSET_STATS_FILE; - file = fopen (filename, "w"); + file = fopen (file_name, "w"); if (file) { if (fwrite (&bitset_stats_info_data, sizeof (bitset_stats_info_data), 1, file) != 1) perror (_("Could not write stats file.")); - fclose (file); + if (fclose (file) != 0) + perror (_("Could not write stats file.")); } else perror (_("Could not open stats file for writing.")); @@ -296,7 +299,7 @@ bitset_stats_write (const char *filename) void bitset_stats_dump (FILE *file) { - bitset_stats_print (file, 0); + bitset_stats_print (file, false); } @@ -304,7 +307,7 @@ bitset_stats_dump (FILE *file) void debug_bitset_stats (void) { - bitset_stats_print (stderr, 1); + bitset_stats_print (stderr, true); } @@ -347,14 +350,14 @@ bitset_stats_reset (bitset dst, bitset_bindex bitno) } -static int +static bool bitset_stats_toggle (bitset src, bitset_bindex bitno) { return BITSET_TOGGLE_ (src->s.bset, bitno); } -static int +static bool bitset_stats_test (bitset src, bitset_bindex bitno) { bitset bset = src->s.bset; @@ -373,6 +376,13 @@ bitset_stats_test (bitset src, bitset_bindex bitno) } +static bitset_bindex +bitset_stats_resize (bitset src, bitset_bindex size) +{ + return BITSET_RESIZE_ (src->s.bset, size); +} + + static bitset_bindex bitset_stats_size (bitset src) { @@ -387,7 +397,7 @@ bitset_stats_count (bitset src) } -static int +static bool bitset_stats_empty_p (bitset dst) { return BITSET_EMPTY_P_ (dst->s.bset); @@ -416,7 +426,7 @@ bitset_stats_copy (bitset dst, bitset src) } -static int +static bool bitset_stats_disjoint_p (bitset dst, bitset src) { BITSET_CHECK2_ (dst, src); @@ -424,7 +434,7 @@ bitset_stats_disjoint_p (bitset dst, bitset src) } -static int +static bool bitset_stats_equal_p (bitset dst, bitset src) { BITSET_CHECK2_ (dst, src); @@ -440,7 +450,7 @@ bitset_stats_not (bitset dst, bitset src) } -static int +static bool bitset_stats_subset_p (bitset dst, bitset src) { BITSET_CHECK2_ (dst, src); @@ -456,7 +466,7 @@ bitset_stats_and (bitset dst, bitset src1, bitset src2) } -static int +static bool bitset_stats_and_cmp (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); @@ -472,7 +482,7 @@ bitset_stats_andn (bitset dst, bitset src1, bitset src2) } -static int +static bool bitset_stats_andn_cmp (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); @@ -488,7 +498,7 @@ bitset_stats_or (bitset dst, bitset src1, bitset src2) } -static int +static bool bitset_stats_or_cmp (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); @@ -504,7 +514,7 @@ bitset_stats_xor (bitset dst, bitset src1, bitset src2) } -static int +static bool bitset_stats_xor_cmp (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); @@ -516,16 +526,14 @@ static void bitset_stats_and_or (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 +static bool bitset_stats_and_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3) { BITSET_CHECK4_ (dst, src1, src2, src3); - return BITSET_AND_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); } @@ -534,16 +542,14 @@ static void bitset_stats_andn_or (bitset dst, bitset src1, bitset src2, bitset src3) { BITSET_CHECK4_ (dst, src1, src2, src3); - BITSET_ANDN_OR_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); } -static int +static bool bitset_stats_andn_or_cmp (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); } @@ -552,16 +558,14 @@ static void bitset_stats_or_and (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 +static bool bitset_stats_or_and_cmp (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); } @@ -626,6 +630,7 @@ struct bitset_vtable bitset_stats_vtable = { bitset_stats_reset, bitset_stats_toggle, bitset_stats_test, + bitset_stats_resize, bitset_stats_size, bitset_stats_count, bitset_stats_empty_p, @@ -685,28 +690,36 @@ bitset_stats_init (bitset bset, bitset_bindex n_bits, enum bitset_type type) bset->b.csize = 0; bset->b.cdata = 0; + BITSET_NBITS_ (bset) = n_bits; + /* Set up the actual bitset implementation that we are a wrapper over. */ switch (type) { case BITSET_ARRAY: bytes = abitset_bytes (n_bits); - sbset = (bitset) xcalloc (1, bytes); + sbset = xcalloc (1, bytes); abitset_init (sbset, n_bits); break; case BITSET_LIST: bytes = lbitset_bytes (n_bits); - sbset = (bitset) xcalloc (1, bytes); + sbset = xcalloc (1, bytes); lbitset_init (sbset, n_bits); break; case BITSET_TABLE: bytes = ebitset_bytes (n_bits); - sbset = (bitset) xcalloc (1, bytes); + sbset = xcalloc (1, bytes); ebitset_init (sbset, n_bits); break; + case BITSET_VARRAY: + bytes = vbitset_bytes (n_bits); + sbset = xcalloc (1, bytes); + vbitset_init (sbset, n_bits); + break; + default: abort (); }