Skip to content

ListInit

Description

Initialize a list. Inside a Scope block the allocator argument may be omitted (MisraScope is used). Otherwise pass a typed allocator handle or a raw Allocator *.

Usage example (Cross-references)

Usage examples (Cross-references)
        DefaultAllocator alloc = DefaultAllocatorInit();
        typedef List(int) LI;
        LI li = ListInit(ALLOCATOR_OF(&alloc));
        ListForeach(&li, i) {
            (void)i;
    
        typedef List(int) IntList;
        IntList list_a = ListInit(&alloc);
        IntList list_b = ListInitT(list_b, &alloc);
        IntList list_c = ListInitWithDeepCopy(tracked_copy_init, tracked_copy_deinit, &alloc);
        alloc.base.retry_limit = 23;
    
        IntList list_a = ListInit(&alloc);
        IntList list_b = ListInitT(list_b, &alloc);
        IntList list_c = ListInitWithDeepCopy(tracked_copy_init, tracked_copy_deinit, &alloc);
    
        typedef List(int) IntList;
        IntList list = ListInit(&alloc);
        int     a    = 10;
        int     b    = 20;
    
        typedef List(int) IntList;
        IntList list  = ListInit(&alloc);
        int     arr[] = {1, 2, 3};
    
        typedef List(int) IntList;
        IntList list  = ListInit(&alloc);
        int     arr[] = {4, 5, 6};
    
        typedef List(int) IntList;
        IntList dest = ListInit(&alloc);
        IntList src  = ListInitWithDeepCopy(tracked_copy_init, tracked_copy_deinit, &alloc);
    
        typedef List(int) IntList;
        IntList dest_l = ListInit(&alloc);
        IntList src_l  = ListInit(&alloc);
        IntList dest_r = ListInit(&alloc);
        typedef List(int) IntList;
        IntList dest_l = ListInit(&alloc);
        IntList src_l  = ListInit(&alloc);
        IntList dest_r = ListInit(&alloc);
        IntList src_r  = ListInit(&alloc);
        IntList dest_l = ListInit(&alloc);
        IntList src_l  = ListInit(&alloc);
        IntList dest_r = ListInit(&alloc);
        IntList src_r  = ListInit(&alloc);
        IntList dest_a = ListInit(&alloc);
        IntList src_l  = ListInit(&alloc);
        IntList dest_r = ListInit(&alloc);
        IntList src_r  = ListInit(&alloc);
        IntList dest_a = ListInit(&alloc);
        IntList src_a  = ListInit(&alloc);
        IntList dest_r = ListInit(&alloc);
        IntList src_r  = ListInit(&alloc);
        IntList dest_a = ListInit(&alloc);
        IntList src_a  = ListInit(&alloc);
        IntList src_r  = ListInit(&alloc);
        IntList dest_a = ListInit(&alloc);
        IntList src_a  = ListInit(&alloc);
    
        ListPushBackR(&dest_l, 1);
        typedef List(int) IntList;
        IntList deep_dest   = ListInitWithDeepCopy(tracked_copy_init, tracked_copy_deinit, &alloc);
        IntList shallow_src = ListInit(&alloc);
        IntList empty_dest  = ListInit(&alloc);
        IntList empty_src   = ListInit(&alloc);
        IntList deep_dest   = ListInitWithDeepCopy(tracked_copy_init, tracked_copy_deinit, &alloc);
        IntList shallow_src = ListInit(&alloc);
        IntList empty_dest  = ListInit(&alloc);
        IntList empty_src   = ListInit(&alloc);
        IntList shallow_src = ListInit(&alloc);
        IntList empty_dest  = ListInit(&alloc);
        IntList empty_src   = ListInit(&alloc);
    
        reset_counters();
    
        typedef List(int) IntList;
        IntList list              = ListInit(&alloc);
        int     reverse_values[5] = {0};
        int     reverse_i         = 0;
    
        typedef List(int) IntList;
        IntList list              = ListInit(&alloc);
        int     forward_range_sum = 0;
        int     reverse_range_sum = 0;
    
        typedef List(int) IntList;
        IntList list  = ListInit(&alloc);
        int     count = 0;
    
        typedef List(int) IntList;
        IntList list              = ListInit(&alloc);
        int     reverse_values[5] = {0};
        int     reverse_i         = 0;
    
        typedef List(int) IntList;
        IntList list              = ListInit(&alloc);
        int     forward_values[3] = {0};
        int     reverse_values[3] = {0};
    
        typedef List(int) IntList;
        IntList list  = ListInit(&alloc);
        u64     count = 0;
    
        typedef List(int) IntList;
        IntList list = ListInit(&alloc);
    
        ListClear(&list);
    
        typedef List(int) IntList;
        IntList list = ListInit(&alloc);
    
        ListPushBackR(&list, 4);
    
        typedef List(int) IntList;
        IntList empty     = ListInit(&alloc);
        IntList singleton = ListInit(&alloc);
        typedef List(int) IntList;
        IntList empty     = ListInit(&alloc);
        IntList singleton = ListInit(&alloc);
    
        ListSort(&empty, compare_ints);
    
        typedef List(int) IntList;
        IntList list = ListInit(&alloc);
    
        bool result = (ListLen(&list) == 0);
    
        typedef List(int) IntList;
        IntList list = ListInit(&alloc);
    
        ListPushBackR(&list, 10);
    
        typedef List(int) IntList;
        IntList list = ListInit(&alloc);
    
        ListPushBackR(&list, 10);
    
        typedef List(int) IntList;
        IntList list = ListInit(&alloc);
    
        int  needle  = 20;
    
        typedef List(int) IntList;
        IntList list    = ListInit(&alloc);
        int     removed = 0;
    
        typedef List(int) IntList;
        IntList list       = ListInit(&alloc);
        int     removed[2] = {0, 0};
    
        typedef List(int) IntList;
        IntList list      = ListInit(&alloc);
        int     prefix[2] = {0, 0};
        int     suffix[2] = {0, 0};
    
        typedef List(int) IntList;
        IntList list       = ListInit(&alloc);
        int     removed[3] = {0, 0, 0};
        WriteFmt("Testing ValidateList on corrupt empty list\n");
    
        List(int) list = ListInit(get_test_alloc());
        // intentional bypass: ListHead is read-only, no public setter exists --
        // plant a bogus head pointer on an empty list so ValidateList trips its
        WriteFmt("Testing ValidateList on invalid magic\n");
    
        List(int) list = ListInit(get_test_alloc());
        // intentional bypass: __magic is the private sentinel ValidateList
        // checks; scramble it directly to exercise the type-confusion /
    
        GenericListNode node = {0};
        List(int) list       = ListInit(get_test_alloc());
        GenericList *g       = GENERIC_LIST(&list);
        int             value = 1;
        GenericListNode node  = {.next = NULL, .prev = NULL, .data = &value};
        List(int) list        = ListInit(get_test_alloc());
        GenericList *g        = GENERIC_LIST(&list);
        int             value = 1;
        GenericListNode node  = {.next = NULL, .prev = (GenericListNode *)1, .data = &value};
        List(int) list        = ListInit(get_test_alloc());
        GenericList *g        = GENERIC_LIST(&list);
        int             value = 1;
        GenericListNode node  = {.next = (GenericListNode *)1, .prev = NULL, .data = &value};
        List(int) list        = ListInit(get_test_alloc());
        GenericList *g        = GENERIC_LIST(&list);
        WriteFmt("Testing ListPtrAt on empty list\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPtrAt(&list, 0);
        WriteFmt("Testing ListPtrAt out of bounds\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListPtrAt(&list, 1);
        WriteFmt("Testing ListAt out of bounds\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        (void)ListAt(&list, 1);
        WriteFmt("Testing ListNodePtrAt on empty list\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListNodePtrAt(&list, 0);
        WriteFmt("Testing ListNodePtrAt out of bounds\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListNodePtrAt(&list, 1);
        WriteFmt("Testing ListNodeAt out of bounds\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        (void)ListNodeAt(&list, 1);
        WriteFmt("Testing ListFirst on empty list\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListFirst(&list);
        WriteFmt("Testing ListLast on empty list\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListLast(&list);
        WriteFmt("Testing ListNodeAt on empty list\n");
    
        List(int) list = ListInit(get_test_alloc());
        (void)ListNodeAt(&list, 0);
        WriteFmt("Testing ListInsertR out of range\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListInsertR(&list, 10, 1);
        WriteFmt("Testing ListRemove out of range\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListRemove(&list, NULL, 1);
        WriteFmt("Testing ListPopFront on empty list\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPopFront(&list, NULL);
        WriteFmt("Testing ListPopBack on empty list\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPopBack(&list, NULL);
        WriteFmt("Testing ListRemoveRange out of range\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        WriteFmt("Testing ListSwapItems out of range\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListSwapItems(&list, 0, 1);
        WriteFmt("Testing ListFind without compare function\n");
    
        List(int) list = ListInit(get_test_alloc());
        int key        = 10;
        ListPushBackR(&list, 10);
        WriteFmt("Testing ListFind without key pointer\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListFind(&list, NULL, compare_ints);
        WriteFmt("Testing ListSort without compare function\n");
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListSort(&list, NULL);
    
        typedef List(int) IntList;
        IntList list = ListInit(&alloc);
    
        ValidateList(&list);
Last updated on