void bitarray_rotate(bitarray_t *ba, size_t bit_off, size_t bit_len, ssize_t bit_right_amount) { assert(bit_off + bit_len <= ba->bit_sz); if (bit_len == 0) return; /* Convert a rotate left or right to a left rotate only, and eliminate multiple full rotations. */ bitarray_rotate_left(ba, bit_off, bit_len, modulo(-bit_right_amount, bit_len)); }
void bitarray_rotate(bitarray_t *const bitarray, const size_t bit_offset, const size_t bit_length, const ssize_t bit_right_amount) { assert(bit_offset + bit_length <= bitarray->bit_sz); if (bit_length == 0) { return; } // Convert a rotate left or right to a left rotate only, and eliminate // multiple full rotations. bitarray_rotate_left(bitarray, bit_offset, bit_length, modulo(-bit_right_amount, bit_length)); }