TEST(List, Find) { int idx; Item *head = 0; Item *item = 0; int num = 10; Item items[num]; // Initialise each item for (int i = 0; i < num; i++) { init_item(& items[i], i); } // create a randomised table of indexes int block[num]; rand_array(block, num); // add our items randomly to sorted list for (int i = 0; i < num; i++) { int idx = block[i]; item = & items[idx]; item_add_sorted(& head, item, 0); } // find first item idx = 0; item = item_find(& head, & items[idx], 0); EXPECT_EQ(item, & items[idx]); // find last item idx = num-1; item = item_find(& head, & items[idx], 0); EXPECT_EQ(item, & items[idx]); // find middle item idx = num / 2; item = item_find(& head, & items[idx], 0); EXPECT_EQ(item, & items[idx]); // try to find non-existent item Item wrong; init_item(& wrong, -5); item = item_find(& head, & wrong, 0); EXPECT_EQ(0, item); }
struct configitem* config_find_item(struct config* haystack, const char* needle, const char* section) { if(section) { struct configsection* sect; if((sect=config_find_section(haystack, section))) { int item=item_find(sect, needle); if(item != -1) return sect->item[item]; } } else { for(unsigned int i=0; i<haystack->sections; ++i) { int item=item_find(haystack->section[i], needle); if(item != -1) return haystack->section[i]->item[item]; } } return NULL; }
/* поиск наиболее близкого значения поля ft */ LPITEM list_find(LPLIST lpList, FIELDTYPE ft, void* value) { return item_find(lpList->Items, lpList->Count, ft, value); }