blob: b43fb821ff4c121c214313f11ba314387ef19c4c [file] [log] [blame]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001/* Bitset primitives */
2
3#include "PROTO.h"
4#include "malloc.h"
5#include "bitset.h"
6
7bitset
8newbitset(nbits)
9 int nbits;
10{
11 int nbytes = NBYTES(nbits);
12 bitset ss = NEW(BYTE, nbytes);
13
14 if (ss == NULL)
15 fatal("no mem for bitset");
16
17 ss += nbytes;
18 while (--nbytes >= 0)
19 *--ss = 0;
20 return ss;
21}
22
23void
24delbitset(ss)
25 bitset ss;
26{
27 DEL(ss);
28}
29
30int
31addbit(ss, ibit)
32 bitset ss;
33 int ibit;
34{
35 int ibyte = BIT2BYTE(ibit);
36 BYTE mask = BIT2MASK(ibit);
37
38 if (ss[ibyte] & mask)
39 return 0; /* Bit already set */
40 ss[ibyte] |= mask;
41 return 1;
42}
43
44#if 0 /* Now a macro */
45int
46testbit(ss, ibit)
47 bitset ss;
48 int ibit;
49{
50 return (ss[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0;
51}
52#endif
53
54int
55samebitset(ss1, ss2, nbits)
56 bitset ss1, ss2;
57 int nbits;
58{
59 int i;
60
61 for (i = NBYTES(nbits); --i >= 0; )
62 if (*ss1++ != *ss2++)
63 return 0;
64 return 1;
65}
66
67void
68mergebitset(ss1, ss2, nbits)
69 bitset ss1, ss2;
70 int nbits;
71{
72 int i;
73
74 for (i = NBYTES(nbits); --i >= 0; )
75 *ss1++ |= *ss2++;
76}