bitset.h 810 Bytes
Newer Older
1

2 3 4 5 6 7
#ifndef Py_BITSET_H
#define Py_BITSET_H
#ifdef __cplusplus
extern "C" {
#endif

Guido van Rossum's avatar
Guido van Rossum committed
8 9
/* Bitset interface */

10
#define BYTE            char
Guido van Rossum's avatar
Guido van Rossum committed
11 12 13

typedef BYTE *bitset;

14 15
bitset newbitset(int nbits);
void delbitset(bitset bs);
16
#define testbit(ss, ibit) (((ss)[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0)
17 18 19
int addbit(bitset bs, int ibit); /* Returns 0 if already set */
int samebitset(bitset bs1, bitset bs2, int nbits);
void mergebitset(bitset bs1, bitset bs2, int nbits);
Guido van Rossum's avatar
Guido van Rossum committed
20

21 22
#define BITSPERBYTE     (8*sizeof(BYTE))
#define NBYTES(nbits)   (((nbits) + BITSPERBYTE - 1) / BITSPERBYTE)
Guido van Rossum's avatar
Guido van Rossum committed
23

24 25 26 27
#define BIT2BYTE(ibit)  ((ibit) / BITSPERBYTE)
#define BIT2SHIFT(ibit) ((ibit) % BITSPERBYTE)
#define BIT2MASK(ibit)  (1 << BIT2SHIFT(ibit))
#define BYTE2BIT(ibyte) ((ibyte) * BITSPERBYTE)
Guido van Rossum's avatar
Guido van Rossum committed
28

29 30 31 32
#ifdef __cplusplus
}
#endif
#endif /* !Py_BITSET_H */