-/*
- * Here, the binary operations follow.
- * And, Or, And Not, Xor are available.
- */
-
-#define BINARY_OP(op) \
-static INLINE bitset_t *bitset_ ## op(bitset_t *tgt, const bitset_t *src) \
-{ \
- int i; \
- int n = tgt->units > src->units ? src->units : tgt->units; \
- for(i = 0; i < n; i += _BITSET_BINOP_UNITS_INC) \
- _bitset_inside_binop_ ## op(&tgt->data[i], &src->data[i]); \
- for(i = n; i < tgt->units; i += _BITSET_BINOP_UNITS_INC) \
- _bitset_inside_binop_with_zero_ ## op(&tgt->data[i]); \
- return tgt; \
+/**
+ * Perform tgt = tgt & src operation.
+ * @param tgt The target bitset.
+ * @param src The source bitset.
+ * @return the tgt set.
+ */
+static inline void bitset_and(bitset_t *tgt, const bitset_t *src)
+{
+ assert(tgt->size == src->size);
+ rbitset_and(tgt->data, src->data, src->size);
+}
+
+/**
+ * Perform tgt = tgt & ~src operation.
+ * @param tgt The target bitset.
+ * @param src The source bitset.
+ * @return the tgt set.
+ */
+static inline void bitset_andnot(bitset_t *tgt, const bitset_t *src)
+{
+ assert(tgt->size == src->size);
+ rbitset_andnot(tgt->data, src->data, src->size);
+}
+
+/**
+ * Perform Union, tgt = tgt u src operation.
+ * @param tgt The target bitset.
+ * @param src The source bitset.
+ * @return the tgt set.
+ */
+static inline void bitset_or(bitset_t *tgt, const bitset_t *src)
+{
+ assert(tgt->size == src->size);
+ rbitset_or(tgt->data, src->data, src->size);