1 /************************************************************************/
2 /*									*/
3 /*  Property mask operations.						*/
4 /*									*/
5 /************************************************************************/
6 
7 #   ifndef	UTIL_PROP_MASK_H
8 #   define	UTIL_PROP_MASK_H
9 
10 #   define	PROPmaskSIZE		8
11 #   define	PROPmaskMAXPROPS	(8*(PROPmaskSIZE))
12 
13 typedef struct PropertyMask
14     {
15     unsigned char	pmBits[PROPmaskSIZE];
16     } PropertyMask;
17 
18 #   define	PROPmaskADD( pm, v ) \
19 			(pm)->pmBits[(v)/8] |= (1<<((v)%8))
20 
21 #   define	PROPmaskUNSET( pm, v ) \
22 			(pm)->pmBits[(v)/8] &= ~(1<<((v)%8))
23 
24 #   define	PROPmaskISSET( pm, v ) \
25 			( (pm)->pmBits[(v)/8] & (1<<((v)%8)) ) != 0
26 
27 extern void utilPropMaskClear(		PropertyMask *		pm );
28 
29 extern void utilPropMaskFill(		PropertyMask *		pm,
30 					int			c );
31 
32 extern int utilPropMaskIsEmpty(		const PropertyMask *	pm );
33 
34 extern void utilPropMaskAnd(		PropertyMask *		pm0,
35 					const PropertyMask *	pm1,
36 					const PropertyMask *	pm2 );
37 
38 extern void utilPropMaskOr(		PropertyMask *		pm0,
39 					const PropertyMask *	pm1,
40 					const PropertyMask *	pm2 );
41 
42 extern void utilPropMaskNot(		PropertyMask *		pm0,
43 					const PropertyMask *	pm1 );
44 
45 #   endif	/*  UTIL_PROP_MASK_H  */
46