/*
"misc_bit_array.c"
created by: grayspace aka J. Leveille
for: UbixOS Project
date: May 12, 2002
purpose: functions for dealing with bit arrays
$Id$
*/
#include "../../grayspace-misc/gsdefines.h"
#include "../../sys/include/misc/misc_bit_array.h"
int BIT_ARRAY_IsRangeEmpty( BIT_ARRAY_RANGE_PARAMS * p_rp )
{
p_rp->p_curdw = p_rp->p_firstdw;
if( !(p_rp->premask & *(p_rp->p_curdw)) )
{
if( p_rp->premask )
{
p_rp->p_curdw++;
}
while( p_rp->p_curdw < p_rp->p_overdw
&& !( *(p_rp->p_curdw) ) )
{
p_rp->p_curdw++;
}
if( p_rp->p_curdw == p_rp->p_overdw )
{
if( p_rp->postmask )
{
if( p_rp->postmask & *(p_rp->p_overdw) )
{
return 0;
}
}
return 1;
}
}
return 0;
}
void BIT_ARRAY_SetRange( BIT_ARRAY_RANGE_PARAMS * p_rp )
{
p_rp->p_curdw = p_rp->p_firstdw;
if( p_rp->premask )
{
*(p_rp->p_curdw) |= p_rp->premask;
p_rp->p_curdw++;
}
while( p_rp->p_curdw < p_rp->p_overdw )
{
*(p_rp->p_curdw) = 0xFFFFFFFF;
p_rp->p_curdw++;
}
if( p_rp->postmask )
{
*(p_rp->p_curdw) |= p_rp->postmask;
}
}
void BIT_ARRAY_ResetRange( BIT_ARRAY_RANGE_PARAMS * p_rp )
{
p_rp->p_curdw = p_rp->p_firstdw;
if( p_rp->premask )
{
*(p_rp->p_curdw) &= ~(p_rp->premask);
p_rp->p_curdw++;
}
while( p_rp->p_curdw < p_rp->p_overdw )
{
*(p_rp->p_curdw) = 0;
p_rp->p_curdw++;
}
if( p_rp->postmask )
{
*(p_rp->p_curdw) &= ~(p_rp->postmask);
}
}