CLDS_SINGLY_LINKED_LIST_DELETE_RESULT clds_singly_linked_list_delete()

in src/clds_singly_linked_list.c [354:378]


CLDS_SINGLY_LINKED_LIST_DELETE_RESULT clds_singly_linked_list_delete(CLDS_SINGLY_LINKED_LIST_HANDLE clds_singly_linked_list, CLDS_HAZARD_POINTERS_THREAD_HANDLE clds_hazard_pointers_thread, CLDS_SINGLY_LINKED_LIST_ITEM* item)
{
    CLDS_SINGLY_LINKED_LIST_DELETE_RESULT result;

    if (
        /* Codes_SRS_CLDS_SINGLY_LINKED_LIST_01_015: [ If clds_singly_linked_list is NULL, clds_singly_linked_list_delete shall fail and return CLDS_SINGLY_LINKED_LIST_DELETE_ERROR. ]*/
        (clds_singly_linked_list == NULL) ||
        /* Codes_SRS_CLDS_SINGLY_LINKED_LIST_01_016: [ If clds_hazard_pointers_thread is NULL, clds_singly_linked_list_delete shall fail and return CLDS_SINGLY_LINKED_LIST_DELETE_ERROR. ]*/
        (clds_hazard_pointers_thread == NULL) ||
        /* Codes_SRS_CLDS_SINGLY_LINKED_LIST_01_017: [ If item is NULL, clds_singly_linked_list_delete shall fail and return CLDS_SINGLY_LINKED_LIST_DELETE_ERROR. ]*/
        (item == NULL)
        )
    {
        LogError("Invalid arguments: CLDS_SINGLY_LINKED_LIST_HANDLE clds_singly_linked_list=%p, CLDS_HAZARD_POINTERS_THREAD_HANDLE clds_hazard_pointers_thread=%p, CLDS_SINGLY_LINKED_LIST_ITEM* item=%p",
            clds_singly_linked_list, clds_hazard_pointers_thread, item);
        result = CLDS_SINGLY_LINKED_LIST_DELETE_ERROR;
    }
    else
    {
        /* Codes_SRS_CLDS_SINGLY_LINKED_LIST_01_014: [ clds_singly_linked_list_delete deletes an item from the list by its pointer. ]*/
        result = internal_delete(clds_singly_linked_list, clds_hazard_pointers_thread, compare_item_by_ptr, item);
    }

    return result;
}