VecMergeL
- Macro
- August 22, 2025
Table of Contents
VecMergeL
VecMergeL
Description
Merge two vectors and store the result in the first vector, with L-value semantics. Data is copied from v2
into v
. If a copy_init
method is provided in v
, each element from v2
will be copied using that method. Otherwise, a raw memory copy is performed, which may be unsafe for complex or pointer-containing data.
Note
This function completely transfers ownership from v2
to v
by: 1. Adding all elements from v2
to v
2. Freeing the memory allocated for v2->data
3. Resetting all fields of v2
to zero using MemSet
Success
v
Failure
Does not return on failure
Usage example (Cross-references)
- In
Insert.h:181
:
/// FAILURE : NULL
///
#define StrMergeL(str, str2) VecMergeL((str), (str2))
///
- In
Insert.h:566
:
/// FAILURE : Does not return on failure
///
#define VecMerge(v, v2) VecMergeL((v), (v2))
///
- In
Vec.Insert.c:453
:
// Merge with L-value semantics
VecMergeL(&vec, &vec2);
// Check that the source vector is cleared
// Merge vec4 into vec3 with ownership transfer
VecMergeL(&vec3, &vec4);
// Check vector lengths
// Check vector lengths
result = result && (vec3.length == 2);
result = result && (vec4.length == 0); // VecMergeL resets source vector
result = result && (vec4.data == NULL);
// Test VecMergeL memset behavior with complex structures
bool test_lvalue_memset_merge(void) {
printf("Testing VecMergeL memset with complex structures\n");
// Create a vector with no copy_init but with copy_deinit for proper cleanup
// Now merge vec2 into vec1 with L-value semantics
VecMergeL(&vec1, &vec2);
// Check that vec2 is now empty (data has been transferred)