mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 01:33:03 +00:00
(bitset_alloc, bitset_and_or_, bitset_and_or_cmp_, bitset_andn_or_,
bitset_andn_or_cmp_, bitset_bytes, bitset_copy_, bitset_count_, bitset_create, bitset_dump, bitset_first, bitset_free, bitset_init, bitset_last, bitset_next, bitset_obstack_alloc, bitset_obstack_free, bitset_only_set_p, bitset_op4_cmp, bitset_or_and_, bitset_or_and_cmp_, bitset_prev, bitset_print, bitset_release_memory, bitset_toggle_, bitset_type_choose, bitset_type_get, bitset_type_name_get, debug_bitset): Use function prototypes; this removes the need for declaring static functions simply to provide their prototypes.
This commit is contained in:
139
lib/bitset.c
139
lib/bitset.c
@@ -30,16 +30,11 @@
|
|||||||
|
|
||||||
const char * const bitset_type_names[] = BITSET_TYPE_NAMES;
|
const char * const bitset_type_names[] = BITSET_TYPE_NAMES;
|
||||||
|
|
||||||
static void bitset_print PARAMS ((FILE *, bitset, int));
|
|
||||||
static int bitset_op4_cmp PARAMS ((bitset, bitset, bitset, bitset, int));
|
|
||||||
|
|
||||||
|
|
||||||
/* Return number of bytes required to create a N_BIT bitset
|
/* Return number of bytes required to create a N_BIT bitset
|
||||||
of TYPE. The bitset may grow to require more bytes than this. */
|
of TYPE. The bitset may grow to require more bytes than this. */
|
||||||
size_t
|
size_t
|
||||||
bitset_bytes (type, n_bits)
|
bitset_bytes (enum bitset_type type, bitset_bindex n_bits)
|
||||||
enum_bitset_type type;
|
|
||||||
bitset_bindex n_bits;
|
|
||||||
{
|
{
|
||||||
size_t bytes;
|
size_t bytes;
|
||||||
|
|
||||||
@@ -70,14 +65,11 @@ bitset_bytes (type, n_bits)
|
|||||||
|
|
||||||
/* Initialise bitset BSET of TYPE for N_BITS. */
|
/* Initialise bitset BSET of TYPE for N_BITS. */
|
||||||
bitset
|
bitset
|
||||||
bitset_init (bset, n_bits, type)
|
bitset_init (bitset bset, bitset_bindex n_bits, enum bitset_type type)
|
||||||
bitset bset;
|
|
||||||
bitset_bindex n_bits;
|
|
||||||
enum_bitset_type type;
|
|
||||||
{
|
{
|
||||||
if (bitset_stats_enabled)
|
if (bitset_stats_enabled)
|
||||||
return bitset_stats_init (bset, n_bits, type);
|
return bitset_stats_init (bset, n_bits, type);
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case BITSET_ARRAY:
|
case BITSET_ARRAY:
|
||||||
@@ -99,9 +91,7 @@ bitset_init (bset, n_bits, type)
|
|||||||
specified by ATTR. For variable size bitsets, N_BITS is only a
|
specified by ATTR. For variable size bitsets, N_BITS is only a
|
||||||
hint and may be zero. */
|
hint and may be zero. */
|
||||||
enum bitset_type
|
enum bitset_type
|
||||||
bitset_type_choose (n_bits, attr)
|
bitset_type_choose (bitset_bindex n_bits ATTRIBUTE_UNUSED, unsigned int attr)
|
||||||
bitset_bindex n_bits ATTRIBUTE_UNUSED;
|
|
||||||
unsigned int attr;
|
|
||||||
{
|
{
|
||||||
enum bitset_type type;
|
enum bitset_type type;
|
||||||
|
|
||||||
@@ -129,9 +119,7 @@ bitset_type_choose (n_bits, attr)
|
|||||||
|
|
||||||
/* Create a bitset of N_BITS of type TYPE. */
|
/* Create a bitset of N_BITS of type TYPE. */
|
||||||
bitset
|
bitset
|
||||||
bitset_alloc (n_bits, type)
|
bitset_alloc (bitset_bindex n_bits, enum bitset_type type)
|
||||||
bitset_bindex n_bits;
|
|
||||||
enum_bitset_type type;
|
|
||||||
{
|
{
|
||||||
size_t bytes;
|
size_t bytes;
|
||||||
bitset bset;
|
bitset bset;
|
||||||
@@ -150,10 +138,8 @@ bitset_alloc (n_bits, type)
|
|||||||
|
|
||||||
/* Create a bitset of N_BITS of type TYPE. */
|
/* Create a bitset of N_BITS of type TYPE. */
|
||||||
bitset
|
bitset
|
||||||
bitset_obstack_alloc (bobstack, n_bits, type)
|
bitset_obstack_alloc (struct obstack *bobstack,
|
||||||
struct obstack *bobstack;
|
bitset_bindex n_bits, enum bitset_type type)
|
||||||
bitset_bindex n_bits;
|
|
||||||
enum_bitset_type type;
|
|
||||||
{
|
{
|
||||||
size_t bytes;
|
size_t bytes;
|
||||||
bitset bset;
|
bitset bset;
|
||||||
@@ -170,9 +156,7 @@ bitset_obstack_alloc (bobstack, n_bits, type)
|
|||||||
/* Create a bitset of N_BITS and with attribute hints specified by
|
/* Create a bitset of N_BITS and with attribute hints specified by
|
||||||
ATTR. */
|
ATTR. */
|
||||||
bitset
|
bitset
|
||||||
bitset_create (n_bits, attr)
|
bitset_create (bitset_bindex n_bits, unsigned int attr)
|
||||||
bitset_bindex n_bits;
|
|
||||||
unsigned int attr;
|
|
||||||
{
|
{
|
||||||
enum bitset_type type;
|
enum bitset_type type;
|
||||||
|
|
||||||
@@ -184,8 +168,7 @@ bitset_create (n_bits, attr)
|
|||||||
|
|
||||||
/* Free bitset BSET. */
|
/* Free bitset BSET. */
|
||||||
void
|
void
|
||||||
bitset_free (bset)
|
bitset_free (bitset bset)
|
||||||
bitset bset;
|
|
||||||
{
|
{
|
||||||
BITSET_FREE_ (bset);
|
BITSET_FREE_ (bset);
|
||||||
free (bset);
|
free (bset);
|
||||||
@@ -194,8 +177,7 @@ bitset_free (bset)
|
|||||||
|
|
||||||
/* Free bitset BSET allocated on obstack. */
|
/* Free bitset BSET allocated on obstack. */
|
||||||
void
|
void
|
||||||
bitset_obstack_free (bset)
|
bitset_obstack_free (bitset bset)
|
||||||
bitset bset;
|
|
||||||
{
|
{
|
||||||
BITSET_FREE_ (bset);
|
BITSET_FREE_ (bset);
|
||||||
}
|
}
|
||||||
@@ -203,23 +185,21 @@ bitset_obstack_free (bset)
|
|||||||
|
|
||||||
/* Return bitset type. */
|
/* Return bitset type. */
|
||||||
enum bitset_type
|
enum bitset_type
|
||||||
bitset_type_get (bset)
|
bitset_type_get (bitset bset)
|
||||||
bitset bset;
|
|
||||||
{
|
{
|
||||||
enum bitset_type type;
|
enum bitset_type type;
|
||||||
|
|
||||||
type = BITSET_TYPE_ (bset);
|
type = BITSET_TYPE_ (bset);
|
||||||
if (type != BITSET_STATS)
|
if (type != BITSET_STATS)
|
||||||
return type;
|
return type;
|
||||||
|
|
||||||
return bitset_stats_type_get (bset);
|
return bitset_stats_type_get (bset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Return name of bitset type. */
|
/* Return name of bitset type. */
|
||||||
const char *
|
const char *
|
||||||
bitset_type_name_get (bset)
|
bitset_type_name_get (bitset bset)
|
||||||
bitset bset;
|
|
||||||
{
|
{
|
||||||
enum bitset_type type;
|
enum bitset_type type;
|
||||||
|
|
||||||
@@ -232,9 +212,7 @@ bitset_type_name_get (bset)
|
|||||||
/* Find next bit set in SRC starting from and including BITNO.
|
/* Find next bit set in SRC starting from and including BITNO.
|
||||||
Return BITSET_BINDEX_MAX if SRC empty. */
|
Return BITSET_BINDEX_MAX if SRC empty. */
|
||||||
bitset_bindex
|
bitset_bindex
|
||||||
bitset_next (src, bitno)
|
bitset_next (bitset src, bitset_bindex bitno)
|
||||||
bitset src;
|
|
||||||
bitset_bindex bitno;
|
|
||||||
{
|
{
|
||||||
bitset_bindex val;
|
bitset_bindex val;
|
||||||
bitset_bindex next = bitno;
|
bitset_bindex next = bitno;
|
||||||
@@ -248,9 +226,7 @@ bitset_next (src, bitno)
|
|||||||
/* Find previous bit set in SRC starting from and including BITNO.
|
/* Find previous bit set in SRC starting from and including BITNO.
|
||||||
Return BITSET_BINDEX_MAX if SRC empty. */
|
Return BITSET_BINDEX_MAX if SRC empty. */
|
||||||
bitset_bindex
|
bitset_bindex
|
||||||
bitset_prev (src, bitno)
|
bitset_prev (bitset src, bitset_bindex bitno)
|
||||||
bitset src;
|
|
||||||
bitset_bindex bitno;
|
|
||||||
{
|
{
|
||||||
bitset_bindex val;
|
bitset_bindex val;
|
||||||
bitset_bindex next = bitno;
|
bitset_bindex next = bitno;
|
||||||
@@ -263,8 +239,7 @@ bitset_prev (src, bitno)
|
|||||||
|
|
||||||
/* Find first set bit. */
|
/* Find first set bit. */
|
||||||
bitset_bindex
|
bitset_bindex
|
||||||
bitset_first (src)
|
bitset_first (bitset src)
|
||||||
bitset src;
|
|
||||||
{
|
{
|
||||||
return bitset_next (src, 0);
|
return bitset_next (src, 0);
|
||||||
}
|
}
|
||||||
@@ -272,8 +247,7 @@ bitset_first (src)
|
|||||||
|
|
||||||
/* Find last set bit. */
|
/* Find last set bit. */
|
||||||
bitset_bindex
|
bitset_bindex
|
||||||
bitset_last (src)
|
bitset_last (bitset src)
|
||||||
bitset src;
|
|
||||||
{
|
{
|
||||||
return bitset_prev (src, 0);
|
return bitset_prev (src, 0);
|
||||||
}
|
}
|
||||||
@@ -281,9 +255,7 @@ bitset_last (src)
|
|||||||
|
|
||||||
/* Return non-zero if BITNO in SRC is the only set bit. */
|
/* Return non-zero if BITNO in SRC is the only set bit. */
|
||||||
int
|
int
|
||||||
bitset_only_set_p (src, bitno)
|
bitset_only_set_p (bitset src, bitset_bindex bitno)
|
||||||
bitset src;
|
|
||||||
bitset_bindex bitno;
|
|
||||||
{
|
{
|
||||||
bitset_bindex val[2];
|
bitset_bindex val[2];
|
||||||
bitset_bindex next = 0;
|
bitset_bindex next = 0;
|
||||||
@@ -296,10 +268,7 @@ bitset_only_set_p (src, bitno)
|
|||||||
|
|
||||||
/* Print contents of bitset BSET to FILE. */
|
/* Print contents of bitset BSET to FILE. */
|
||||||
static void
|
static void
|
||||||
bitset_print (file, bset, verbose)
|
bitset_print (FILE *file, bitset bset, int verbose)
|
||||||
FILE *file;
|
|
||||||
bitset bset;
|
|
||||||
int verbose;
|
|
||||||
{
|
{
|
||||||
unsigned int pos;
|
unsigned int pos;
|
||||||
bitset_bindex i;
|
bitset_bindex i;
|
||||||
@@ -329,9 +298,7 @@ bitset_print (file, bset, verbose)
|
|||||||
|
|
||||||
/* Dump bitset BSET to FILE. */
|
/* Dump bitset BSET to FILE. */
|
||||||
void
|
void
|
||||||
bitset_dump (file, bset)
|
bitset_dump (FILE *file, bitset bset)
|
||||||
FILE *file;
|
|
||||||
bitset bset;
|
|
||||||
{
|
{
|
||||||
bitset_print (file, bset, 0);
|
bitset_print (file, bset, 0);
|
||||||
}
|
}
|
||||||
@@ -340,7 +307,7 @@ bitset_dump (file, bset)
|
|||||||
|
|
||||||
/* Release memory associated with bitsets. */
|
/* Release memory associated with bitsets. */
|
||||||
void
|
void
|
||||||
bitset_release_memory ()
|
bitset_release_memory (void)
|
||||||
{
|
{
|
||||||
lbitset_release_memory ();
|
lbitset_release_memory ();
|
||||||
ebitset_release_memory ();
|
ebitset_release_memory ();
|
||||||
@@ -350,9 +317,7 @@ bitset_release_memory ()
|
|||||||
|
|
||||||
/* Toggle bit BITNO in bitset BSET and return non-zero if not set. */
|
/* Toggle bit BITNO in bitset BSET and return non-zero if not set. */
|
||||||
int
|
int
|
||||||
bitset_toggle_ (bset, bitno)
|
bitset_toggle_ (bitset bset, bitset_bindex bitno)
|
||||||
bitset bset;
|
|
||||||
bitset_bindex bitno;
|
|
||||||
{
|
{
|
||||||
/* This routine is for completeness. It could be optimized if
|
/* This routine is for completeness. It could be optimized if
|
||||||
required. */
|
required. */
|
||||||
@@ -371,14 +336,13 @@ bitset_toggle_ (bset, bitno)
|
|||||||
|
|
||||||
/* Return number of bits set in bitset SRC. */
|
/* Return number of bits set in bitset SRC. */
|
||||||
bitset_bindex
|
bitset_bindex
|
||||||
bitset_count_ (src)
|
bitset_count_ (bitset src)
|
||||||
bitset src;
|
|
||||||
{
|
{
|
||||||
bitset_bindex list[BITSET_LIST_SIZE];
|
bitset_bindex list[BITSET_LIST_SIZE];
|
||||||
bitset_bindex next;
|
bitset_bindex next;
|
||||||
bitset_bindex num;
|
bitset_bindex num;
|
||||||
bitset_bindex count;
|
bitset_bindex count;
|
||||||
|
|
||||||
/* This could be greatly sped up by adding a count method for each
|
/* This could be greatly sped up by adding a count method for each
|
||||||
bitset implementation that uses a direct technique (based on
|
bitset implementation that uses a direct technique (based on
|
||||||
masks) for counting the number of bits set in a word. */
|
masks) for counting the number of bits set in a word. */
|
||||||
@@ -387,18 +351,16 @@ bitset_count_ (src)
|
|||||||
for (count = 0; (num = bitset_list (src, list, BITSET_LIST_SIZE, &next));
|
for (count = 0; (num = bitset_list (src, list, BITSET_LIST_SIZE, &next));
|
||||||
count += num)
|
count += num)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* DST = SRC. Return non-zero if DST != SRC.
|
/* DST = SRC. Return non-zero if DST != SRC.
|
||||||
This is a fallback for the case where SRC and DST are different
|
This is a fallback for the case where SRC and DST are different
|
||||||
bitset types. */
|
bitset types. */
|
||||||
int
|
int
|
||||||
bitset_copy_ (dst, src)
|
bitset_copy_ (bitset dst, bitset src)
|
||||||
bitset dst;
|
|
||||||
bitset src;
|
|
||||||
{
|
{
|
||||||
bitset_bindex i;
|
bitset_bindex i;
|
||||||
bitset_iterator iter;
|
bitset_iterator iter;
|
||||||
@@ -418,12 +380,8 @@ bitset_copy_ (dst, src)
|
|||||||
/* This is a fallback for implementations that do not support
|
/* This is a fallback for implementations that do not support
|
||||||
four operand operations. */
|
four operand operations. */
|
||||||
static inline int
|
static inline int
|
||||||
bitset_op4_cmp (dst, src1, src2, src3, op)
|
bitset_op4_cmp (bitset dst, bitset src1, bitset src2, bitset src3,
|
||||||
bitset dst;
|
enum bitset_ops op)
|
||||||
bitset src1;
|
|
||||||
bitset src2;
|
|
||||||
bitset src3;
|
|
||||||
enum_bitset_ops op;
|
|
||||||
{
|
{
|
||||||
int changed = 0;
|
int changed = 0;
|
||||||
int stats_enabled_save;
|
int stats_enabled_save;
|
||||||
@@ -463,11 +421,7 @@ bitset_op4_cmp (dst, src1, src2, src3, op)
|
|||||||
|
|
||||||
/* DST = (SRC1 & SRC2) | SRC3. */
|
/* DST = (SRC1 & SRC2) | SRC3. */
|
||||||
void
|
void
|
||||||
bitset_and_or_ (dst, src1, src2, src3)
|
bitset_and_or_ (bitset dst, bitset src1, bitset src2, bitset src3)
|
||||||
bitset dst;
|
|
||||||
bitset src1;
|
|
||||||
bitset src2;
|
|
||||||
bitset src3;
|
|
||||||
{
|
{
|
||||||
bitset_and_or_cmp_ (dst, src1, src2, src3);
|
bitset_and_or_cmp_ (dst, src1, src2, src3);
|
||||||
}
|
}
|
||||||
@@ -476,11 +430,7 @@ bitset_and_or_ (dst, src1, src2, src3)
|
|||||||
/* DST = (SRC1 & SRC2) | SRC3. Return non-zero if
|
/* DST = (SRC1 & SRC2) | SRC3. Return non-zero if
|
||||||
DST != (SRC1 & SRC2) | SRC3. */
|
DST != (SRC1 & SRC2) | SRC3. */
|
||||||
int
|
int
|
||||||
bitset_and_or_cmp_ (dst, src1, src2, src3)
|
bitset_and_or_cmp_ (bitset dst, bitset src1, bitset src2, bitset src3)
|
||||||
bitset dst;
|
|
||||||
bitset src1;
|
|
||||||
bitset src2;
|
|
||||||
bitset src3;
|
|
||||||
{
|
{
|
||||||
return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_AND_OR);
|
return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_AND_OR);
|
||||||
}
|
}
|
||||||
@@ -488,11 +438,7 @@ bitset_and_or_cmp_ (dst, src1, src2, src3)
|
|||||||
|
|
||||||
/* DST = (SRC1 & ~SRC2) | SRC3. */
|
/* DST = (SRC1 & ~SRC2) | SRC3. */
|
||||||
void
|
void
|
||||||
bitset_andn_or_ (dst, src1, src2, src3)
|
bitset_andn_or_ (bitset dst, bitset src1, bitset src2, bitset src3)
|
||||||
bitset dst;
|
|
||||||
bitset src1;
|
|
||||||
bitset src2;
|
|
||||||
bitset src3;
|
|
||||||
{
|
{
|
||||||
bitset_andn_or_cmp_ (dst, src1, src2, src3);
|
bitset_andn_or_cmp_ (dst, src1, src2, src3);
|
||||||
}
|
}
|
||||||
@@ -501,11 +447,7 @@ bitset_andn_or_ (dst, src1, src2, src3)
|
|||||||
/* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if
|
/* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if
|
||||||
DST != (SRC1 & ~SRC2) | SRC3. */
|
DST != (SRC1 & ~SRC2) | SRC3. */
|
||||||
int
|
int
|
||||||
bitset_andn_or_cmp_ (dst, src1, src2, src3)
|
bitset_andn_or_cmp_ (bitset dst, bitset src1, bitset src2, bitset src3)
|
||||||
bitset dst;
|
|
||||||
bitset src1;
|
|
||||||
bitset src2;
|
|
||||||
bitset src3;
|
|
||||||
{
|
{
|
||||||
return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_ANDN_OR);
|
return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_ANDN_OR);
|
||||||
}
|
}
|
||||||
@@ -513,11 +455,7 @@ bitset_andn_or_cmp_ (dst, src1, src2, src3)
|
|||||||
|
|
||||||
/* DST = (SRC1 | SRC2) & SRC3. */
|
/* DST = (SRC1 | SRC2) & SRC3. */
|
||||||
void
|
void
|
||||||
bitset_or_and_ (dst, src1, src2, src3)
|
bitset_or_and_ (bitset dst, bitset src1, bitset src2, bitset src3)
|
||||||
bitset dst;
|
|
||||||
bitset src1;
|
|
||||||
bitset src2;
|
|
||||||
bitset src3;
|
|
||||||
{
|
{
|
||||||
bitset_or_and_cmp_ (dst, src1, src2, src3);
|
bitset_or_and_cmp_ (dst, src1, src2, src3);
|
||||||
}
|
}
|
||||||
@@ -526,11 +464,7 @@ bitset_or_and_ (dst, src1, src2, src3)
|
|||||||
/* DST = (SRC1 | SRC2) & SRC3. Return non-zero if
|
/* DST = (SRC1 | SRC2) & SRC3. Return non-zero if
|
||||||
DST != (SRC1 | SRC2) & SRC3. */
|
DST != (SRC1 | SRC2) & SRC3. */
|
||||||
int
|
int
|
||||||
bitset_or_and_cmp_ (dst, src1, src2, src3)
|
bitset_or_and_cmp_ (bitset dst, bitset src1, bitset src2, bitset src3)
|
||||||
bitset dst;
|
|
||||||
bitset src1;
|
|
||||||
bitset src2;
|
|
||||||
bitset src3;
|
|
||||||
{
|
{
|
||||||
return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_OR_AND);
|
return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_OR_AND);
|
||||||
}
|
}
|
||||||
@@ -538,8 +472,7 @@ bitset_or_and_cmp_ (dst, src1, src2, src3)
|
|||||||
|
|
||||||
/* Function to be called from debugger to print bitset. */
|
/* Function to be called from debugger to print bitset. */
|
||||||
void
|
void
|
||||||
debug_bitset (bset)
|
debug_bitset (bitset bset)
|
||||||
bitset bset;
|
|
||||||
{
|
{
|
||||||
if (bset)
|
if (bset)
|
||||||
bitset_print (stderr, bset, 1);
|
bitset_print (stderr, bset, 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user