|
#define | mirkl_bitarr_len(arr) ((arr)->num_of_bits) |
| Get length of bit array.
|
|
#define | mirkl_bitset64_wrd(pos) ((pos) >> 6) |
|
#define | mirkl_bitset64_idx(pos) ((pos) & 63) |
|
#define | mirkl_bitsetX_wrd(wrdbits, pos) ((pos) / (wrdbits)) |
|
#define | mirkl_bitsetX_idx(wrdbits, pos) ((pos) % (wrdbits)) |
|
#define | _TYPESHIFT(arr, word, shift) ((__typeof(*(arr)))((__typeof(*(arr)))(word) << (shift))) |
|
#define | mirkl_bitset2_get(arr, wrd, idx) (((arr)[wrd] >> (idx)) & 0x1) |
|
#define | mirkl_bitset2_set(arr, wrd, idx) ((arr)[wrd] |= _TYPESHIFT(arr,1,idx)) |
|
#define | mirkl_bitset2_del(arr, wrd, idx) ((arr)[wrd] &=~ _TYPESHIFT(arr,1,idx)) |
|
#define | mirkl_bitset2_tgl(arr, wrd, idx) ((arr)[wrd] ^= _TYPESHIFT(arr,1,idx)) |
|
#define | mirkl_bitset2_or(arr, wrd, idx, bit) ((arr)[wrd] |= _TYPESHIFT(arr,bit,idx)) |
|
#define | mirkl_bitset2_xor(arr, wrd, idx, bit) ((arr)[wrd] = ~((arr)[wrd] ^ (~_TYPESHIFT(arr,bit,idx)))) |
|
#define | mirkl_bitset2_and(arr, wrd, idx, bit) ((arr)[wrd] &= (_TYPESHIFT(arr,bit,idx) | ~_TYPESHIFT(arr,1,idx))) |
|
#define | mirkl_bitset2_cpy(arr, wrd, idx, bit) ((arr)[wrd] = ((arr)[wrd] &~ _TYPESHIFT(arr,1,idx)) | _TYPESHIFT(arr,bit,idx)) |
|
#define | mirkl_bitset_wrd(arr, pos) mirkl_bitsetX_wrd(sizeof(*(arr))*8,pos) |
|
#define | mirkl_bitset_idx(arr, pos) mirkl_bitsetX_idx(sizeof(*(arr))*8,pos) |
|
#define | mirkl_bitset_op(func, arr, pos) func(arr, mirkl_bitset_wrd(arr,pos), mirkl_bitset_idx(arr,pos)) |
|
#define | mirkl_bitset_op2(func, arr, pos, bit) func(arr, mirkl_bitset_wrd(arr,pos), mirkl_bitset_idx(arr,pos), bit) |
|
#define | mirkl_bitset_get(arr, pos) mirkl_bitset_op(mirkl_bitset2_get, arr, pos) |
|
#define | mirkl_bitset_set(arr, pos) mirkl_bitset_op(mirkl_bitset2_set, arr, pos) |
|
#define | mirkl_bitset_del(arr, pos) mirkl_bitset_op(mirkl_bitset2_del, arr, pos) |
|
#define | mirkl_bitset_tgl(arr, pos) mirkl_bitset_op(mirkl_bitset2_tgl, arr, pos) |
|
#define | mirkl_bitset_or(arr, pos, bit) mirkl_bitset_op2(mirkl_bitset2_or, arr, pos, bit) |
|
#define | mirkl_bitset_xor(arr, pos, bit) mirkl_bitset_op2(mirkl_bitset2_xor, arr, pos, bit) |
|
#define | mirkl_bitset_and(arr, pos, bit) mirkl_bitset_op2(mirkl_bitset2_and, arr, pos, bit) |
|
#define | mirkl_bitset_cpy(arr, pos, bit) mirkl_bitset_op2(mirkl_bitset2_cpy, arr, pos, bit) |
|
|
#define | mirkl_bitarr_get(arr, i) mirkl_bitset_get((arr)->words, i) |
| Get the value of a bit (returns 0 or 1)
|
|
#define | mirkl_bitarr_set(arr, i) mirkl_bitset_set((arr)->words, i) |
| Set a bit (to 1) at position i.
|
|
#define | mirkl_bitarr_clear(arr, i) mirkl_bitset_del((arr)->words, i) |
| Clear a bit (to 0) at position i.
|
|
#define | mirkl_bitarr_toggle(arr, i) mirkl_bitset_tgl((arr)->words, i) |
| Toggle a bit. If bit is 0 change to 1; if bit is 1 change to 0. Also known as complement function.
|
|
#define | mirkl_bitarr_assign(arr, i, c) mirkl_bitset_cpy((arr)->words,i,c) |
| Assign a value to a bit. c must be 0 or 1. If c != 0 then set bit; otherwise clear bit.
|
|