Skip to content

BitVecClone

BitVecClone

Description

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

Parameters

Name Direction Description
bv in Bitvector to clone

Usage example (from documentation)

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

Returns

Deep copy of the bitvector

Usage example (Cross-references)

Usage examples (Cross-references)
        ValidateInt(value);
    
        Int clone = int_wrap(BitVecClone(INT_BITS(value)));
        int_normalize(&clone);
        return clone;
    }
    
    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 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;
    
        // 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
Last updated on