/*
   "misc_bit_array.h"

   created by: grayspace aka J. Leveille
   for: UbixOS Project
   date: May 12, 2002

   purpose: functions for dealing with bit arrays

   $Id: misc_bit_array.h,v 1.1.1.1 2003/01/12 00:20:19 reddawg Exp $
*/

#ifndef _MISC_BIT_ARRAY_H
#define _MISC_BIT_ARRAY_H

typedef struct tagBIT_ARRAY_RANGE_PARAMS
{
   DWORDg * p_curdw;
   DWORDg * p_firstdw;
   DWORDg * p_overdw;
   DWORDg premask;
   DWORDg postmask;
}
BIT_ARRAY_RANGE_PARAMS;

// returns:
//    - 1 if the given range of bits is empty
//    - 0 otherwise
int BIT_ARRAY_IsRangeEmpty( BIT_ARRAY_RANGE_PARAMS * p_rp );

// set the given range of bits to all 1s
void BIT_ARRAY_SetRange( BIT_ARRAY_RANGE_PARAMS * p_rp );

// set the given range of bits to all 0s
void BIT_ARRAY_ResetRange( BIT_ARRAY_RANGE_PARAMS * p_rp );

// builds a structure for use with the other functions
#define BIT_ARRAY_MAKERANGEPARAMS( rp, p_basedw, firstbit, overbit )\
         (rp).premask = ((32-(firstbit))&31);\
         (rp).p_firstdw = (p_basedw) + ((firstbit)>>5);\
         (rp).postmask = ((overbit)&31);\
         (rp).p_overdw = (p_basedw) + ((overbit)>>5);\
         (rp).premask = MAKEMASK_GS( (rp).premask, (32 - (rp).premask) );\
         (rp).postmask = MAKEMASK_GS( (rp).postmask, 0 )

#endif // _MISC_BIT_ARRAY_H