BitVecClone

Table of Contents

BitVecClone

Description

Create a deep copy of a bitvector. The returned bitvector must be deinitialized when no longer needed.

Parameters

NameDirectionDescription
bvinBitvector to clone

Usage example (from documentation)

  BitVec copy = BitVecClone(&flags);
  // ... use copy ...
  BitVecDeinit(&copy);

Usage example (Cross-references)

    }
    
    BitVec BitVecClone(BitVec *bv) {
    ValidateBitVec(bv);
    
    // Create a temporary copy
    BitVec temp = BitVecClone(bv);
    
    // Rotate left
    
    // Create a temporary copy
    BitVec temp = BitVecClone(bv);
    
    // Rotate right
    
    // Test equal signed values
    BitVec bv3 = BitVecClone(&bv1);
    result     = result && (BitVecSignedCompare(&bv1, &bv3) == 0);
    
    // Test equal cases
    BitVec bv3 = BitVecClone(&bv1);
    result     = result && !(BitVecCompare(&bv1, &bv3) < 0);
    result     = result && !(BitVecNumericalCompare(&bv1, &bv3) < 0);
    
    // Test various shift amounts
    BitVec original = BitVecClone(&bv);
    
    // Shift left by 1, then right by 1 - should NOT restore original (data loss)
    }
    
    BitVec original = BitVecClone(&bv);
    
    // Rotate left by 3, then right by 3
    
    // Test various shift amounts
    BitVec original = BitVecClone(&bv);
    
    // Shift left by 1, then right by 1 - should NOT restore original (data loss)
    }
    
    BitVec original = BitVecClone(&bv);
    
    // Rotate left by 3, then right by 3
    // Test BitVecClone function
    bool test_bitvec_clone(void) {
    WriteFmt("Testing BitVecClone\n");
    
    BitVec original = BitVecInit();
    
    // Clone the bitvector
    BitVec clone = BitVecClone(&original);
    
    // Check that clone has same content as original
    
    bool test_bitvec_clone_edge_cases(void) {
    WriteFmt("Testing BitVecClone edge cases\n");
    
    BitVec bv     = BitVecInit();
    
    // Test clone empty bitvec
    BitVec clone1 = BitVecClone(&bv);
    result        = result && (clone1.length == 0);
    BitVecDeinit(&clone1);
    // Test clone single element
    BitVecPush(&bv, true);
    BitVec clone2 = BitVecClone(&bv);
    result        = result && (clone2.length == 1);
    result        = result && (BitVecGet(&clone2, 0) == true);
    }
    
    BitVec clone3 = BitVecClone(&bv);
    result        = result && (clone3.length == 1000);
    
    // Clone and swap
    BitVec clone = BitVecClone(&bv1);
    BitVecSwap(&bv1, &bv2);
    
    // Test NULL pointer - should abort
    BitVecClone(NULL);
    
    return false;

Share :

Related Posts

BitVecInsertMultiple

BitVecInsertMultiple Description Insert all bits from another bitvector at a specific position. All existing bits at and after the position are shifted right.

Read More

BitVecSignedCompare

BitVecSignedCompare Description Compare two bitvectors as signed integers (MSB is sign bit).

Read More

BitVecWeightCompare

BitVecWeightCompare Description Compare two bitvectors by their Hamming weights (number of 1s).

Read More