30 |
type TYPE. */ |
type TYPE. */ |
31 |
bitset * |
bitset * |
32 |
bitsetv_alloc (n_vecs, n_bits, type) |
bitsetv_alloc (n_vecs, n_bits, type) |
33 |
unsigned int n_vecs; |
bitset_bindex n_vecs; |
34 |
unsigned int n_bits; |
bitset_bindex n_bits; |
35 |
enum bitset_type type; |
enum bitset_type type; |
36 |
{ |
{ |
37 |
unsigned int vector_bytes; |
size_t vector_bytes; |
38 |
unsigned int bytes; |
size_t bytes; |
39 |
bitset *bsetv; |
bitset *bsetv; |
40 |
unsigned int i; |
bitset_bindex i; |
41 |
|
|
42 |
/* Determine number of bytes for each set. */ |
/* Determine number of bytes for each set. */ |
43 |
bytes = bitset_bytes (type, n_bits); |
bytes = bitset_bytes (type, n_bits); |
44 |
|
|
45 |
|
/* If size calculation overflows, memory is exhausted. */ |
46 |
|
if (BITSET_SIZE_MAX / (sizeof (bitset) + bytes) <= n_vecs) |
47 |
|
xalloc_die (); |
48 |
|
|
49 |
/* Allocate vector table at head of bitset array. */ |
/* Allocate vector table at head of bitset array. */ |
50 |
vector_bytes = (n_vecs + 1) * sizeof (bitset); |
vector_bytes = (n_vecs + 1) * sizeof (bitset); |
67 |
attribute hints specified by ATTR. */ |
attribute hints specified by ATTR. */ |
68 |
bitset * |
bitset * |
69 |
bitsetv_create (n_vecs, n_bits, attr) |
bitsetv_create (n_vecs, n_bits, attr) |
70 |
unsigned int n_vecs; |
bitset_bindex n_vecs; |
71 |
unsigned int n_bits; |
bitset_bindex n_bits; |
72 |
unsigned int attr; |
unsigned int attr; |
73 |
{ |
{ |
74 |
enum bitset_type type; |
enum bitset_type type; |
83 |
bitsetv_free (bsetv) |
bitsetv_free (bsetv) |
84 |
bitset *bsetv; |
bitset *bsetv; |
85 |
{ |
{ |
86 |
unsigned int i; |
bitset_bindex i; |
87 |
|
|
88 |
for (i = 0; bsetv[i]; i++) |
for (i = 0; bsetv[i]; i++) |
89 |
BITSET_FREE_ (bsetv[i]); |
BITSET_FREE_ (bsetv[i]); |
96 |
bitsetv_zero (bsetv) |
bitsetv_zero (bsetv) |
97 |
struct bitset_struct **bsetv; |
struct bitset_struct **bsetv; |
98 |
{ |
{ |
99 |
unsigned int i; |
bitset_bindex i; |
100 |
|
|
101 |
for (i = 0; bsetv[i]; i++) |
for (i = 0; bsetv[i]; i++) |
102 |
bitset_zero (bsetv[i]); |
bitset_zero (bsetv[i]); |
108 |
bitsetv_ones (bsetv) |
bitsetv_ones (bsetv) |
109 |
bitset *bsetv; |
bitset *bsetv; |
110 |
{ |
{ |
111 |
unsigned int i; |
bitset_bindex i; |
112 |
|
|
113 |
for (i = 0; bsetv[i]; i++) |
for (i = 0; bsetv[i]; i++) |
114 |
bitset_ones (bsetv[i]); |
bitset_ones (bsetv[i]); |
121 |
bitsetv_transitive_closure (bsetv) |
bitsetv_transitive_closure (bsetv) |
122 |
bitset *bsetv; |
bitset *bsetv; |
123 |
{ |
{ |
124 |
unsigned int i; |
bitset_bindex i; |
125 |
unsigned int j; |
bitset_bindex j; |
126 |
|
|
127 |
for (i = 0; bsetv[i]; i++) |
for (i = 0; bsetv[i]; i++) |
128 |
for (j = 0; bsetv[j]; j++) |
for (j = 0; bsetv[j]; j++) |
138 |
void |
void |
139 |
bitsetv_reflexive_transitive_closure (bitsetv bsetv) |
bitsetv_reflexive_transitive_closure (bitsetv bsetv) |
140 |
{ |
{ |
141 |
int i; |
bitset_bindex i; |
142 |
|
|
143 |
bitsetv_transitive_closure (bsetv); |
bitsetv_transitive_closure (bsetv); |
144 |
for (i = 0; bsetv[i]; i++) |
for (i = 0; bsetv[i]; i++) |
154 |
const char *title, *subtitle; |
const char *title, *subtitle; |
155 |
bitset *bsetv; |
bitset *bsetv; |
156 |
{ |
{ |
157 |
unsigned int i; |
bitset_windex i; |
158 |
|
|
159 |
fprintf (file, "%s\n", title); |
fprintf (file, "%s\n", title); |
160 |
for (i = 0; bsetv[i]; i++) |
for (i = 0; bsetv[i]; i++) |
161 |
{ |
{ |
162 |
fprintf (file, "%s %d\n", subtitle, i); |
fprintf (file, "%s %lu\n", subtitle, (unsigned long) i); |
163 |
bitset_dump (file, bsetv[i]); |
bitset_dump (file, bsetv[i]); |
164 |
} |
} |
165 |
|
|
171 |
debug_bitsetv (bsetv) |
debug_bitsetv (bsetv) |
172 |
bitset *bsetv; |
bitset *bsetv; |
173 |
{ |
{ |
174 |
unsigned int i; |
bitset_windex i; |
175 |
|
|
176 |
for (i = 0; bsetv[i]; i++) |
for (i = 0; bsetv[i]; i++) |
177 |
{ |
{ |
178 |
fprintf (stderr, "%d: ", i); |
fprintf (stderr, "%lu: ", (unsigned long) i); |
179 |
debug_bitset (bsetv[i]); |
debug_bitset (bsetv[i]); |
180 |
} |
} |
181 |
|
|