]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.10/Parser/bitset.c
AppPkg/Applications/Python/Python-2.7.10: Initial Checkin part 1/5.
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.10 / Parser / bitset.c
CommitLineData
c8042e10
DM
1\r
2/* Bitset primitives used by the parser generator */\r
3\r
4#include "pgenheaders.h"\r
5#include "bitset.h"\r
6\r
7bitset\r
8newbitset(int nbits)\r
9{\r
10 int nbytes = NBYTES(nbits);\r
11 bitset ss = (char *)PyObject_MALLOC(sizeof(BYTE) * nbytes);\r
12\r
13 if (ss == NULL)\r
14 Py_FatalError("no mem for bitset");\r
15\r
16 ss += nbytes;\r
17 while (--nbytes >= 0)\r
18 *--ss = 0;\r
19 return ss;\r
20}\r
21\r
22void\r
23delbitset(bitset ss)\r
24{\r
25 PyObject_FREE(ss);\r
26}\r
27\r
28int\r
29addbit(bitset ss, int ibit)\r
30{\r
31 int ibyte = BIT2BYTE(ibit);\r
32 BYTE mask = BIT2MASK(ibit);\r
33\r
34 if (ss[ibyte] & mask)\r
35 return 0; /* Bit already set */\r
36 ss[ibyte] |= mask;\r
37 return 1;\r
38}\r
39\r
40#if 0 /* Now a macro */\r
41int\r
42testbit(bitset ss, int ibit)\r
43{\r
44 return (ss[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0;\r
45}\r
46#endif\r
47\r
48int\r
49samebitset(bitset ss1, bitset ss2, int nbits)\r
50{\r
51 int i;\r
52\r
53 for (i = NBYTES(nbits); --i >= 0; )\r
54 if (*ss1++ != *ss2++)\r
55 return 0;\r
56 return 1;\r
57}\r
58\r
59void\r
60mergebitset(bitset ss1, bitset ss2, int nbits)\r
61{\r
62 int i;\r
63\r
64 for (i = NBYTES(nbits); --i >= 0; )\r
65 *ss1++ |= *ss2++;\r
66}\r