aboutsummaryrefslogtreecommitdiff
path: root/src/util/bits.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/bits.h')
-rw-r--r--src/util/bits.h15
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);