Mercurial > gnulib
annotate lib/bitset/table.c @ 40240:d55c6147cb55
bitset: fix overflows
Reported by Bruno Haible.
https://lists.gnu.org/archive/html/bug-gnulib/2019-03/msg00017.html
* lib/bitset/table.c (tbitset_test): last_bit is the position of
the bit in the array of bitset_word, so be sure to take its modulo
number-of-bits-in-bitset-word (i.e., EBITSET_ELT_WORDS).
* lib/bitset/list.c (lbitset_unused_clear): Likewise.
author | Akim Demaille <akim.demaille@gmail.com> |
---|---|
date | Sat, 16 Mar 2019 17:16:48 +0100 |
parents | e60e51dd1612 |
children |
rev | line source |
---|---|
39981
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1 /* Functions to support expandable bitsets. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
2 |
40057
b06060465f09
maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents:
39981
diff
changeset
|
3 Copyright (C) 2002-2006, 2009-2015, 2018-2019 Free Software Foundation, Inc. |
39981
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
4 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
5 Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
6 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
7 This program is free software: you can redistribute it and/or modify |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
8 it under the terms of the GNU General Public License as published by |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
10 (at your option) any later version. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
11 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
12 This program is distributed in the hope that it will be useful, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
15 GNU General Public License for more details. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
16 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
19 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
20 #include <config.h> |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
21 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
22 #include "bitset/table.h" |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
23 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
24 #include <stdlib.h> |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
25 #include <string.h> |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
26 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
27 #include "obstack.h" |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
28 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
29 /* This file implements expandable bitsets. These bitsets can be of |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
30 arbitrary length and are more efficient than arrays of bits for |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
31 large sparse sets. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
32 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
33 Empty elements are represented by a NULL pointer in the table of |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
34 element pointers. An alternative is to point to a special zero |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
35 element. Similarly, we could represent an all 1's element with |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
36 another special ones element pointer. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
37 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
38 Bitsets are commonly empty so we need to ensure that this special |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
39 case is fast. A zero bitset is indicated when cdata is 0. This is |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
40 conservative since cdata may be non zero and the bitset may still |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
41 be zero. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
42 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
43 The bitset cache can be disabled either by setting cindex to |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
44 BITSET_WINDEX_MAX or by setting csize to 0. Here |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
45 we use the former approach since cindex needs to be updated whenever |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
46 cdata is changed. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
47 */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
48 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
49 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
50 /* Number of words to use for each element. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
51 #define EBITSET_ELT_WORDS 2 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
52 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
53 /* Number of bits stored in each element. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
54 #define EBITSET_ELT_BITS \ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
55 ((unsigned) (EBITSET_ELT_WORDS * BITSET_WORD_BITS)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
56 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
57 /* Ebitset element. We use an array of bits. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
58 typedef struct tbitset_elt_struct |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
59 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
60 union |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
61 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
62 bitset_word words[EBITSET_ELT_WORDS]; /* Bits that are set. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
63 struct tbitset_elt_struct *next; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
64 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
65 u; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
66 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
67 tbitset_elt; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
68 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
69 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
70 typedef tbitset_elt *tbitset_elts; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
71 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
72 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
73 /* Number of elements to initially allocate. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
74 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
75 #ifndef EBITSET_INITIAL_SIZE |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
76 # define EBITSET_INITIAL_SIZE 2 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
77 #endif |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
78 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
79 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
80 enum tbitset_find_mode |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
81 { EBITSET_FIND, EBITSET_CREATE, EBITSET_SUBST }; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
82 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
83 static tbitset_elt tbitset_zero_elts[1]; /* Elements of all zero bits. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
84 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
85 /* Obstack to allocate bitset elements from. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
86 static struct obstack tbitset_obstack; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
87 static bool tbitset_obstack_init = false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
88 static tbitset_elt *tbitset_free_list; /* Free list of bitset elements. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
89 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
90 #define EBITSET_N_ELTS(N) (((N) + EBITSET_ELT_BITS - 1) / EBITSET_ELT_BITS) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
91 #define EBITSET_ELTS(BSET) ((BSET)->e.elts) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
92 #define EBITSET_SIZE(BSET) EBITSET_N_ELTS (BITSET_NBITS_ (BSET)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
93 #define EBITSET_ASIZE(BSET) ((BSET)->e.size) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
94 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
95 #define EBITSET_NEXT(ELT) ((ELT)->u.next) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
96 #define EBITSET_WORDS(ELT) ((ELT)->u.words) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
97 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
98 /* Disable bitset cache and mark BSET as being zero. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
99 #define EBITSET_ZERO_SET(BSET) ((BSET)->b.cindex = BITSET_WINDEX_MAX, \ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
100 (BSET)->b.cdata = 0) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
101 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
102 #define EBITSET_CACHE_DISABLE(BSET) ((BSET)->b.cindex = BITSET_WINDEX_MAX) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
103 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
104 /* Disable bitset cache and mark BSET as being possibly non-zero. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
105 #define EBITSET_NONZERO_SET(BSET) \ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
106 (EBITSET_CACHE_DISABLE (BSET), (BSET)->b.cdata = (bitset_word *)~0) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
107 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
108 /* A conservative estimate of whether the bitset is zero. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
109 This is non-zero only if we know for sure that the bitset is zero. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
110 #define EBITSET_ZERO_P(BSET) ((BSET)->b.cdata == 0) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
111 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
112 /* Enable cache to point to element with table index EINDEX. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
113 The element must exist. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
114 #define EBITSET_CACHE_SET(BSET, EINDEX) \ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
115 ((BSET)->b.cindex = (EINDEX) * EBITSET_ELT_WORDS, \ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
116 (BSET)->b.cdata = EBITSET_WORDS (EBITSET_ELTS (BSET) [EINDEX])) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
117 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
118 #undef min |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
119 #undef max |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
120 #define min(a, b) ((a) > (b) ? (b) : (a)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
121 #define max(a, b) ((a) > (b) ? (a) : (b)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
122 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
123 static bitset_bindex |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
124 tbitset_resize (bitset src, bitset_bindex n_bits) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
125 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
126 if (n_bits == BITSET_NBITS_ (src)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
127 return n_bits; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
128 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
129 bitset_windex oldsize = EBITSET_SIZE (src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
130 bitset_windex newsize = EBITSET_N_ELTS (n_bits); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
131 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
132 if (oldsize < newsize) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
133 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
134 /* The bitset needs to grow. If we already have enough memory |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
135 allocated, then just zero what we need. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
136 if (newsize > EBITSET_ASIZE (src)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
137 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
138 /* We need to allocate more memory. When oldsize is |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
139 non-zero this means that we are changing the size, so |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
140 grow the bitset 25% larger than requested to reduce |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
141 number of reallocations. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
142 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
143 bitset_windex size = oldsize == 0 ? newsize : newsize + newsize / 4; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
144 EBITSET_ELTS (src) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
145 = realloc (EBITSET_ELTS (src), size * sizeof (tbitset_elt *)); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
146 EBITSET_ASIZE (src) = size; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
147 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
148 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
149 memset (EBITSET_ELTS (src) + oldsize, 0, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
150 (newsize - oldsize) * sizeof (tbitset_elt *)); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
151 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
152 else |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
153 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
154 /* The bitset needs to shrink. There's no point deallocating |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
155 the memory unless it is shrinking by a reasonable amount. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
156 if ((oldsize - newsize) >= oldsize / 2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
157 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
158 EBITSET_ELTS (src) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
159 = realloc (EBITSET_ELTS (src), newsize * sizeof (tbitset_elt *)); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
160 EBITSET_ASIZE (src) = newsize; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
161 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
162 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
163 /* Need to prune any excess bits. FIXME. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
164 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
165 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
166 BITSET_NBITS_ (src) = n_bits; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
167 return n_bits; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
168 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
169 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
170 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
171 /* Allocate a tbitset element. The bits are not cleared. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
172 static inline tbitset_elt * |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
173 tbitset_elt_alloc (void) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
174 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
175 tbitset_elt *elt; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
176 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
177 if (tbitset_free_list != 0) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
178 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
179 elt = tbitset_free_list; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
180 tbitset_free_list = EBITSET_NEXT (elt); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
181 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
182 else |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
183 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
184 if (!tbitset_obstack_init) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
185 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
186 tbitset_obstack_init = true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
187 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
188 /* Let particular systems override the size of a chunk. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
189 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
190 #ifndef OBSTACK_CHUNK_SIZE |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
191 #define OBSTACK_CHUNK_SIZE 0 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
192 #endif |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
193 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
194 /* Let them override the alloc and free routines too. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
195 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
196 #ifndef OBSTACK_CHUNK_ALLOC |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
197 #define OBSTACK_CHUNK_ALLOC xmalloc |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
198 #endif |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
199 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
200 #ifndef OBSTACK_CHUNK_FREE |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
201 #define OBSTACK_CHUNK_FREE free |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
202 #endif |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
203 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
204 #if ! defined __GNUC__ || __GNUC__ < 2 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
205 #define __alignof__(type) 0 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
206 #endif |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
207 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
208 obstack_specify_allocation (&tbitset_obstack, OBSTACK_CHUNK_SIZE, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
209 __alignof__ (tbitset_elt), |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
210 OBSTACK_CHUNK_ALLOC, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
211 OBSTACK_CHUNK_FREE); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
212 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
213 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
214 /* Perhaps we should add a number of new elements to the free |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
215 list. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
216 elt = (tbitset_elt *) obstack_alloc (&tbitset_obstack, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
217 sizeof (tbitset_elt)); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
218 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
219 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
220 return elt; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
221 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
222 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
223 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
224 /* Allocate a tbitset element. The bits are cleared. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
225 static inline tbitset_elt * |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
226 tbitset_elt_calloc (void) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
227 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
228 tbitset_elt *elt = tbitset_elt_alloc (); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
229 memset (EBITSET_WORDS (elt), 0, sizeof (EBITSET_WORDS (elt))); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
230 return elt; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
231 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
232 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
233 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
234 static inline void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
235 tbitset_elt_free (tbitset_elt *elt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
236 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
237 EBITSET_NEXT (elt) = tbitset_free_list; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
238 tbitset_free_list = elt; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
239 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
240 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
241 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
242 /* Remove element with index EINDEX from bitset BSET. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
243 static inline void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
244 tbitset_elt_remove (bitset bset, bitset_windex eindex) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
245 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
246 tbitset_elts *elts = EBITSET_ELTS (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
247 tbitset_elt *elt = elts[eindex]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
248 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
249 elts[eindex] = 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
250 tbitset_elt_free (elt); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
251 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
252 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
253 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
254 /* Add ELT into elts at index EINDEX of bitset BSET. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
255 static inline void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
256 tbitset_elt_add (bitset bset, tbitset_elt *elt, bitset_windex eindex) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
257 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
258 tbitset_elts *elts = EBITSET_ELTS (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
259 /* Assume that the elts entry not allocated. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
260 elts[eindex] = elt; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
261 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
262 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
263 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
264 /* Are all bits in an element zero? */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
265 static inline bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
266 tbitset_elt_zero_p (tbitset_elt *elt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
267 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
268 for (int i = 0; i < EBITSET_ELT_WORDS; i++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
269 if (EBITSET_WORDS (elt)[i]) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
270 return false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
271 return true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
272 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
273 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
274 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
275 static tbitset_elt * |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
276 tbitset_elt_find (bitset bset, bitset_bindex bindex, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
277 enum tbitset_find_mode mode) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
278 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
279 bitset_windex eindex = bindex / EBITSET_ELT_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
280 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
281 tbitset_elts *elts = EBITSET_ELTS (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
282 bitset_windex size = EBITSET_SIZE (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
283 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
284 if (eindex < size) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
285 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
286 tbitset_elt *elt = elts[eindex]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
287 if (elt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
288 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
289 if (EBITSET_WORDS (elt) != bset->b.cdata) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
290 EBITSET_CACHE_SET (bset, eindex); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
291 return elt; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
292 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
293 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
294 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
295 /* The element could not be found. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
296 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
297 switch (mode) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
298 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
299 default: |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
300 abort (); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
301 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
302 case EBITSET_FIND: |
40239
e60e51dd1612
bitset: style changes
Akim Demaille <akim.demaille@gmail.com>
parents:
40057
diff
changeset
|
303 return NULL; |
39981
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
304 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
305 case EBITSET_CREATE: |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
306 if (eindex >= size) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
307 tbitset_resize (bset, bindex); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
308 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
309 /* Create a new element. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
310 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
311 tbitset_elt *elt = tbitset_elt_calloc (); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
312 tbitset_elt_add (bset, elt, eindex); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
313 EBITSET_CACHE_SET (bset, eindex); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
314 return elt; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
315 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
316 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
317 case EBITSET_SUBST: |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
318 return &tbitset_zero_elts[0]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
319 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
320 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
321 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
322 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
323 /* Weed out the zero elements from the elts. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
324 static inline bitset_windex |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
325 tbitset_weed (bitset bset) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
326 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
327 if (EBITSET_ZERO_P (bset)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
328 return 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
329 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
330 tbitset_elts *elts = EBITSET_ELTS (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
331 bitset_windex count = 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
332 bitset_windex j; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
333 for (j = 0; j < EBITSET_SIZE (bset); j++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
334 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
335 tbitset_elt *elt = elts[j]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
336 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
337 if (elt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
338 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
339 if (tbitset_elt_zero_p (elt)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
340 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
341 tbitset_elt_remove (bset, j); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
342 count++; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
343 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
344 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
345 else |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
346 count++; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
347 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
348 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
349 count = j - count; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
350 if (!count) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
351 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
352 /* All the bits are zero. We could shrink the elts. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
353 For now just mark BSET as known to be zero. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
354 EBITSET_ZERO_SET (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
355 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
356 else |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
357 EBITSET_NONZERO_SET (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
358 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
359 return count; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
360 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
361 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
362 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
363 /* Set all bits in the bitset to zero. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
364 static inline void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
365 tbitset_zero (bitset bset) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
366 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
367 if (EBITSET_ZERO_P (bset)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
368 return; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
369 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
370 tbitset_elts *elts = EBITSET_ELTS (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
371 for (bitset_windex j = 0; j < EBITSET_SIZE (bset); j++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
372 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
373 tbitset_elt *elt = elts[j]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
374 if (elt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
375 tbitset_elt_remove (bset, j); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
376 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
377 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
378 /* All the bits are zero. We could shrink the elts. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
379 For now just mark BSET as known to be zero. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
380 EBITSET_ZERO_SET (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
381 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
382 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
383 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
384 static inline bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
385 tbitset_equal_p (bitset dst, bitset src) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
386 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
387 if (src == dst) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
388 return true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
389 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
390 tbitset_weed (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
391 tbitset_weed (src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
392 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
393 if (EBITSET_SIZE (src) != EBITSET_SIZE (dst)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
394 return false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
395 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
396 tbitset_elts *selts = EBITSET_ELTS (src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
397 tbitset_elts *delts = EBITSET_ELTS (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
398 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
399 for (bitset_windex j = 0; j < EBITSET_SIZE (src); j++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
400 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
401 tbitset_elt *selt = selts[j]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
402 tbitset_elt *delt = delts[j]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
403 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
404 if (!selt && !delt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
405 continue; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
406 if ((selt && !delt) || (!selt && delt)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
407 return false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
408 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
409 for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
410 if (EBITSET_WORDS (selt)[i] != EBITSET_WORDS (delt)[i]) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
411 return false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
412 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
413 return true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
414 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
415 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
416 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
417 /* Copy bits from bitset SRC to bitset DST. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
418 static inline void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
419 tbitset_copy_ (bitset dst, bitset src) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
420 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
421 if (src == dst) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
422 return; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
423 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
424 tbitset_zero (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
425 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
426 if (BITSET_NBITS_ (dst) != BITSET_NBITS_ (src)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
427 tbitset_resize (dst, BITSET_NBITS_ (src)); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
428 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
429 tbitset_elts *selts = EBITSET_ELTS (src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
430 tbitset_elts *delts = EBITSET_ELTS (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
431 for (bitset_windex j = 0; j < EBITSET_SIZE (src); j++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
432 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
433 tbitset_elt *selt = selts[j]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
434 if (selt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
435 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
436 tbitset_elt *tmp = tbitset_elt_alloc (); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
437 delts[j] = tmp; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
438 memcpy (EBITSET_WORDS (tmp), EBITSET_WORDS (selt), |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
439 sizeof (EBITSET_WORDS (selt))); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
440 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
441 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
442 EBITSET_NONZERO_SET (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
443 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
444 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
445 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
446 /* Copy bits from bitset SRC to bitset DST. Return true if |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
447 bitsets different. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
448 static inline bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
449 tbitset_copy_cmp (bitset dst, bitset src) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
450 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
451 if (src == dst) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
452 return false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
453 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
454 if (EBITSET_ZERO_P (dst)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
455 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
456 tbitset_copy_ (dst, src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
457 return !EBITSET_ZERO_P (src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
458 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
459 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
460 if (tbitset_equal_p (dst, src)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
461 return false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
462 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
463 tbitset_copy_ (dst, src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
464 return true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
465 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
466 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
467 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
468 /* Set bit BITNO in bitset DST. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
469 static void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
470 tbitset_set (bitset dst, bitset_bindex bitno) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
471 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
472 bitset_windex windex = bitno / BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
473 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
474 tbitset_elt_find (dst, bitno, EBITSET_CREATE); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
475 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
476 dst->b.cdata[windex - dst->b.cindex] |= |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
477 (bitset_word) 1 << (bitno % BITSET_WORD_BITS); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
478 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
479 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
480 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
481 /* Reset bit BITNO in bitset DST. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
482 static void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
483 tbitset_reset (bitset dst, bitset_bindex bitno) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
484 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
485 bitset_windex windex = bitno / BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
486 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
487 if (!tbitset_elt_find (dst, bitno, EBITSET_FIND)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
488 return; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
489 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
490 dst->b.cdata[windex - dst->b.cindex] &= |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
491 ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS)); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
492 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
493 /* If all the data is zero, perhaps we should remove it now... |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
494 However, there is a good chance that the element will be needed |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
495 again soon. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
496 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
497 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
498 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
499 /* Test bit BITNO in bitset SRC. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
500 static bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
501 tbitset_test (bitset src, bitset_bindex bitno) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
502 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
503 bitset_windex windex = bitno / BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
504 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
505 return (tbitset_elt_find (src, bitno, EBITSET_FIND) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
506 && ((src->b.cdata[windex - src->b.cindex] |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
507 >> (bitno % BITSET_WORD_BITS)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
508 & 1)); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
509 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
510 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
511 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
512 static void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
513 tbitset_free (bitset bset) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
514 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
515 tbitset_zero (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
516 free (EBITSET_ELTS (bset)); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
517 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
518 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
519 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
520 /* Find list of up to NUM bits set in BSET starting from and including |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
521 *NEXT and store in array LIST. Return with actual number of bits |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
522 found and with *NEXT indicating where search stopped. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
523 static bitset_bindex |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
524 tbitset_list_reverse (bitset bset, bitset_bindex *list, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
525 bitset_bindex num, bitset_bindex *next) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
526 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
527 if (EBITSET_ZERO_P (bset)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
528 return 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
529 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
530 bitset_windex size = EBITSET_SIZE (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
531 bitset_bindex n_bits = size * EBITSET_ELT_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
532 bitset_bindex rbitno = *next; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
533 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
534 if (rbitno >= n_bits) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
535 return 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
536 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
537 tbitset_elts *elts = EBITSET_ELTS (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
538 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
539 bitset_bindex bitno = n_bits - (rbitno + 1); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
540 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
541 bitset_windex windex = bitno / BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
542 bitset_windex eindex = bitno / EBITSET_ELT_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
543 bitset_windex woffset = windex - eindex * EBITSET_ELT_WORDS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
544 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
545 /* If num is 1, we could speed things up with a binary search |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
546 of the word of interest. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
547 bitset_bindex count = 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
548 unsigned bcount = bitno % BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
549 bitset_bindex boffset = windex * BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
550 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
551 do |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
552 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
553 tbitset_elt *elt = elts[eindex]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
554 if (elt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
555 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
556 bitset_word *srcp = EBITSET_WORDS (elt); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
557 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
558 do |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
559 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
560 for (bitset_word word = srcp[woffset] << (BITSET_WORD_BITS - 1 - bcount); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
561 word; bcount--) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
562 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
563 if (word & BITSET_MSB) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
564 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
565 list[count++] = boffset + bcount; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
566 if (count >= num) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
567 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
568 *next = n_bits - (boffset + bcount); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
569 return count; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
570 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
571 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
572 word <<= 1; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
573 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
574 boffset -= BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
575 bcount = BITSET_WORD_BITS - 1; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
576 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
577 while (woffset--); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
578 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
579 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
580 woffset = EBITSET_ELT_WORDS - 1; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
581 boffset = eindex * EBITSET_ELT_BITS - BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
582 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
583 while (eindex--); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
584 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
585 *next = n_bits - (boffset + 1); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
586 return count; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
587 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
588 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
589 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
590 /* Find list of up to NUM bits set in BSET starting from and including |
40239
e60e51dd1612
bitset: style changes
Akim Demaille <akim.demaille@gmail.com>
parents:
40057
diff
changeset
|
591 *NEXT and store in array LIST. Return with actual number of bits |
e60e51dd1612
bitset: style changes
Akim Demaille <akim.demaille@gmail.com>
parents:
40057
diff
changeset
|
592 found and with *NEXT indicating where search stopped. */ |
39981
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
593 static bitset_bindex |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
594 tbitset_list (bitset bset, bitset_bindex *list, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
595 bitset_bindex num, bitset_bindex *next) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
596 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
597 if (EBITSET_ZERO_P (bset)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
598 return 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
599 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
600 bitset_bindex bitno = *next; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
601 bitset_bindex count = 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
602 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
603 tbitset_elts *elts = EBITSET_ELTS (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
604 bitset_windex size = EBITSET_SIZE (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
605 bitset_windex eindex = bitno / EBITSET_ELT_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
606 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
607 if (bitno % EBITSET_ELT_BITS) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
608 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
609 /* We need to start within an element. This is not very common. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
610 tbitset_elt *elt = elts[eindex]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
611 if (elt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
612 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
613 bitset_word *srcp = EBITSET_WORDS (elt); |
40239
e60e51dd1612
bitset: style changes
Akim Demaille <akim.demaille@gmail.com>
parents:
40057
diff
changeset
|
614 bitset_windex woffset = eindex * EBITSET_ELT_WORDS; |
39981
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
615 |
40239
e60e51dd1612
bitset: style changes
Akim Demaille <akim.demaille@gmail.com>
parents:
40057
diff
changeset
|
616 for (bitset_windex windex = bitno / BITSET_WORD_BITS; |
e60e51dd1612
bitset: style changes
Akim Demaille <akim.demaille@gmail.com>
parents:
40057
diff
changeset
|
617 (windex - woffset) < EBITSET_ELT_WORDS; windex++) |
39981
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
618 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
619 bitset_word word = srcp[windex - woffset] >> (bitno % BITSET_WORD_BITS); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
620 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
621 for (; word; bitno++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
622 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
623 if (word & 1) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
624 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
625 list[count++] = bitno; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
626 if (count >= num) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
627 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
628 *next = bitno + 1; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
629 return count; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
630 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
631 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
632 word >>= 1; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
633 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
634 bitno = (windex + 1) * BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
635 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
636 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
637 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
638 /* Skip to next element. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
639 eindex++; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
640 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
641 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
642 /* If num is 1, we could speed things up with a binary search |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
643 of the word of interest. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
644 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
645 for (; eindex < size; eindex++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
646 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
647 bitset_word *srcp; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
648 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
649 tbitset_elt *elt = elts[eindex]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
650 if (!elt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
651 continue; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
652 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
653 srcp = EBITSET_WORDS (elt); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
654 bitset_windex windex = eindex * EBITSET_ELT_WORDS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
655 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
656 if ((count + EBITSET_ELT_BITS) < num) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
657 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
658 /* The coast is clear, plant boot! */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
659 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
660 #if EBITSET_ELT_WORDS == 2 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
661 bitset_word word = srcp[0]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
662 if (word) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
663 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
664 if (!(word & 0xffff)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
665 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
666 word >>= 16; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
667 bitno += 16; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
668 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
669 if (!(word & 0xff)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
670 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
671 word >>= 8; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
672 bitno += 8; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
673 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
674 for (; word; bitno++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
675 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
676 if (word & 1) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
677 list[count++] = bitno; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
678 word >>= 1; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
679 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
680 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
681 windex++; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
682 bitno = windex * BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
683 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
684 word = srcp[1]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
685 if (word) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
686 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
687 if (!(word & 0xffff)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
688 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
689 word >>= 16; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
690 bitno += 16; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
691 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
692 for (; word; bitno++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
693 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
694 if (word & 1) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
695 list[count++] = bitno; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
696 word >>= 1; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
697 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
698 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
699 windex++; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
700 bitno = windex * BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
701 #else |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
702 for (int i = 0; i < EBITSET_ELT_WORDS; i++, windex++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
703 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
704 bitno = windex * BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
705 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
706 word = srcp[i]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
707 if (word) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
708 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
709 if (!(word & 0xffff)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
710 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
711 word >>= 16; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
712 bitno += 16; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
713 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
714 if (!(word & 0xff)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
715 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
716 word >>= 8; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
717 bitno += 8; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
718 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
719 for (; word; bitno++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
720 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
721 if (word & 1) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
722 list[count++] = bitno; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
723 word >>= 1; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
724 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
725 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
726 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
727 #endif |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
728 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
729 else |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
730 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
731 /* Tread more carefully since we need to check |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
732 if array overflows. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
733 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
734 for (int i = 0; i < EBITSET_ELT_WORDS; i++, windex++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
735 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
736 bitno = windex * BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
737 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
738 for (bitset_word word = srcp[i]; word; bitno++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
739 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
740 if (word & 1) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
741 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
742 list[count++] = bitno; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
743 if (count >= num) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
744 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
745 *next = bitno + 1; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
746 return count; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
747 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
748 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
749 word >>= 1; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
750 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
751 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
752 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
753 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
754 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
755 *next = bitno; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
756 return count; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
757 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
758 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
759 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
760 /* Ensure that any unused bits within the last element are clear. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
761 static inline void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
762 tbitset_unused_clear (bitset dst) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
763 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
764 bitset_bindex n_bits = BITSET_NBITS_ (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
765 unsigned last_bit = n_bits % EBITSET_ELT_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
766 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
767 if (last_bit) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
768 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
769 tbitset_elts *elts = EBITSET_ELTS (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
770 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
771 bitset_windex eindex = n_bits / EBITSET_ELT_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
772 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
773 tbitset_elt *elt = elts[eindex]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
774 if (elt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
775 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
776 bitset_word *srcp = EBITSET_WORDS (elt); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
777 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
778 bitset_windex windex = n_bits / BITSET_WORD_BITS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
779 bitset_windex woffset = eindex * EBITSET_ELT_WORDS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
780 |
40240
d55c6147cb55
bitset: fix overflows
Akim Demaille <akim.demaille@gmail.com>
parents:
40239
diff
changeset
|
781 srcp[windex - woffset] |
d55c6147cb55
bitset: fix overflows
Akim Demaille <akim.demaille@gmail.com>
parents:
40239
diff
changeset
|
782 &= ((bitset_word) 1 << (last_bit % BITSET_WORD_BITS)) - 1; |
39981
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
783 windex++; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
784 for (; (windex - woffset) < EBITSET_ELT_WORDS; windex++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
785 srcp[windex - woffset] = 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
786 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
787 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
788 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
789 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
790 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
791 static void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
792 tbitset_ones (bitset dst) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
793 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
794 for (bitset_windex j = 0; j < EBITSET_SIZE (dst); j++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
795 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
796 /* Create new elements if they cannot be found. Perhaps |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
797 we should just add pointers to a ones element? */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
798 tbitset_elt *elt = |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
799 tbitset_elt_find (dst, j * EBITSET_ELT_BITS, EBITSET_CREATE); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
800 memset (EBITSET_WORDS (elt), -1, sizeof (EBITSET_WORDS (elt))); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
801 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
802 EBITSET_NONZERO_SET (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
803 tbitset_unused_clear (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
804 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
805 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
806 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
807 static bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
808 tbitset_empty_p (bitset dst) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
809 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
810 if (EBITSET_ZERO_P (dst)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
811 return true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
812 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
813 tbitset_elts *elts = EBITSET_ELTS (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
814 for (bitset_windex j = 0; j < EBITSET_SIZE (dst); j++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
815 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
816 tbitset_elt *elt = elts[j]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
817 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
818 if (elt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
819 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
820 if (!tbitset_elt_zero_p (elt)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
821 return false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
822 /* Do some weeding as we go. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
823 tbitset_elt_remove (dst, j); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
824 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
825 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
826 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
827 /* All the bits are zero. We could shrink the elts. |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
828 For now just mark DST as known to be zero. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
829 EBITSET_ZERO_SET (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
830 return true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
831 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
832 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
833 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
834 static void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
835 tbitset_not (bitset dst, bitset src) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
836 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
837 tbitset_resize (dst, BITSET_NBITS_ (src)); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
838 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
839 for (bitset_windex j = 0; j < EBITSET_SIZE (src); j++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
840 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
841 /* Create new elements for dst if they cannot be found |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
842 or substitute zero elements if src elements not found. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
843 tbitset_elt *selt = |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
844 tbitset_elt_find (src, j * EBITSET_ELT_BITS, EBITSET_SUBST); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
845 tbitset_elt *delt = |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
846 tbitset_elt_find (dst, j * EBITSET_ELT_BITS, EBITSET_CREATE); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
847 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
848 for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
849 EBITSET_WORDS (delt)[i] = ~EBITSET_WORDS (selt)[i]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
850 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
851 EBITSET_NONZERO_SET (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
852 tbitset_unused_clear (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
853 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
854 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
855 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
856 /* Is DST == DST | SRC? */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
857 static bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
858 tbitset_subset_p (bitset dst, bitset src) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
859 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
860 tbitset_elts *selts = EBITSET_ELTS (src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
861 tbitset_elts *delts = EBITSET_ELTS (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
862 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
863 bitset_windex ssize = EBITSET_SIZE (src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
864 bitset_windex dsize = EBITSET_SIZE (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
865 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
866 for (bitset_windex j = 0; j < ssize; j++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
867 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
868 tbitset_elt *selt = j < ssize ? selts[j] : 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
869 tbitset_elt *delt = j < dsize ? delts[j] : 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
870 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
871 if (!selt && !delt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
872 continue; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
873 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
874 if (!selt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
875 selt = &tbitset_zero_elts[0]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
876 if (!delt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
877 delt = &tbitset_zero_elts[0]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
878 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
879 for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
880 if (EBITSET_WORDS (delt)[i] |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
881 != (EBITSET_WORDS (selt)[i] | EBITSET_WORDS (delt)[i])) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
882 return false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
883 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
884 return true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
885 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
886 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
887 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
888 /* Is DST & SRC == 0? */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
889 static bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
890 tbitset_disjoint_p (bitset dst, bitset src) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
891 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
892 tbitset_elts *selts = EBITSET_ELTS (src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
893 tbitset_elts *delts = EBITSET_ELTS (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
894 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
895 bitset_windex ssize = EBITSET_SIZE (src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
896 bitset_windex dsize = EBITSET_SIZE (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
897 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
898 for (bitset_windex j = 0; j < ssize; j++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
899 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
900 tbitset_elt *selt = j < ssize ? selts[j] : 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
901 tbitset_elt *delt = j < dsize ? delts[j] : 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
902 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
903 if (!selt || !delt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
904 continue; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
905 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
906 for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
907 if ((EBITSET_WORDS (selt)[i] & EBITSET_WORDS (delt)[i])) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
908 return false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
909 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
910 return true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
911 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
912 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
913 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
914 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
915 static bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
916 tbitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
917 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
918 bool changed = false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
919 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
920 tbitset_resize (dst, max (BITSET_NBITS_ (src1), BITSET_NBITS_ (src2))); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
921 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
922 bitset_windex ssize1 = EBITSET_SIZE (src1); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
923 bitset_windex ssize2 = EBITSET_SIZE (src2); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
924 bitset_windex dsize = EBITSET_SIZE (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
925 bitset_windex size = ssize1; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
926 if (size < ssize2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
927 size = ssize2; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
928 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
929 tbitset_elts *selts1 = EBITSET_ELTS (src1); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
930 tbitset_elts *selts2 = EBITSET_ELTS (src2); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
931 tbitset_elts *delts = EBITSET_ELTS (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
932 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
933 bitset_windex j = 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
934 for (j = 0; j < size; j++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
935 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
936 tbitset_elt *selt1 = j < ssize1 ? selts1[j] : 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
937 tbitset_elt *selt2 = j < ssize2 ? selts2[j] : 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
938 tbitset_elt *delt = j < dsize ? delts[j] : 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
939 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
940 if (!selt1 && !selt2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
941 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
942 if (delt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
943 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
944 changed = true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
945 tbitset_elt_remove (dst, j); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
946 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
947 continue; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
948 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
949 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
950 if (!selt1) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
951 selt1 = &tbitset_zero_elts[0]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
952 if (!selt2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
953 selt2 = &tbitset_zero_elts[0]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
954 if (!delt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
955 delt = tbitset_elt_calloc (); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
956 else |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
957 delts[j] = 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
958 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
959 bitset_word *srcp1 = EBITSET_WORDS (selt1); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
960 bitset_word *srcp2 = EBITSET_WORDS (selt2); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
961 bitset_word *dstp = EBITSET_WORDS (delt); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
962 switch (op) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
963 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
964 default: |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
965 abort (); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
966 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
967 case BITSET_OP_OR: |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
968 for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++, dstp++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
969 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
970 bitset_word tmp = *srcp1++ | *srcp2++; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
971 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
972 if (*dstp != tmp) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
973 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
974 changed = true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
975 *dstp = tmp; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
976 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
977 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
978 break; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
979 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
980 case BITSET_OP_AND: |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
981 for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++, dstp++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
982 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
983 bitset_word tmp = *srcp1++ & *srcp2++; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
984 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
985 if (*dstp != tmp) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
986 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
987 changed = true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
988 *dstp = tmp; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
989 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
990 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
991 break; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
992 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
993 case BITSET_OP_XOR: |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
994 for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++, dstp++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
995 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
996 bitset_word tmp = *srcp1++ ^ *srcp2++; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
997 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
998 if (*dstp != tmp) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
999 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1000 changed = true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1001 *dstp = tmp; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1002 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1003 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1004 break; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1005 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1006 case BITSET_OP_ANDN: |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1007 for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++, dstp++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1008 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1009 bitset_word tmp = *srcp1++ & ~(*srcp2++); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1010 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1011 if (*dstp != tmp) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1012 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1013 changed = true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1014 *dstp = tmp; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1015 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1016 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1017 break; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1018 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1019 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1020 if (!tbitset_elt_zero_p (delt)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1021 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1022 tbitset_elt_add (dst, delt, j); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1023 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1024 else |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1025 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1026 tbitset_elt_free (delt); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1027 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1028 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1029 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1030 /* If we have elements of DST left over, free them all. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1031 for (; j < dsize; j++) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1032 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1033 changed = true; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1034 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1035 tbitset_elt *delt = delts[j]; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1036 if (delt) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1037 tbitset_elt_remove (dst, j); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1038 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1039 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1040 EBITSET_NONZERO_SET (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1041 return changed; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1042 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1043 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1044 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1045 static bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1046 tbitset_and_cmp (bitset dst, bitset src1, bitset src2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1047 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1048 if (EBITSET_ZERO_P (src2)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1049 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1050 tbitset_weed (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1051 bool changed = EBITSET_ZERO_P (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1052 tbitset_zero (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1053 return changed; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1054 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1055 else if (EBITSET_ZERO_P (src1)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1056 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1057 tbitset_weed (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1058 bool changed = EBITSET_ZERO_P (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1059 tbitset_zero (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1060 return changed; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1061 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1062 return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_AND); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1063 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1064 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1065 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1066 static void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1067 tbitset_and (bitset dst, bitset src1, bitset src2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1068 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1069 tbitset_and_cmp (dst, src1, src2); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1070 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1071 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1072 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1073 static bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1074 tbitset_andn_cmp (bitset dst, bitset src1, bitset src2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1075 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1076 if (EBITSET_ZERO_P (src2)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1077 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1078 return tbitset_copy_cmp (dst, src1); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1079 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1080 else if (EBITSET_ZERO_P (src1)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1081 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1082 tbitset_weed (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1083 bool changed = EBITSET_ZERO_P (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1084 tbitset_zero (dst); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1085 return changed; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1086 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1087 return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_ANDN); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1088 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1089 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1090 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1091 static void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1092 tbitset_andn (bitset dst, bitset src1, bitset src2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1093 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1094 tbitset_andn_cmp (dst, src1, src2); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1095 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1096 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1097 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1098 static bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1099 tbitset_or_cmp (bitset dst, bitset src1, bitset src2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1100 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1101 if (EBITSET_ZERO_P (src2)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1102 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1103 return tbitset_copy_cmp (dst, src1); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1104 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1105 else if (EBITSET_ZERO_P (src1)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1106 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1107 return tbitset_copy_cmp (dst, src2); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1108 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1109 return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_OR); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1110 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1111 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1112 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1113 static void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1114 tbitset_or (bitset dst, bitset src1, bitset src2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1115 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1116 tbitset_or_cmp (dst, src1, src2); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1117 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1118 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1119 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1120 static bool |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1121 tbitset_xor_cmp (bitset dst, bitset src1, bitset src2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1122 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1123 if (EBITSET_ZERO_P (src2)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1124 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1125 return tbitset_copy_cmp (dst, src1); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1126 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1127 else if (EBITSET_ZERO_P (src1)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1128 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1129 return tbitset_copy_cmp (dst, src2); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1130 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1131 return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_XOR); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1132 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1133 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1134 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1135 static void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1136 tbitset_xor (bitset dst, bitset src1, bitset src2) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1137 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1138 tbitset_xor_cmp (dst, src1, src2); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1139 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1140 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1141 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1142 static void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1143 tbitset_copy (bitset dst, bitset src) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1144 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1145 if (BITSET_COMPATIBLE_ (dst, src)) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1146 tbitset_copy_ (dst, src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1147 else |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1148 bitset_copy_ (dst, src); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1149 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1150 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1151 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1152 /* Vector of operations for linked-list bitsets. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1153 struct bitset_vtable tbitset_vtable = { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1154 tbitset_set, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1155 tbitset_reset, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1156 bitset_toggle_, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1157 tbitset_test, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1158 tbitset_resize, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1159 bitset_size_, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1160 bitset_count_, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1161 tbitset_empty_p, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1162 tbitset_ones, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1163 tbitset_zero, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1164 tbitset_copy, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1165 tbitset_disjoint_p, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1166 tbitset_equal_p, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1167 tbitset_not, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1168 tbitset_subset_p, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1169 tbitset_and, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1170 tbitset_and_cmp, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1171 tbitset_andn, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1172 tbitset_andn_cmp, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1173 tbitset_or, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1174 tbitset_or_cmp, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1175 tbitset_xor, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1176 tbitset_xor_cmp, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1177 bitset_and_or_, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1178 bitset_and_or_cmp_, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1179 bitset_andn_or_, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1180 bitset_andn_or_cmp_, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1181 bitset_or_and_, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1182 bitset_or_and_cmp_, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1183 tbitset_list, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1184 tbitset_list_reverse, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1185 tbitset_free, |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1186 BITSET_TABLE |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1187 }; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1188 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1189 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1190 /* Return size of initial structure. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1191 size_t |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1192 tbitset_bytes (bitset_bindex n_bits ATTRIBUTE_UNUSED) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1193 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1194 return sizeof (struct tbitset_struct); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1195 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1196 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1197 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1198 /* Initialize a bitset. */ |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1199 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1200 bitset |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1201 tbitset_init (bitset bset, bitset_bindex n_bits) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1202 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1203 bset->b.vtable = &tbitset_vtable; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1204 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1205 bset->b.csize = EBITSET_ELT_WORDS; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1206 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1207 EBITSET_ZERO_SET (bset); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1208 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1209 EBITSET_ASIZE (bset) = 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1210 EBITSET_ELTS (bset) = 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1211 tbitset_resize (bset, n_bits); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1212 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1213 return bset; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1214 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1215 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1216 |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1217 void |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1218 tbitset_release_memory (void) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1219 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1220 tbitset_free_list = 0; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1221 if (tbitset_obstack_init) |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1222 { |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1223 tbitset_obstack_init = false; |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1224 obstack_free (&tbitset_obstack, NULL); |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1225 } |
14ac09965b35
bitset: rename ebitset/expandable.* as tbitset/table.*
Akim Demaille <akim.demaille@gmail.com>
parents:
diff
changeset
|
1226 } |