/* "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); } }