Skip to content
BitVecContainsAt

BitVecContainsAt

BitVecContainsAt

Description

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

Parameters

Name Direction Description
bv in Bitvector to check
pattern in Pattern to match
idx in Position to check at

Usage example (from documentation)

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

Returns

true if pattern matches at the given position

Usage example (Cross-references)

Usage examples (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);
Last updated on