VecMergeL

Table of Contents

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)

    /// FAILURE : NULL
    ///
    #define StrMergeL(str, str2) VecMergeL((str), (str2))
    
    ///
    /// FAILURE : Does not return on failure
    ///
    #define VecMerge(v, v2) VecMergeL((v), (v2))
    
    ///
    
    // 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)

Share :