00001 #ifndef BITOPS_H
00002 #define BITOPS_H
00003
00004 #include "string.h"
00005
00006
00007
00008
00009 #define IS_BIT_SET(arr, bit_nb) (((unsigned char*) arr)[(bit_nb) >> 3] & \
00010 (((unsigned char) 1) << ((bit_nb) & 7)))
00011
00012
00013 #define IS_BIT_CLEARED(arr, bit_nb) (! IS_BIT_SET(arr, bit_nb))
00014
00015
00016 #define RESET_BIT(arr, bit_nb) (((unsigned char*) arr)[(bit_nb) >> 3] &= ~(((unsigned char) 1) << ((bit_nb) & 7)))
00017
00018
00019 #define SET_BIT(arr, bit_nb) (((unsigned char*) arr)[(bit_nb) >> 3] |= ((unsigned char) 1) << ((bit_nb) & 7))
00020
00021
00022
00023
00024 inline void SET_ALL_BITS(unsigned char* arr, unsigned long nb_bits)
00025 {
00026 memset(arr, 255, nb_bits >> 3);
00027 if(nb_bits & 7) {
00028 arr[nb_bits >> 3] |= ((unsigned char) 255) >> (8 - (nb_bits & 7));
00029 }
00030 }
00031
00032
00033 inline void RESET_ALL_BITS(unsigned char* arr, unsigned long nb_bits)
00034 {
00035 memset(arr, 0, nb_bits >> 3);
00036 if(nb_bits & 7) {
00037 arr[nb_bits >> 3] &= ((unsigned char) 255) << (nb_bits & 7);
00038 }
00039 }
00040
00041 #endif