BitVecRemove
- Function
- August 22, 2025
Table of Contents
BitVecRemove
BitVecRemove
Description
Remove a bit at given index from bitvector. Shifts all bits after the index to the left.
Parameters
Name | Direction | Description |
---|---|---|
bv | in | Bitvector to remove bit from |
idx | in | Index of bit to remove (0-based) |
Usage example (from documentation)
bool removed_bit = BitVecRemove(&flags, 5);
Usage example (Cross-references)
- In
BitVec.c:342
:
}
bool BitVecRemove(BitVec *bv, u64 idx) {
ValidateBitVec(bv);
if (idx >= bv->length) {
- In
BitVec.c:390
:
u64 pos = BitVecFind(bv, value);
if (pos != SIZE_MAX) {
BitVecRemove(bv, pos);
return true;
}
- In
BitVec.c:402
:
u64 pos = BitVecFindLast(bv, value);
if (pos != SIZE_MAX) {
BitVecRemove(bv, pos);
return true;
}
// Test BitVecRemove single bit function
bool test_bitvec_remove_single(void) {
printf("Testing BitVecRemove (single bit)\n");
BitVec bv = BitVecInit();
// Remove bit at index 2 (middle true)
bool removed = BitVecRemove(&bv, 2);
// Check result: true, false, false, true
// Remove bit at index 0 (first bit)
removed = BitVecRemove(&bv, 0);
result = result && (removed == true) && (bv.length == 3);
result = result && (BitVecGet(&bv, 0) == false);
bool test_bitvec_remove_single_edge_cases(void) {
printf("Testing BitVecRemove edge cases\n");
BitVec bv = BitVecInit();
// Test remove last element
BitVecPush(&bv, true);
bool removed = BitVecRemove(&bv, 0);
result = result && (removed == true) && (bv.length == 0);
// Remove middle element
removed = BitVecRemove(&bv, 500);
result = result && (removed == (500 % 3 == 0)); // Should return the value of the removed bit
result = result && (bv.length == 999);
// Test remove from empty bitvec - should abort
BitVecRemove(&bv, 0);
BitVecDeinit(&bv);