xref: /original-bsd/usr.bin/make/bit.h (revision 0842ddeb)
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.2 (Berkeley) 04/28/95
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