text: /*	$NetBSD: bit.h,v 1.5 1995/11/08 02:30:53 christos Exp $	*/
  
  /*
   * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
   * Copyright (c) 1988, 1989 by Adam de Boor
   * Copyright (c) 1989 by Berkeley Softworks
   * All rights reserved.
   *
   * This code is derived from software contributed to Berkeley by
   * Adam de Boor.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
   *    must display the following acknowledgement:
   *	This product includes software developed by the University of
   *	California, Berkeley and its contributors.
   * 4. Neither the name of the University nor the names of its contributors
   *    may be used to endorse or promote products derived from this software
   *    without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   *
   *	from: @(#)bit.h	5.3 (Berkeley) 6/1/90
   */
  
  /*
   * bit.h --
   *
   *	Definition of macros for setting and clearing bits in an array
   *	of integers.
   *
   *	It is assumed that "int" is 32 bits wide.
   */
  
  #ifndef _BIT
  #define _BIT
  
  #include "sprite.h"
  
  #define BIT_NUM_BITS_PER_INT	32
  #define BIT_NUM_BITS_PER_BYTE	8
  
  #define Bit_NumInts(numBits)	\
  	(((numBits)+BIT_NUM_BITS_PER_INT -1)/BIT_NUM_BITS_PER_INT)
  
  #define Bit_NumBytes(numBits)	\
  	(Bit_NumInts(numBits) * sizeof(int))
  
  #define Bit_Alloc(numBits, bitArrayPtr)  	\
          bitArrayPtr = (int *) emalloc((unsigned)Bit_NumBytes(numBits)); \
          Bit_Zero((numBits), (bitArrayPtr))
  
  #define Bit_Free(bitArrayPtr)	\
          free((char *)bitArrayPtr)
  
  #define Bit_Set(numBits, bitArrayPtr) \
  	((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] |= \
  				(1 << ((numBits) % BIT_NUM_BITS_PER_INT)))
  
  #define Bit_IsSet(numBits, bitArrayPtr) \
  	((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] & \
  				(1 << ((numBits) % BIT_NUM_BITS_PER_INT)))
  
  #define Bit_Clear(numBits, bitArrayPtr) \
  	((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] &= \
  				~(1 << ((numBits) % BIT_NUM_BITS_PER_INT)))
  
  #define Bit_IsClear(numBits, bitArrayPtr) \
  	(!(Bit_IsSet((numBits), (bitArrayPtr))))
  
  #define Bit_Copy(numBits, srcArrayPtr, destArrayPtr) \
  	bcopy((char *)(srcArrayPtr), (char *)(destArrayPtr), \
  		Bit_NumBytes(numBits))
  
  #define Bit_Zero(numBits, bitArrayPtr) \
  	bzero((char *)(bitArrayPtr), Bit_NumBytes(numBits))
  
  extern int	  Bit_FindFirstSet();
  extern int	  Bit_FindFirstClear();
  extern Boolean	  Bit_Intersect();
  extern Boolean 	  Bit_Union();
  extern Boolean 	  Bit_AnySet();
  extern int  	  *Bit_Expand();
  	 
  #endif /* _BIT */
  