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