X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/f16b08196c780556cbf50691e2944960aebc46f6..a17187e56386747a9b4d9633c3d116c2087f2b8b:/lib/bitset.h diff --git a/lib/bitset.h b/lib/bitset.h index 3e52940c..0bc55261 100644 --- a/lib/bitset.h +++ b/lib/bitset.h @@ -1,5 +1,7 @@ /* Generic bitsets. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + + Copyright (C) 2002-2004, 2009-2012 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 @@ -31,11 +33,11 @@ /* Attributes used to select a bitset implementation. */ enum bitset_attr {BITSET_FIXED = 1, /* Bitset size fixed. */ - BITSET_VARIABLE = 2, /* Bitset size variable. */ - BITSET_DENSE = 4, /* Bitset dense. */ - BITSET_SPARSE = 8, /* Bitset sparse. */ - BITSET_FRUGAL = 16, /* Prefer most compact. */ - BITSET_GREEDY = 32}; /* Prefer fastest at memory expense. */ + BITSET_VARIABLE = 2, /* Bitset size variable. */ + BITSET_DENSE = 4, /* Bitset dense. */ + BITSET_SPARSE = 8, /* Bitset sparse. */ + BITSET_FRUGAL = 16, /* Prefer most compact. */ + BITSET_GREEDY = 32}; /* Prefer fastest at memory expense. */ typedef unsigned int bitset_attrs; @@ -47,26 +49,26 @@ union bitset_union { /* This must be the first member of every other structure that is a member of this union. */ - struct bbitset_struct b; /* Base bitset data. */ + struct bbitset_struct b; /* Base bitset data. */ struct abitset_struct { struct bbitset_struct b; - bitset_word words[1]; /* The array of bits. */ + bitset_word words[1]; /* The array of bits. */ } a; struct ebitset_struct { struct bbitset_struct b; - bitset_windex size; /* Number of elements. */ - struct ebitset_elt_struct **elts; /* Expanding array of ptrs to elts. */ + bitset_windex size; /* Number of elements. */ + struct ebitset_elt_struct **elts; /* Expanding array of ptrs to elts. */ } e; struct lbitset_struct { struct bbitset_struct b; - struct lbitset_elt_struct *head; /* First element in linked list. */ - struct lbitset_elt_struct *tail; /* Last element in linked list. */ + struct lbitset_elt_struct *head; /* First element in linked list. */ + struct lbitset_elt_struct *tail; /* Last element in linked list. */ } l; struct bitset_stats_struct @@ -78,7 +80,7 @@ union bitset_union struct vbitset_struct { struct bbitset_struct b; - bitset_windex size; /* Allocated size of array. */ + bitset_windex size; /* Allocated size of array. */ } v; }; @@ -114,7 +116,7 @@ extern void bitset_free (bitset); /* Create a bitset of desired type and size using an obstack. The bitset is zeroed. */ extern bitset bitset_obstack_alloc (struct obstack *bobstack, - bitset_bindex, enum bitset_type); + bitset_bindex, enum bitset_type); /* Free bitset allocated on obstack. */ extern void bitset_obstack_free (bitset); @@ -310,14 +312,14 @@ extern void bitset_dump (FILE *, bitset); printf ("%lu ", (unsigned long int) i); }; */ -#define BITSET_FOR_EACH(ITER, BSET, INDEX, MIN) \ - for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE; \ - (ITER.num == BITSET_LIST_SIZE) \ - && (ITER.num = bitset_list (BSET, ITER.list, \ - BITSET_LIST_SIZE, &ITER.next));) \ - for (ITER.i = 0; \ - ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1); \ - ITER.i++) +#define BITSET_FOR_EACH(ITER, BSET, INDEX, MIN) \ + for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE; \ + (ITER.num == BITSET_LIST_SIZE) \ + && (ITER.num = bitset_list (BSET, ITER.list, \ + BITSET_LIST_SIZE, &ITER.next));) \ + for (ITER.i = 0; \ + ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1); \ + ITER.i++) /* Loop over all elements of BSET, in reverse order starting with @@ -332,14 +334,14 @@ extern void bitset_dump (FILE *, bitset); printf ("%lu ", (unsigned long int) i); }; */ -#define BITSET_FOR_EACH_REVERSE(ITER, BSET, INDEX, MIN) \ - for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE; \ - (ITER.num == BITSET_LIST_SIZE) \ - && (ITER.num = bitset_list_reverse (BSET, ITER.list, \ - BITSET_LIST_SIZE, &ITER.next));) \ - for (ITER.i = 0; \ - ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1); \ - ITER.i++) +#define BITSET_FOR_EACH_REVERSE(ITER, BSET, INDEX, MIN) \ + for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE; \ + (ITER.num == BITSET_LIST_SIZE) \ + && (ITER.num = bitset_list_reverse (BSET, ITER.list, \ + BITSET_LIST_SIZE, &ITER.next));) \ + for (ITER.i = 0; \ + ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1); \ + ITER.i++) /* Define set operations in terms of logical operations. */