• Main Page
  • Classes
  • Files
  • File List

/Users/yzchen/ns/ns-allinone-2.33/ns-2.33/apps/bitops.h

00001 #ifndef BITOPS_H
00002 #define BITOPS_H
00003 
00004 #include "string.h"      /* due to memset */
00005 
00006 
00007 
00008 /* determines if bit number "bit_nb" is set in array "arr" */
00009 #define IS_BIT_SET(arr, bit_nb) (((unsigned char*) arr)[(bit_nb) >> 3] & \
00010     (((unsigned char) 1) << ((bit_nb) & 7)))
00011 
00012 /* determines if bit number "bit_nb" is set in array "arr" */
00013 #define IS_BIT_CLEARED(arr, bit_nb) (! IS_BIT_SET(arr, bit_nb))
00014 
00015 /* resets bit "bit_nb" in array "arr" */
00016 #define RESET_BIT(arr, bit_nb) (((unsigned char*) arr)[(bit_nb) >> 3] &= ~(((unsigned char) 1) << ((bit_nb) & 7)))
00017 
00018 /* sets bit "bit_nb" in array "arr" */
00019 #define SET_BIT(arr, bit_nb)   (((unsigned char*) arr)[(bit_nb) >> 3] |=   ((unsigned char) 1) << ((bit_nb) & 7))
00020 
00021 
00022 
00023 /* set the first nb_bits in array arr */
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 /* reset the first nb_bits in array arr */
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

Generated on Tue Aug 10 2010 16:16:06 for ns-2.33 by  doxygen 1.7.1