1 /* 2 * Copyright (c) 1988, 1989, 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * Copyright (c) 1989 by Berkeley Softworks 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to Berkeley by 8 * Adam de Boor. 9 * 10 * %sccs.include.redist.c% 11 * 12 * @(#)bit.h 8.1 (Berkeley) 06/06/93 13 */ 14 15 /* 16 * bit.h -- 17 * 18 * Definition of macros for setting and clearing bits in an array 19 * of integers. 20 * 21 * It is assumed that "int" is 32 bits wide. 22 */ 23 24 #ifndef _BIT 25 #define _BIT 26 27 #include "sprite.h" 28 29 #define BIT_NUM_BITS_PER_INT 32 30 #define BIT_NUM_BITS_PER_BYTE 8 31 32 #define Bit_NumInts(numBits) \ 33 (((numBits)+BIT_NUM_BITS_PER_INT -1)/BIT_NUM_BITS_PER_INT) 34 35 #define Bit_NumBytes(numBits) \ 36 (Bit_NumInts(numBits) * sizeof(int)) 37 38 #define Bit_Alloc(numBits, bitArrayPtr) \ 39 bitArrayPtr = (int *)malloc((unsigned)Bit_NumBytes(numBits)); \ 40 Bit_Zero((numBits), (bitArrayPtr)) 41 42 #define Bit_Free(bitArrayPtr) \ 43 free((char *)bitArrayPtr) 44 45 #define Bit_Set(numBits, bitArrayPtr) \ 46 ((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] |= \ 47 (1 << ((numBits) % BIT_NUM_BITS_PER_INT))) 48 49 #define Bit_IsSet(numBits, bitArrayPtr) \ 50 ((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] & \ 51 (1 << ((numBits) % BIT_NUM_BITS_PER_INT))) 52 53 #define Bit_Clear(numBits, bitArrayPtr) \ 54 ((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] &= \ 55 ~(1 << ((numBits) % BIT_NUM_BITS_PER_INT))) 56 57 #define Bit_IsClear(numBits, bitArrayPtr) \ 58 (!(Bit_IsSet((numBits), (bitArrayPtr)))) 59 60 #define Bit_Copy(numBits, srcArrayPtr, destArrayPtr) \ 61 bcopy((char *)(srcArrayPtr), (char *)(destArrayPtr), \ 62 Bit_NumBytes(numBits)) 63 64 #define Bit_Zero(numBits, bitArrayPtr) \ 65 bzero((char *)(bitArrayPtr), Bit_NumBytes(numBits)) 66 67 extern int Bit_FindFirstSet(); 68 extern int Bit_FindFirstClear(); 69 extern Boolean Bit_Intersect(); 70 extern Boolean Bit_Union(); 71 extern Boolean Bit_AnySet(); 72 extern int *Bit_Expand(); 73 74 #endif /* _BIT */ 75