This commit is contained in:
Paul Eggert
2003-06-07 00:31:33 +00:00
parent 888f3f0178
commit 58f5a6af40
2 changed files with 64 additions and 50 deletions

View File

@@ -1,10 +1,10 @@
/* Functions to support expandable bitsets. /* Functions to support expandable bitsets.
Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. Copyright (C) 2002, 2003 Free Software Foundation, Inc.
Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
This program is free software: you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
@@ -13,12 +13,15 @@
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <config.h> #ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "ebitset.h" #include "ebitset.h"
#include "obstack.h" #include "obstack.h"
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@@ -49,7 +52,7 @@
/* Number of bits stored in each element. */ /* Number of bits stored in each element. */
#define EBITSET_ELT_BITS \ #define EBITSET_ELT_BITS \
((unsigned int) (EBITSET_ELT_WORDS * BITSET_WORD_BITS)) ((unsigned) (EBITSET_ELT_WORDS * BITSET_WORD_BITS))
/* Ebitset element. We use an array of bits. */ /* Ebitset element. We use an array of bits. */
typedef struct ebitset_elt_struct typedef struct ebitset_elt_struct
@@ -112,13 +115,15 @@ static ebitset_elt *ebitset_free_list; /* Free list of bitset elements. */
((BSET)->b.cindex = (EINDEX) * EBITSET_ELT_WORDS, \ ((BSET)->b.cindex = (EINDEX) * EBITSET_ELT_WORDS, \
(BSET)->b.cdata = EBITSET_WORDS (EBITSET_ELTS (BSET) [EINDEX])) (BSET)->b.cdata = EBITSET_WORDS (EBITSET_ELTS (BSET) [EINDEX]))
#undef min
#undef max
#define min(a, b) ((a) > (b) ? (b) : (a)) #define min(a, b) ((a) > (b) ? (b) : (a))
#define max(a, b) ((a) > (b) ? (a) : (b)) #define max(a, b) ((a) > (b) ? (a) : (b))
static bitset_bindex static bitset_bindex
ebitset_resize (bitset src, bitset_bindex n_bits) ebitset_resize (src, n_bits)
bitset src;
bitset_bindex n_bits;
{ {
bitset_windex oldsize; bitset_windex oldsize;
bitset_windex newsize; bitset_windex newsize;
@@ -207,13 +212,15 @@ ebitset_elt_alloc (void)
#define OBSTACK_CHUNK_FREE free #define OBSTACK_CHUNK_FREE free
#endif #endif
#if ! defined __GNUC__ || __GNUC__ < 2 #if !defined(__GNUC__) || (__GNUC__ < 2)
#define __alignof__(type) 0 #define __alignof__(type) 0
#endif #endif
obstack_specify_allocation (&ebitset_obstack, OBSTACK_CHUNK_SIZE, obstack_specify_allocation (&ebitset_obstack, OBSTACK_CHUNK_SIZE,
__alignof__ (ebitset_elt), __alignof__ (ebitset_elt),
(void *(*)PARAMS ((long)))
OBSTACK_CHUNK_ALLOC, OBSTACK_CHUNK_ALLOC,
(void (*)PARAMS ((void *)))
OBSTACK_CHUNK_FREE); OBSTACK_CHUNK_FREE);
} }
@@ -319,9 +326,6 @@ ebitset_elt_find (bitset bset, bitset_bindex bindex,
switch (mode) switch (mode)
{ {
default:
abort ();
case EBITSET_FIND: case EBITSET_FIND:
return 0; return 0;
@@ -337,6 +341,9 @@ ebitset_elt_find (bitset bset, bitset_bindex bindex,
case EBITSET_SUBST: case EBITSET_SUBST:
return &ebitset_zero_elts[0]; return &ebitset_zero_elts[0];
default:
abort ();
} }
} }
@@ -831,7 +838,8 @@ ebitset_list (bitset bset, bitset_bindex *list,
/* Ensure that any unused bits within the last element are clear. */ /* Ensure that any unused bits within the last element are clear. */
static inline void static inline void
ebitset_unused_clear (bitset dst) ebitset_unused_clear (dst)
bitset dst;
{ {
unsigned int last_bit; unsigned int last_bit;
bitset_bindex n_bits; bitset_bindex n_bits;
@@ -1087,9 +1095,6 @@ ebitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
dstp = EBITSET_WORDS (delt); dstp = EBITSET_WORDS (delt);
switch (op) switch (op)
{ {
default:
abort ();
case BITSET_OP_OR: case BITSET_OP_OR:
for (i = 0; i < EBITSET_ELT_WORDS; i++, dstp++) for (i = 0; i < EBITSET_ELT_WORDS; i++, dstp++)
{ {
@@ -1141,6 +1146,9 @@ ebitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
} }
} }
break; break;
default:
abort ();
} }
if (!ebitset_elt_zero_p (delt)) if (!ebitset_elt_zero_p (delt))

View File

@@ -1,10 +1,10 @@
/* Functions to support link list bitsets. /* Functions to support link list bitsets.
Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. Copyright (C) 2002, 2003 Free Software Foundation, Inc.
Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
This program is free software: you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
@@ -13,12 +13,15 @@
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <config.h> #ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "lbitset.h" #include "lbitset.h"
#include "obstack.h" #include "obstack.h"
#include <stddef.h> #include <stddef.h>
#include <stdlib.h> #include <stdlib.h>
@@ -51,7 +54,7 @@ typedef bitset_word lbitset_word;
/* Number of bits stored in each element. */ /* Number of bits stored in each element. */
#define LBITSET_ELT_BITS \ #define LBITSET_ELT_BITS \
((unsigned int) (LBITSET_ELT_WORDS * LBITSET_WORD_BITS)) ((unsigned) (LBITSET_ELT_WORDS * LBITSET_WORD_BITS))
/* Lbitset element. We use an array of bits for each element. /* Lbitset element. We use an array of bits for each element.
These are linked together in a doubly-linked list. */ These are linked together in a doubly-linked list. */
@@ -75,7 +78,7 @@ static struct obstack lbitset_obstack;
static bool lbitset_obstack_init = false; static bool lbitset_obstack_init = false;
static lbitset_elt *lbitset_free_list; /* Free list of bitset elements. */ static lbitset_elt *lbitset_free_list; /* Free list of bitset elements. */
extern void debug_lbitset (bitset); extern void debug_lbitset PARAMS ((bitset));
#define LBITSET_CURRENT1(X) \ #define LBITSET_CURRENT1(X) \
((lbitset_elt *) (void *) ((char *) (X) - offsetof (lbitset_elt, words))) ((lbitset_elt *) (void *) ((char *) (X) - offsetof (lbitset_elt, words)))
@@ -118,13 +121,15 @@ lbitset_elt_alloc (void)
#define OBSTACK_CHUNK_FREE free #define OBSTACK_CHUNK_FREE free
#endif #endif
#if ! defined __GNUC__ || __GNUC__ < 2 #if !defined(__GNUC__) || (__GNUC__ < 2)
#define __alignof__(type) 0 #define __alignof__(type) 0
#endif #endif
obstack_specify_allocation (&lbitset_obstack, OBSTACK_CHUNK_SIZE, obstack_specify_allocation (&lbitset_obstack, OBSTACK_CHUNK_SIZE,
__alignof__ (lbitset_elt), __alignof__ (lbitset_elt),
(void *(*)PARAMS ((long)))
OBSTACK_CHUNK_ALLOC, OBSTACK_CHUNK_ALLOC,
(void (*)PARAMS ((void *)))
OBSTACK_CHUNK_FREE); OBSTACK_CHUNK_FREE);
} }
@@ -360,9 +365,6 @@ lbitset_elt_find (bitset bset, bitset_windex windex,
switch (mode) switch (mode)
{ {
default:
abort ();
case LBITSET_FIND: case LBITSET_FIND:
return 0; return 0;
@@ -376,6 +378,9 @@ lbitset_elt_find (bitset bset, bitset_windex windex,
case LBITSET_SUBST: case LBITSET_SUBST:
return &lbitset_zero_elts[0]; return &lbitset_zero_elts[0];
default:
abort ();
} }
} }
@@ -878,7 +883,8 @@ lbitset_empty_p (bitset dst)
/* Ensure that any unused bits within the last element are clear. */ /* Ensure that any unused bits within the last element are clear. */
static inline void static inline void
lbitset_unused_clear (bitset dst) lbitset_unused_clear (dst)
bitset dst;
{ {
unsigned int last_bit; unsigned int last_bit;
bitset_bindex n_bits; bitset_bindex n_bits;
@@ -1114,9 +1120,6 @@ lbitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
dstp = dtmp->words; dstp = dtmp->words;
switch (op) switch (op)
{ {
default:
abort ();
case BITSET_OP_OR: case BITSET_OP_OR:
for (i = 0; i < LBITSET_ELT_WORDS; i++, dstp++) for (i = 0; i < LBITSET_ELT_WORDS; i++, dstp++)
{ {
@@ -1168,6 +1171,9 @@ lbitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
} }
} }
break; break;
default:
abort ();
} }
if (!lbitset_elt_zero_p (dtmp)) if (!lbitset_elt_zero_p (dtmp))
@@ -1385,7 +1391,7 @@ debug_lbitset (bitset bset)
for (elt = LBITSET_HEAD (bset); elt; elt = elt->next) for (elt = LBITSET_HEAD (bset); elt; elt = elt->next)
{ {
fprintf (stderr, "Elt %lu\n", (unsigned long int) elt->index); fprintf (stderr, "Elt %lu\n", (unsigned long) elt->index);
for (i = 0; i < LBITSET_ELT_WORDS; i++) for (i = 0; i < LBITSET_ELT_WORDS; i++)
{ {
unsigned int j; unsigned int j;