]> git.proxmox.com Git - mirror_edk2.git/blobdiff - 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
diff --git a/AppPkg/Applications/Python/Python-2.7.10/Parser/bitset.c b/AppPkg/Applications/Python/Python-2.7.10/Parser/bitset.c
new file mode 100644 (file)
index 0000000..3bf5da1
--- /dev/null
@@ -0,0 +1,66 @@
+\r
+/* Bitset primitives used by the parser generator */\r
+\r
+#include "pgenheaders.h"\r
+#include "bitset.h"\r
+\r
+bitset\r
+newbitset(int nbits)\r
+{\r
+    int nbytes = NBYTES(nbits);\r
+    bitset ss = (char *)PyObject_MALLOC(sizeof(BYTE) *  nbytes);\r
+\r
+    if (ss == NULL)\r
+        Py_FatalError("no mem for bitset");\r
+\r
+    ss += nbytes;\r
+    while (--nbytes >= 0)\r
+        *--ss = 0;\r
+    return ss;\r
+}\r
+\r
+void\r
+delbitset(bitset ss)\r
+{\r
+    PyObject_FREE(ss);\r
+}\r
+\r
+int\r
+addbit(bitset ss, int ibit)\r
+{\r
+    int ibyte = BIT2BYTE(ibit);\r
+    BYTE mask = BIT2MASK(ibit);\r
+\r
+    if (ss[ibyte] & mask)\r
+        return 0; /* Bit already set */\r
+    ss[ibyte] |= mask;\r
+    return 1;\r
+}\r
+\r
+#if 0 /* Now a macro */\r
+int\r
+testbit(bitset ss, int ibit)\r
+{\r
+    return (ss[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0;\r
+}\r
+#endif\r
+\r
+int\r
+samebitset(bitset ss1, bitset ss2, int nbits)\r
+{\r
+    int i;\r
+\r
+    for (i = NBYTES(nbits); --i >= 0; )\r
+        if (*ss1++ != *ss2++)\r
+            return 0;\r
+    return 1;\r
+}\r
+\r
+void\r
+mergebitset(bitset ss1, bitset ss2, int nbits)\r
+{\r
+    int i;\r
+\r
+    for (i = NBYTES(nbits); --i >= 0; )\r
+        *ss1++ |= *ss2++;\r
+}\r