#include #include #include #include #define elemCount 4 enum flags{ FLAG1 = 0x00000001, FLAG2 = 0x00000002 }; int32_t g_testArray_1[elemCount]; int32_t g_testArray_2[elemCount]; int32_t g_flag_1; int32_t g_flag_2; uint32_t i; void resetVal() { memset (g_testArray_1, 0, sizeof *g_testArray_1 * elemCount); memset (g_testArray_2, 0, sizeof *g_testArray_2 * elemCount); g_flag_1 = -1; g_flag_2 = -1; } /* find the first matching index for g_testArray_1,FLAG1 and g_testArray_2,FLAG2 if there is none, find first for g_testArray_1,FLAG1 and first for g_testArray_2,FLAG2 */ void checkIndexes() { for( i=0; i < elemCount; ++i ) { if( g_testArray_1[i] & FLAG1 && g_testArray_2[i] & FLAG2 ) { g_flag_1 = i; g_flag_2 = i; return; } if( g_flag_1 == -1 ) { if( g_testArray_1[i] & FLAG1) g_flag_1 = i; } if( g_flag_2 == -1 ) { if( g_testArray_2[i] & FLAG2) g_flag_2 = i; } } } void printRezult() { //pass only if g_flag_1 and g_flag_2 not -1 if( g_flag_1 == -1 || g_flag_2 == -1 ) { printf("did not pass\n"); if( g_flag_1 == -1) printf("g_flag_1, index not found.\n"); if( g_flag_2 == -1) printf("g_flag_2, index not found.\n"); } else { printf("has passed\n"); printf("g_flag_1 index: %d\n", g_flag_1); printf("g_flag_2 index: %d\n", g_flag_2); } } int main() { //Test 1 printf("Test 1: "); resetVal(); g_testArray_1[0] = 1; g_testArray_2[0] = 2; checkIndexes(); printRezult(); //Test 2 printf("Test 2: "); resetVal(); g_testArray_1[0] = 1; g_testArray_2[1] = 2; g_testArray_1[3] = 1; g_testArray_2[3] = 2; checkIndexes(); printRezult(); //Test 3 printf("Test 3: "); resetVal(); g_testArray_1[0] = 1; g_testArray_2[0] = 2; g_testArray_1[3] = 1; g_testArray_2[3] = 2; checkIndexes(); printRezult(); //Test 4 printf("Test 4: "); resetVal(); g_testArray_1[1] = 1; g_testArray_2[2] = 2; checkIndexes(); printRezult(); //Test 5 printf("Test 5: "); resetVal(); g_testArray_1[0] = 1; g_testArray_2[1] = 1; checkIndexes(); printRezult(); return 0; } /* output: Test 1: has passed g_flag_1 index: 0 g_flag_2 index: 0 Test 2: has passed g_flag_1 index: 3 g_flag_2 index: 3 Test 3: has passed g_flag_1 index: 0 g_flag_2 index: 0 Test 4: has passed g_flag_1 index: 1 g_flag_2 index: 2 Test 5: did not pass g_flag_2, index not found. */