Newer
Older
ubix / src / sys / misc / misc_bit_array.c
@grayspace grayspace on 30 Jun 2002 1 KB *** empty log message ***
/*
   "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);
   }
}