BitVecContainsAt

Table of Contents

BitVecContainsAt

Description

Check if bitvector contains the given pattern at a specific position.

Parameters

NameDirectionDescription
bvinBitvector to check
patterninPattern to match
idxinPosition to check at

Usage example (from documentation)

  bool at_pos = BitVecContainsAt(&flags, &pattern, 5);

Usage example (Cross-references)

    
    for (u64 i = 0; i <= bv->length - pattern->length; i++) {
    if (BitVecContainsAt(bv, pattern, i)) {
    return i;
    }
    
    for (u64 i = bv->length - pattern->length; i < bv->length; i--) { // i < bv->length handles underflow
    if (BitVecContainsAt(bv, pattern, i)) {
    return i;
    }
    
    for (u64 i = 0; i <= bv->length - pattern->length && found_count < max_results; i++) {
    if (BitVecContainsAt(bv, pattern, i)) {
    results[found_count] = i;
    found_count++;
    }
    
    return BitVecContainsAt(bv, prefix, 0);
    }
    
    u64 start_pos = bv->length - suffix->length;
    return BitVecContainsAt(bv, suffix, start_pos);
    }
    
    
    bool BitVecContainsAt(BitVec *bv, BitVec *pattern, u64 idx) {
    ValidateBitVec(bv);
    ValidateBitVec(pattern);
    u64 count = 0;
    for (u64 i = 0; i <= bv->length - pattern->length; i++) {
    if (BitVecContainsAt(bv, pattern, i)) {
    count++;
    }
    for (u64 i = start + 1; i > search_end; i--) {
    u64 pos = i - 1;
    if (BitVecContainsAt(bv, pattern, pos)) {
    return pos;
    }
    if (search_pos + old_pattern->length <= bv->length) {
    for (u64 i = search_pos; i <= bv->length - old_pattern->length; i++) {
    if (BitVecContainsAt(bv, old_pattern, i)) {
    match_pos = i;
    found     = true;
    
    bool test_bitvec_contains_at_null_source(void) {
    WriteFmt("Testing BitVecContainsAt(NULL, pattern, 0) - should fatal\n");
    BitVec pattern = BitVecInit();
    BitVecPush(&pattern, true);
    BitVec pattern = BitVecInit();
    BitVecPush(&pattern, true);
    BitVecContainsAt(NULL, &pattern, 0);
    BitVecDeinit(&pattern);
    return true;
    
    bool test_bitvec_contains_at_null_pattern(void) {
    WriteFmt("Testing BitVecContainsAt(source, NULL, 0) - should fatal\n");
    BitVec source = BitVecInit();
    BitVecPush(&source, true);
    BitVec source = BitVecInit();
    BitVecPush(&source, true);
    BitVecContainsAt(&source, NULL, 0);
    BitVecDeinit(&source);
    return true;
    // BitVecContainsAt tests
    bool test_bitvec_contains_at_basic(void) {
    WriteFmt("Testing BitVecContainsAt basic functionality\n");
    
    BitVec source  = BitVecInit();
    BitVecPush(&pattern, true);
    
    result = result && BitVecContainsAt(&source, &pattern, 1);  // Should match
    result = result && !BitVecContainsAt(&source, &pattern, 0); // Should not match
    result = result && BitVecContainsAt(&source, &pattern, 3);  // Should match
    
    result = result && BitVecContainsAt(&source, &pattern, 1);  // Should match
    result = result && !BitVecContainsAt(&source, &pattern, 0); // Should not match
    result = result && BitVecContainsAt(&source, &pattern, 3);  // Should match
    result = result && BitVecContainsAt(&source, &pattern, 1);  // Should match
    result = result && !BitVecContainsAt(&source, &pattern, 0); // Should not match
    result = result && BitVecContainsAt(&source, &pattern, 3);  // Should match
    
    BitVecDeinit(&source);
    
    bool test_bitvec_contains_at_edge_cases(void) {
    WriteFmt("Testing BitVecContainsAt edge cases\n");
    
    BitVec source  = BitVecInit();
    BitVecPush(&pattern, true);
    
    result = result && !BitVecContainsAt(&source, &pattern, 0); // Pattern too long
    
    BitVecDeinit(&source);
    
    bool test_bitvec_contains_at_null_source(void) {
    WriteFmt("Testing BitVecContainsAt(NULL, pattern, 0) - should fatal\n");
    BitVec pattern = BitVecInit();
    BitVecPush(&pattern, true);
    BitVec pattern = BitVecInit();
    BitVecPush(&pattern, true);
    BitVecContainsAt(NULL, &pattern, 0);
    BitVecDeinit(&pattern);
    return true;
    
    bool test_bitvec_contains_at_null_pattern(void) {
    WriteFmt("Testing BitVecContainsAt(source, NULL, 0) - should fatal\n");
    BitVec source = BitVecInit();
    BitVecPush(&source, true);
    BitVec source = BitVecInit();
    BitVecPush(&source, true);
    BitVecContainsAt(&source, NULL, 0);
    BitVecDeinit(&source);
    return true;
    // BitVecContainsAt tests
    bool test_bitvec_contains_at_basic(void) {
    WriteFmt("Testing BitVecContainsAt basic functionality\n");
    
    BitVec source  = BitVecInit();
    BitVecPush(&pattern, true);
    
    result = result && BitVecContainsAt(&source, &pattern, 1);  // Should match
    result = result && !BitVecContainsAt(&source, &pattern, 0); // Should not match
    result = result && BitVecContainsAt(&source, &pattern, 3);  // Should match
    
    result = result && BitVecContainsAt(&source, &pattern, 1);  // Should match
    result = result && !BitVecContainsAt(&source, &pattern, 0); // Should not match
    result = result && BitVecContainsAt(&source, &pattern, 3);  // Should match
    result = result && BitVecContainsAt(&source, &pattern, 1);  // Should match
    result = result && !BitVecContainsAt(&source, &pattern, 0); // Should not match
    result = result && BitVecContainsAt(&source, &pattern, 3);  // Should match
    
    BitVecDeinit(&source);
    
    bool test_bitvec_contains_at_edge_cases(void) {
    WriteFmt("Testing BitVecContainsAt edge cases\n");
    
    BitVec source  = BitVecInit();
    BitVecPush(&pattern, true);
    
    result = result && !BitVecContainsAt(&source, &pattern, 0); // Pattern too long
    
    BitVecDeinit(&source);

Share :

Related Posts

BitVecRemoveAll

BitVecRemoveAll Description Remove all occurrences of a specific bit value. Returns the number of bits that were removed.

Read More

BitVecRemove

BitVecRemove Description Remove a bit at given index from bitvector. Shifts all bits after the index to the left.

Read More

BitVecStartsWith

BitVecStartsWith Description Check if bitvector starts with the given bit pattern.

Read More