CLDS_SINGLY_LINKED_LIST_DELETE_RESULT clds_singly_linked_list_delete_if()

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;
}