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);Returns
Value of the removed bit (true/false)
Usage example (Cross-references)
Usage examples (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) {
WriteFmt("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) {
WriteFmt("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);
Last updated on