in src/singlylinkedlist.c [225:268]
LIST_ITEM_HANDLE singlylinkedlist_find(SINGLYLINKEDLIST_HANDLE list, LIST_MATCH_FUNCTION match_function, const void* match_context)
{
LIST_ITEM_HANDLE result;
if ((list == NULL) ||
(match_function == NULL))
{
LogError("Invalid argument (list=%p, match_function=%p)", list, match_function);
/* Codes_SRS_LIST_01_012: [If the list or the match_function argument is NULL, singlylinkedlist_find shall return NULL.] */
result = NULL;
}
else
{
LIST_INSTANCE* list_instance = list;
LIST_ITEM_INSTANCE* current = list_instance->head;
/* Codes_SRS_LIST_01_011: [singlylinkedlist_find shall iterate through all items in a list and return the first one that satisfies a certain match function.] */
while (current != NULL)
{
/* Codes_SRS_LIST_01_014: [list find shall determine whether an item satisfies the match criteria by invoking the match function for each item in the list until a matching item is found.] */
/* Codes_SRS_LIST_01_013: [The match_function shall get as arguments the list item being attempted to be matched and the match_context as is.] */
if (match_function((LIST_ITEM_HANDLE)current, match_context) == true)
{
/* Codes_SRS_LIST_01_017: [If the match function returns true, singlylinkedlist_find shall consider that item as matching.] */
break;
}
/* Codes_SRS_LIST_01_016: [If the match function returns false, singlylinkedlist_find shall consider that item as not matching.] */
current = current->next;
}
if (current == NULL)
{
/* Codes_SRS_LIST_01_015: [If the list is empty, singlylinkedlist_find shall return NULL.] */
result = NULL;
}
else
{
result = current;
}
}
return result;
}