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)
- In
BitVec.c:1063:
for (u64 i = 0; i <= bv->length - pattern->length; i++) {
if (BitVecContainsAt(bv, pattern, i)) {
return i;
}- In
BitVec.c:1079:
for (u64 i = bv->length - pattern->length; i < bv->length; i--) { // i < bv->length handles underflow
if (BitVecContainsAt(bv, pattern, i)) {
return i;
}- In
BitVec.c:1103:
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++;- In
BitVec.c:1405:
}
return BitVecContainsAt(bv, prefix, 0);
}- In
BitVec.c:1417:
u64 start_pos = bv->length - suffix->length;
return BitVecContainsAt(bv, suffix, start_pos);
}- In
BitVec.c:1422:
bool BitVecContainsAt(BitVec *bv, BitVec *pattern, u64 idx) {
ValidateBitVec(bv);
ValidateBitVec(pattern);- In
BitVec.c:1449:
u64 count = 0;
for (u64 i = 0; i <= bv->length - pattern->length; i++) {
if (BitVecContainsAt(bv, pattern, i)) {
count++;
}- In
BitVec.c:1469:
for (u64 i = start + 1; i > search_end; i--) {
u64 pos = i - 1;
if (BitVecContainsAt(bv, pattern, pos)) {
return pos;
}- In
BitVec.c:1513:
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