BitVecRemoveRange
- Function
- August 22, 2025
Table of Contents
BitVecRemoveRange
BitVecRemoveRange
Description
Remove multiple consecutive bits starting at a specific position. All bits after the removed range are shifted left.
Parameters
Name | Direction | Description |
---|---|---|
bv | in | Bitvector to remove from |
idx | in | Starting position (0-based) |
count | in | Number of bits to remove |
Usage example (from documentation)
BitVecRemoveRange(&flags, 2, 3); // Remove 3 bits starting at position 2
Usage example (Cross-references)
- In
BitVec.c:361
:
}
void BitVecRemoveRange(BitVec *bv, u64 idx, u64 count) {
ValidateBitVec(bv);
if (idx >= bv->length) {
- In
BitVec.c:1490
:
// Remove old pattern
BitVecRemoveRange(bv, pos, old_pattern->length);
// Insert new pattern
- In
BitVec.c:1527
:
// Remove old pattern
BitVecRemoveRange(bv, match_pos, old_pattern->length);
// Insert new pattern
// Test BitVecRemoveRange function
bool test_bitvec_remove_range(void) {
printf("Testing BitVecRemoveRange\n");
BitVec bv = BitVecInit();
// Remove range from index 1 to 3 (3 bits)
BitVecRemoveRange(&bv, 1, 3);
// Check result: true, false, true (removed false, true, true)
bool test_bitvec_remove_range_edge_cases(void) {
printf("Testing BitVecRemoveRange edge cases\n");
BitVec bv = BitVecInit();
// Test remove 0 elements (should be no-op)
BitVecPush(&bv, true);
BitVecRemoveRange(&bv, 0, 0);
result = result && (bv.length == 1);
BitVecPush(&bv, i % 2 == 0);
}
BitVecRemoveRange(&bv, 0, 10);
result = result && (bv.length == 0);
BitVecPush(&bv, i % 2 == 0);
}
BitVecRemoveRange(&bv, 1, 5); // Remove 5 elements starting at index 1
result = result && (bv.length == 5); // Should have 5 elements left
// Test NULL bitvec pointer - should abort
BitVecRemoveRange(NULL, 0, 1);
return false;
// Test removing beyond capacity limit - should abort
BitVecRemoveRange(&bv, SIZE_MAX, 1);
BitVecDeinit(&bv);
// Test remove range from empty bitvec - should abort
BitVecRemoveRange(&bv, 0, 1);
BitVecDeinit(&bv);