BitVecResize
- Function
- August 22, 2025
Table of Contents
BitVecResize
BitVecResize
Description
Reu64 bitvector to hold exactly n bits. May grow or shrink the bitvector.
Parameters
Name | Direction | Description |
---|---|---|
bv | in | Bitvector to resize |
n | in | New u64 in bits |
Usage example (from documentation)
BitVecResize(&flags, 64);
Usage example (Cross-references)
- In
BitVec.c:57
:
}
void BitVecResize(BitVec *bitvec, u64 new_size) {
ValidateBitVec(bitvec);
if (new_size > bitvec->capacity) {
- In
BitVec.c:175
:
// Reserve space for the clone
BitVecReserve(&clone, bv->length);
BitVecResize(&clone, bv->length);
// Copy all bits
- In
BitVec.c:230
:
}
BitVecResize(bitvec, bitvec->length + 1);
BitVecSet(bitvec, bitvec->length - 1, value);
}
- In
BitVec.c:240
:
}
bool value = BitVecGet(bitvec, bitvec->length - 1);
BitVecResize(bitvec, bitvec->length - 1);
return value;
}
- In
BitVec.c:272
:
// Grow the bitvector to accommodate new bits
u64 old_length = bv->length;
BitVecResize(bv, old_length + count);
// Shift existing bits to the right
- In
BitVec.c:299
:
// Grow the bitvector to accommodate new bits
u64 old_length = bv->length;
BitVecResize(bv, old_length + other->length);
// Shift existing bits to the right
- In
BitVec.c:326
:
// Grow the bitvector to accommodate new bits
u64 old_length = bv->length;
BitVecResize(bv, old_length + pattern_bits);
// Shift existing bits to the right
- In
BitVec.c:357
:
}
BitVecResize(bv, bv->length - 1);
return removed_bit; // Return the actual bit value that was removed
}
- In
BitVec.c:382
:
// Shrink the bitvector
BitVecResize(bv, bv->length - count);
}
- In
BitVec.c:431
:
// Shrink the bitvector to the new size
BitVecResize(bv, write_idx);
return removed_count;
- In
BitVec.c:460
:
u64 min_len = MIN2(a->length, b->length);
BitVecResize(result, min_len);
for (u64 i = 0; i < min_len; i++) {
- In
BitVec.c:475
:
u64 max_len = MAX2(a->length, b->length);
BitVecResize(result, max_len);
for (u64 i = 0; i < max_len; i++) {
- In
BitVec.c:490
:
u64 max_len = MAX2(a->length, b->length);
BitVecResize(result, max_len);
for (u64 i = 0; i < max_len; i++) {
- In
BitVec.c:503
:
ValidateBitVec(bitvec);
BitVecResize(result, bitvec->length);
for (u64 i = 0; i < bitvec->length; i++) {
- In
BitVec.c:809
:
BitVecReserve(&result, bit_len);
BitVecResize(&result, bit_len);
// Copy bits from bytes
- In
BitVec.c:853
:
BitVecReserve(&result, bits);
BitVecResize(&result, bits);
// Convert integer to bits (LSB first)
// Test BitVecReu64 function
bool test_bitvec_resize(void) {
printf("Testing BitVecResize\n");
BitVec bv = BitVecInit();
// Test resizing to larger size
BitVecResize(&bv, 6);
// Check that length was increased and new bits have the default value
// Test resizing to smaller size
BitVecResize(&bv, 2);
// Check that length was decreased and data was truncated
// Test resizing to same size (should be no-op)
BitVecResize(&bv, 2);
result = result && (bv.length == 2);
BitVecPush(&bv, true);
BitVecPush(&bv, false);
BitVecResize(&bv, 0);
result = result && (bv.length == 0);
// Test reu64 from 0 to non-zero
BitVecResize(&bv, 5);
result = result && (bv.length == 5);
// New bits should be false
// Test reu64 to same size
BitVecResize(&bv, 5);
result = result && (bv.length == 5);
// Test large resize
BitVecResize(&bv, 1000);
result = result && (bv.length == 1000);
// Test shrinking from large size
BitVecResize(&bv, 10);
result = result && (bv.length == 10);
// This should trigger an abort if validation is working
BitVecResize(&bv, SIZE_MAX);
// If we reach here, validation didn't work as expected
// Reserve space and set bits
BitVecResize(&bv, 4);
BitVecSet(&bv, 0, true);
BitVecSet(&bv, 1, false);
// Set first bit
BitVecResize(&bv, 1);
BitVecSet(&bv, 0, true);
bool result = (BitVecGet(&bv, 0) == true);
// Create pattern using different methods
BitVecPush(&bv, true);
BitVecResize(&bv, 5);
BitVecSet(&bv, 1, false);
BitVecSet(&bv, 2, true);
// Set alternating pattern
for (int i = 0; i < size; i++) {
BitVecResize(&bv, i + 1);
BitVecSet(&bv, i, i % 3 == 0); // Every third bit is true
}