home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / snip9707.zip / BITARRAY.C < prev    next >
C/C++ Source or Header  |  1997-07-05  |  848b  |  35 lines

  1. /* +++Date last modified: 05-Jul-1997 */
  2.  
  3. /*
  4. **  Functions to maintain an arbitrary length array of bits
  5. */
  6.  
  7. #include "bitops.h"
  8.  
  9. char *alloc_bit_array(size_t bits)
  10. {
  11.       char *set = calloc((bits + CHAR_BIT - 1) / CHAR_BIT, sizeof(char));
  12.  
  13.       return set;
  14. }
  15.  
  16. int getbit(char *set, int number)
  17. {
  18.         set += number / CHAR_BIT;
  19.         return (*set & (1 << (number % CHAR_BIT))) != 0;    /* 0 or 1   */
  20. }
  21.  
  22. void setbit(char *set, int number, int value)
  23. {
  24.         set += number / CHAR_BIT;
  25.         if (value)
  26.                 *set |= 1 << (number % CHAR_BIT);           /* set bit  */
  27.         else    *set &= ~(1 << (number % CHAR_BIT));        /* clear bit*/
  28. }
  29.  
  30. void flipbit(char *set, int number)
  31. {
  32.         set += number / CHAR_BIT;
  33.         *set ^= 1 << (number % CHAR_BIT);                   /* flip bit */
  34. }
  35.