VecReserve
Description
Reserve enough capacity to fit at least n elements without further allocation. Does not change the vector length.
Parameters
| Name | Direction | Description |
|---|---|---|
v |
in,out | Vector handle. |
n |
in | Minimum capacity in elements. |
Success
Returns true. The vector’s allocated capacity is now at least n elements. The vector length and the values of all existing elements are unchanged.
Failure
Returns false on allocation failure. The vector is unchanged.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
MachO.c:452:
}
Buf copy = BufInit(alloc);
if (!VecReserve(©, (u64)data_size)) {
LOG_ERROR("MachoOpenFromMemoryCopy: allocation failed ({} bytes)", (u64)data_size);
return false;- In
Elf.c:466:
}
Buf copy = BufInit(alloc);
if (!VecReserve(©, (u64)data_size)) {
LOG_ERROR("ElfOpenFromMemoryCopy: allocation failed ({} bytes)", (u64)data_size);
return false;- In
VecCharPtr.c:191:
if (*offset + 4 <= data_size) {
size_t capacity = extract_u32(data, offset, data_size) % 1000; // Limit to reasonable size
VecReserve(vec, capacity);
}
break;- In
VecStr.c:205:
if (*offset + 4 <= data_size) {
size_t capacity = extract_u32(data, offset, data_size) % 1000; // Limit to reasonable size
VecReserve(vec, capacity);
}
break;- In
VecInt.c:138:
uint16_t capacity = extract_u16(data, offset, data_size);
capacity = capacity % 1000; // Limit to reasonable capacity
VecReserve(vec, capacity);
break;
}- In
Vec.Memory.c:26:
// Reserve more space than needed
VecReserve(&vec, 100);
// Add some data
- In
Vec.Memory.c:105:
// Test VecReserve function
bool test_vec_reserve(void) {
WriteFmt("Testing VecReserve\n");
DefaultAllocator alloc = DefaultAllocatorInit();- In
Vec.Memory.c:117:
// Reserve space for 50 elements
VecReserve(&vec, 50);
// Capacity should now be at least 50
- In
Vec.Memory.c:138:
// Reserve less space (should be a no-op)
VecReserve(&vec, 20);
// Capacity should still be at least 50
// Ensure we have enough capacity to avoid reallocation during the test
VecReserve(&vec2, VecLen(&vec2) + 10);
// Try inserting just one element first with fast insert
// Reserve zero capacity
VecReserve(&vec, 0);
result = result && (VecCapacity(&vec) == 0);
// Make sure we have enough capacity to avoid reallocation issues
VecReserve(&vec, 10);
// Create several dummy items to populate the vector
- In
Buf.h:107:
/// TAGS: Buf, Reserve, Capacity, Allocation
///
#define BufReserve(b, n) VecReserve((b), (n))
///
- In
Memory.h:107:
#define VecMustReserve(v, n) \
do { \
if (!VecReserve((v), (n))) { \
LOG_FATAL("VecReserve failed"); \
} \- In
Memory.h:108:
do { \
if (!VecReserve((v), (n))) { \
LOG_FATAL("VecReserve failed"); \
} \
} while (0)- In
Memory.h:69:
/// TAGS: Str, Memory, Reserve
///
#define StrReserve(str, n) VecReserve((str), (n))
///
Last updated on