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