blob: 2464b8060fca830a23381b2416bb934b3c3da692 [file] [log] [blame]
Guido van Rossuma3309961993-07-28 09:05:47 +00001#ifndef Py_BITSET_H
2#define Py_BITSET_H
3#ifdef __cplusplus
4extern "C" {
5#endif
6
Guido van Rossumf70e43a1991-02-19 12:39:46 +00007/***********************************************************
Guido van Rossum5799b521995-01-04 19:06:22 +00008Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
9The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000010
11 All Rights Reserved
12
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000013Copyright (c) 2000, BeOpen.com.
14Copyright (c) 1995-2000, Corporation for National Research Initiatives.
15Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
16All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000017
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000018See the file "Misc/COPYRIGHT" for information on usage and
19redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000020
21******************************************************************/
22
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000023/* Bitset interface */
24
25#define BYTE char
26
27typedef BYTE *bitset;
28
Guido van Rossumcaa63801995-01-12 11:45:45 +000029bitset newbitset Py_PROTO((int nbits));
30void delbitset Py_PROTO((bitset bs));
Guido van Rossum66cb3111994-12-30 15:33:50 +000031#define testbit(ss, ibit) (((ss)[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0)
Guido van Rossumcaa63801995-01-12 11:45:45 +000032int addbit Py_PROTO((bitset bs, int ibit)); /* Returns 0 if already set */
33int samebitset Py_PROTO((bitset bs1, bitset bs2, int nbits));
34void mergebitset Py_PROTO((bitset bs1, bitset bs2, int nbits));
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000035
36#define BITSPERBYTE (8*sizeof(BYTE))
37#define NBYTES(nbits) (((nbits) + BITSPERBYTE - 1) / BITSPERBYTE)
38
39#define BIT2BYTE(ibit) ((ibit) / BITSPERBYTE)
40#define BIT2SHIFT(ibit) ((ibit) % BITSPERBYTE)
41#define BIT2MASK(ibit) (1 << BIT2SHIFT(ibit))
42#define BYTE2BIT(ibyte) ((ibyte) * BITSPERBYTE)
43
Guido van Rossuma3309961993-07-28 09:05:47 +000044#ifdef __cplusplus
45}
46#endif
47#endif /* !Py_BITSET_H */