47 #define B_BLOCK_TYPE unsigned 48 #define B_BLOCK_SIZE ((unsigned)sizeof(B_BLOCK_TYPE)) 49 #define B_BITS_PER_BLOCK (B_BLOCK_SIZE*CHAR_BIT) 50 #define B_MASK ((B_BLOCK_TYPE)1U) 51 #define B_UNION_CAST(bitmap) UNION_CAST(((rootsim_bitmap*)(bitmap)), B_BLOCK_TYPE*) 54 #define B_MOD_OF_BPB(n) (((unsigned)(n)) & ((unsigned)(B_BITS_PER_BLOCK - 1))) 56 #define B_SET_BIT_AT(B,K) ( B |= (B_MASK << K) ) 57 #define B_RESET_BIT_AT(B,K) ( B &= ~(B_MASK << K) ) 58 #define B_CHECK_BIT_AT(B,K) ( B & (B_MASK << K) ) 60 #define B_SET_BIT(A, I) B_SET_BIT_AT((A)[((I) / B_BITS_PER_BLOCK)], (B_MOD_OF_BPB(I))) 61 #define B_RESET_BIT(A, I) B_RESET_BIT_AT((A)[((I) / B_BITS_PER_BLOCK)], (B_MOD_OF_BPB(I))) 62 #define B_CHECK_BIT(A, I) B_CHECK_BIT_AT((A)[((I) / B_BITS_PER_BLOCK)], (B_MOD_OF_BPB(I))) 65 __builtin_choose_expr( \ 66 __builtin_types_compatible_p (__typeof__ (x), unsigned), __builtin_ctz(x),\ 67 __builtin_choose_expr(\ 68 __builtin_types_compatible_p (__typeof__ (x), unsigned long), __builtin_ctzl(x),\ 69 __builtin_choose_expr(\ 70 __builtin_types_compatible_p (__typeof__ (x), unsigned long long), __builtin_ctzll(x),\ 74 __builtin_choose_expr( \ 75 __builtin_types_compatible_p (__typeof__ (x), unsigned), __builtin_popcount(x),\ 76 __builtin_choose_expr(\ 77 __builtin_types_compatible_p (__typeof__ (x), unsigned long), __builtin_popcountl(x),\ 78 __builtin_choose_expr(\ 79 __builtin_types_compatible_p (__typeof__ (x), unsigned long long), __builtin_popcountll(x),\ 92 #define bitmap_required_size(requested_bits) ((((requested_bits)/B_BITS_PER_BLOCK) + (B_MOD_OF_BPB(requested_bits) != 0))*B_BLOCK_SIZE) 107 #define bitmap_initialize(memory_pointer, requested_bits) (memset(memory_pointer, 0, bitmap_required_size(requested_bits))) 116 #define bitmap_set(bitmap, bit_index) (B_SET_BIT(B_UNION_CAST(bitmap), ((unsigned)(bit_index)))) 125 #define bitmap_reset(bitmap, bit_index) (B_RESET_BIT(B_UNION_CAST(bitmap), ((unsigned)(bit_index)))) 135 #define bitmap_check(bitmap, bit_index) (B_CHECK_BIT(B_UNION_CAST(bitmap), ((unsigned)(bit_index))) != 0) 147 #define bitmap_count_reset(bitmap, bitmap_size) ({ \ 148 unsigned __i, __blocks = bitmap_size / B_BLOCK_SIZE; \ 149 unsigned __ret = bitmap_size * CHAR_BIT; \ 150 B_BLOCK_TYPE __cur_block, *__block_b = B_UNION_CAST(bitmap); \ 151 for(__i = 0; __i < __blocks; ++__i){ \ 152 if((__cur_block = __block_b[__i])){ \ 153 __ret -= B_POPC(__cur_block); \ 169 #define bitmap_first_reset(bitmap, bitmap_size) ({ \ 170 unsigned __i, __blocks = bitmap_size / B_BLOCK_SIZE; \ 171 unsigned __ret = UINT_MAX; \ 172 B_BLOCK_TYPE __cur_block, *__block_b = B_UNION_CAST(bitmap); \ 173 for(__i = 0; __i < __blocks; ++__i){ \ 174 if((__cur_block = ~__block_b[__i])){ \ 175 __ret = B_CTZ(__cur_block); \ 192 #define bitmap_foreach_set(bitmap, bitmap_size, func) ({ \ 193 unsigned __i, __fnd, __blocks = bitmap_size / B_BLOCK_SIZE; \ 194 B_BLOCK_TYPE __cur_block, *__block_b = B_UNION_CAST(bitmap); \ 195 for(__i = 0; __i < __blocks; ++__i){ \ 196 if((__cur_block = __block_b[__i])){ \ 198 __fnd = B_CTZ(__cur_block); \ 199 B_RESET_BIT_AT(__cur_block, __fnd); \ 200 func((__fnd + __i * B_BITS_PER_BLOCK)); \ 201 }while(__cur_block); \ Core ROOT-Sim functionalities.
unsigned char rootsim_bitmap
This defines a generic bitmap.