in src/clds_singly_linked_list.c [380:406]
CLDS_SINGLY_LINKED_LIST_DELETE_RESULT clds_singly_linked_list_delete_if(CLDS_SINGLY_LINKED_LIST_HANDLE clds_singly_linked_list, CLDS_HAZARD_POINTERS_THREAD_HANDLE clds_hazard_pointers_thread, SINGLY_LINKED_LIST_ITEM_COMPARE_CB item_compare_callback, void* item_compare_callback_context)
{
CLDS_SINGLY_LINKED_LIST_DELETE_RESULT result;
/* Codes_SRS_CLDS_SINGLY_LINKED_LIST_01_023: [ item_compare_callback_context shall be allowed to be NULL. ]*/
if (
/* Codes_SRS_CLDS_SINGLY_LINKED_LIST_01_020: [ If clds_singly_linked_list is NULL, clds_singly_linked_list_delete_if shall fail and return CLDS_SINGLY_LINKED_LIST_DELETE_ERROR. ]*/
(clds_singly_linked_list == NULL) ||
/* Codes_SRS_CLDS_SINGLY_LINKED_LIST_01_021: [ If clds_hazard_pointers_thread is NULL, clds_singly_linked_list_delete_if shall fail and return CLDS_SINGLY_LINKED_LIST_DELETE_ERROR. ]*/
(clds_hazard_pointers_thread == NULL) ||
/* Codes_SRS_CLDS_SINGLY_LINKED_LIST_01_022: [ If item_compare_callback is NULL, clds_singly_linked_list_delete_if shall fail and return CLDS_SINGLY_LINKED_LIST_DELETE_ERROR. ]*/
(item_compare_callback == NULL)
)
{
LogError("Invalid arguments: CLDS_SINGLY_LINKED_LIST_HANDLE clds_singly_linked_list=%p, CLDS_HAZARD_POINTERS_THREAD_HANDLE clds_hazard_pointers_thread=%p, SINGLY_LINKED_LIST_ITEM_COMPARE_CB item_compare_callback=%p, void* item_compare_callback_context=%p",
clds_singly_linked_list, clds_hazard_pointers_thread, item_compare_callback, item_compare_callback_context);
result = CLDS_SINGLY_LINKED_LIST_DELETE_ERROR;
}
else
{
/* Codes_SRS_CLDS_SINGLY_LINKED_LIST_01_019: [ clds_singly_linked_list_delete_if deletes an item that matches the criteria given by a user compare function. ]*/
result = internal_delete(clds_singly_linked_list, clds_hazard_pointers_thread, item_compare_callback, item_compare_callback_context);
}
return result;
}