Skip to content

ListClear

Description

Remove all entries from the list. Length becomes 0; node storage is released through the list’s allocator. Element payloads are deinitialized via the configured copy_deinit handler when present.

Parameters

Name Direction Description
l in,out List to be cleared.

Success

Returns to the caller. The list length is now 0, head and tail are NULL, and every previously-stored node has been freed. When copy_deinit is configured it has been invoked on each previously-stored element.

Failure

Function cannot fail.

Usage example (Cross-references)

Usage examples (Cross-references)
            // Memory operations
            case LIST_INT_CLEAR : {
                ListClear(list);
                break;
            }
    
    static bool test_list_clear_and_reuse(void) {
        WriteFmt("Testing ListClear and reuse\n");
    
        DefaultAllocator alloc = DefaultAllocatorInit();
        IntList list = ListInit(&alloc);
    
        ListClear(&list);
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
        ListClear(&list);
    
        bool result = (ListLen(&list) == 0) && (ListHead(&list) == NULL) && (ListTail(&list) == NULL);
    
    static bool test_list_clear_with_deep_copy(void) {
        WriteFmt("Testing ListClear with deep copy\n");
    
        DefaultAllocator alloc = DefaultAllocatorInit();
        bool result = (g_copy_init_count == 2);
    
        ListClear(&list);
        result = result && (g_copy_deinit_count == 2);
        result = result && (ListLen(&list) == 0) && (ListHead(&list) == NULL) && (ListTail(&list) == NULL);
        result = result && !ListEmpty(&list);
    
        ListClear(&list);
        result = result && (ListLen(&list) == 0);
        result = result && ListEmpty(&list);
        result = result && list_matches(GENERIC_LIST(&list), (const int[]) {9}, 1);
    
        ListClear(&list);
        result = result && (g_copy_deinit_count == 2);
        result = result && (ListLen(&list) == 0) && (ListHead(&list) == NULL) && (ListTail(&list) == NULL);
Last updated on