annotate lib/bitsetv.c @ 40067:b5d7b6ac3542

bitsetv: Fix module dependencies. * lib/bitsetv.c: Include xalloc.h. * modules/bitsetv (Depends-on): Add 'xalloc'.
author Bruno Haible <bruno@clisp.org>
date Fri, 04 Jan 2019 12:56:22 +0100
parents b06060465f09
children 069b50a66104
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
39975
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
1 /* Bitset vectors.
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
2
40057
b06060465f09 maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents: 39975
diff changeset
3 Copyright (C) 2001-2002, 2004-2006, 2009-2015, 2018-2019 Free Software
39975
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
4 Foundation, Inc.
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
5
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
6 This program is free software: you can redistribute it and/or modify
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
8 the Free Software Foundation, either version 3 of the License, or
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
9 (at your option) any later version.
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
10
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
11 This program is distributed in the hope that it will be useful,
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
14 GNU General Public License for more details.
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
15
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
18
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
19 #include <config.h>
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
20
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
21 #include "bitsetv.h"
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
22
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
23 #include <stdlib.h>
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
24
40067
b5d7b6ac3542 bitsetv: Fix module dependencies.
Bruno Haible <bruno@clisp.org>
parents: 40057
diff changeset
25 #include "xalloc.h"
b5d7b6ac3542 bitsetv: Fix module dependencies.
Bruno Haible <bruno@clisp.org>
parents: 40057
diff changeset
26
39975
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
27
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
28 /* Create a vector of N_VECS bitsets, each of N_BITS, and of
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
29 type TYPE. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
30 bitset *
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
31 bitsetv_alloc (bitset_bindex n_vecs, bitset_bindex n_bits,
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
32 enum bitset_type type)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
33 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
34 /* Determine number of bytes for each set. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
35 size_t bytes = bitset_bytes (type, n_bits);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
36
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
37 /* If size calculation overflows, memory is exhausted. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
38 if (BITSET_SIZE_MAX / (sizeof (bitset) + bytes) <= n_vecs)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
39 xalloc_die ();
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
40
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
41 /* Allocate vector table at head of bitset array. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
42 size_t vector_bytes = (n_vecs + 1) * sizeof (bitset) + bytes - 1;
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
43 vector_bytes -= vector_bytes % bytes;
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
44 bitset *bsetv = xcalloc (1, vector_bytes + bytes * n_vecs);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
45
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
46 bitset_bindex i = 0;
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
47 for (i = 0; i < n_vecs; i++)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
48 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
49 bsetv[i] = (bitset) (void *) ((char *) bsetv + vector_bytes + i * bytes);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
50
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
51 bitset_init (bsetv[i], n_bits, type);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
52 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
53
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
54 /* Null terminate table. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
55 bsetv[i] = 0;
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
56 return bsetv;
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
57 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
58
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
59
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
60 /* Create a vector of N_VECS bitsets, each of N_BITS, and with
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
61 attribute hints specified by ATTR. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
62 bitset *
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
63 bitsetv_create (bitset_bindex n_vecs, bitset_bindex n_bits, unsigned attr)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
64 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
65 enum bitset_type type = bitset_type_choose (n_bits, attr);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
66 return bitsetv_alloc (n_vecs, n_bits, type);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
67 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
68
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
69
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
70 /* Free bitset vector BSETV. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
71 void
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
72 bitsetv_free (bitsetv bsetv)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
73 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
74 for (bitset_bindex i = 0; bsetv[i]; i++)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
75 BITSET_FREE_ (bsetv[i]);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
76 free (bsetv);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
77 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
78
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
79
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
80 /* Zero a vector of bitsets. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
81 void
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
82 bitsetv_zero (bitsetv bsetv)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
83 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
84 for (bitset_bindex i = 0; bsetv[i]; i++)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
85 bitset_zero (bsetv[i]);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
86 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
87
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
88
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
89 /* Set a vector of bitsets to ones. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
90 void
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
91 bitsetv_ones (bitsetv bsetv)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
92 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
93 for (bitset_bindex i = 0; bsetv[i]; i++)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
94 bitset_ones (bsetv[i]);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
95 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
96
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
97
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
98 /* Given a vector BSETV of N bitsets of size N, modify its contents to
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
99 be the transitive closure of what was given. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
100 void
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
101 bitsetv_transitive_closure (bitsetv bsetv)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
102 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
103 for (bitset_bindex i = 0; bsetv[i]; i++)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
104 for (bitset_bindex j = 0; bsetv[j]; j++)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
105 if (bitset_test (bsetv[j], i))
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
106 bitset_or (bsetv[j], bsetv[j], bsetv[i]);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
107 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
108
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
109
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
110 /* Given a vector BSETV of N bitsets of size N, modify its contents to
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
111 be the reflexive transitive closure of what was given. This is
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
112 the same as transitive closure but with all bits on the diagonal
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
113 of the bit matrix set. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
114 void
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
115 bitsetv_reflexive_transitive_closure (bitsetv bsetv)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
116 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
117 bitsetv_transitive_closure (bsetv);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
118 for (bitset_bindex i = 0; bsetv[i]; i++)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
119 bitset_set (bsetv[i], i);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
120 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
121
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
122
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
123 /* Dump the contents of a bitset vector BSETV with N_VECS elements to
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
124 FILE. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
125 void
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
126 bitsetv_dump (FILE *file, char const *title, char const *subtitle,
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
127 bitsetv bsetv)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
128 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
129 fprintf (file, "%s\n", title);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
130 for (bitset_windex i = 0; bsetv[i]; i++)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
131 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
132 fprintf (file, "%s %lu\n", subtitle, (unsigned long) i);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
133 bitset_dump (file, bsetv[i]);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
134 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
135
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
136 fprintf (file, "\n");
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
137 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
138
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
139
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
140 void
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
141 debug_bitsetv (bitsetv bsetv)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
142 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
143 for (bitset_windex i = 0; bsetv[i]; i++)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
144 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
145 fprintf (stderr, "%lu: ", (unsigned long) i);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
146 debug_bitset (bsetv[i]);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
147 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
148
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
149 fprintf (stderr, "\n");
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
150 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
151
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
152
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
153 /*--------------------------------------------------------.
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
154 | Display the MATRIX array of SIZE bitsets of size SIZE. |
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
155 `--------------------------------------------------------*/
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
156
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
157 void
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
158 bitsetv_matrix_dump (FILE *out, const char *title, bitsetv bset)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
159 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
160 bitset_bindex hsize = bitset_size (bset[0]);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
161
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
162 /* Title. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
163 fprintf (out, "%s BEGIN\n", title);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
164
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
165 /* Column numbers. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
166 fputs (" ", out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
167 for (bitset_bindex i = 0; i < hsize; ++i)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
168 putc (i / 10 ? '0' + i / 10 : ' ', out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
169 putc ('\n', out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
170 fputs (" ", out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
171 for (bitset_bindex i = 0; i < hsize; ++i)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
172 fprintf (out, "%d", (int) (i % 10));
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
173 putc ('\n', out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
174
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
175 /* Bar. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
176 fputs (" .", out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
177 for (bitset_bindex i = 0; i < hsize; ++i)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
178 putc ('-', out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
179 fputs (".\n", out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
180
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
181 /* Contents. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
182 for (bitset_bindex i = 0; bset[i]; ++i)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
183 {
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
184 fprintf (out, "%2lu|", (unsigned long) i);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
185 for (bitset_bindex j = 0; j < hsize; ++j)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
186 fputs (bitset_test (bset[i], j) ? "1" : " ", out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
187 fputs ("|\n", out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
188 }
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
189
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
190 /* Bar. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
191 fputs (" `", out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
192 for (bitset_bindex i = 0; i < hsize; ++i)
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
193 putc ('-', out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
194 fputs ("'\n", out);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
195
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
196 /* End title. */
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
197 fprintf (out, "%s END\n\n", title);
90954bfe8d66 bitsetv: new module
Akim Demaille <akim.demaille@gmail.com>
parents:
diff changeset
198 }