diff options
Diffstat (limited to 'src/util/bits.h')
| -rw-r--r-- | src/util/bits.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/util/bits.h b/src/util/bits.h index 376c736..8eb533d 100644 --- a/src/util/bits.h +++ b/src/util/bits.h @@ -10,10 +10,21 @@ #define BYTE_LEN(bit_len) \ (((bit_len) % 8 == 0) ? (bit_len) / 8 : ((bit_len) / 8) + 1) + #define GET_BIT(bit_array, bit_pos) \ (((bit_array)[(bit_pos) / 8] & (1 << (7 - ((bit_pos) % 8)))) >> \ (7 - ((bit_pos) % 8))) +#define SET_BIT(bit_array, bit_pos, bit_value) \ + do { \ + unsigned char val = 1 << (7 - ((bit_pos) % 8)); \ + if ((bit_value) == 1) { \ + (bit_array)[(bit_pos) / 8] |= val; \ + } else { \ + (bit_array)[(bit_pos) / 8] &= ~val; \ + } \ + } while (0); + bits_t *bits_new(size_t bit_len); bits_t *bits_copy(const bits_t *bits); @@ -42,6 +53,10 @@ size_t bits_to_rawlen(const bits_t *bits); GEN bits_to_bitvec(const bits_t *bits); +void bits_concatz(bits_t *one, ...); + +bits_t *bits_concat(const bits_t *one, ...); + bits_t *bits_or(const bits_t *one, const bits_t *other); bits_t *bits_and(const bits_t *one, const bits_t *other); |
