Skip to content

ListPushBackR

Description

Append an element at the tail of the list. R-value form.

Success

Returns true. A new node holding a copy of rval is linked as the new tail; the list length grows by one.

Failure

Returns false on allocation failure. The list is unchanged.

Usage example (Cross-references)

Usage examples (Cross-references)
            case LIST_INT_PUSH_BACK : {
                i32 value = (i32)extract_u32(data, offset, data_size);
                ListPushBackR(list, value);
                break;
            }
                for (uint8_t i = 0; i < count && *offset + 4 <= data_size; i++) {
                    i32 value = (i32)extract_u32(data, offset, data_size);
                    ListPushBackR(&temp, value);
                }
    
        reset_counters();
        ListPushBackR(&list, 7);
        ListPushBackR(&list, 9);
        reset_counters();
        ListPushBackR(&list, 7);
        ListPushBackR(&list, 9);
    
        bool result = (g_copy_init_count == 2);
        ListPushFrontL(&list, d);
        ListPushFrontR(&list, h);
        ListPushBackR(&list, e);
        ListPushFront(&list, f);
        ListPushBackL(&list, i);
        int     arr[] = {4, 5, 6};
    
        ListPushBackR(&list, 1);
        ListPushArrL(&list, arr, 0);
    
        reset_counters();
        ListPushBackR(&list, x);
        ListInsertL(&list, x, 1);
        ListPushArrL(&list, arr, 2);
    
        reset_counters();
        ListPushBackR(&src, 3);
        ListPushBackR(&src, 4);
        ListMergeL(&dest, &src);
        reset_counters();
        ListPushBackR(&src, 3);
        ListPushBackR(&src, 4);
        ListMergeL(&dest, &src);
        result      = result && (ListCopyInit(&src) == tracked_copy_init) && (ListCopyDeinit(&src) == tracked_copy_deinit);
    
        ListPushBackR(&src, 5);
        result = result && (g_copy_init_count == 3);
        result = result && list_matches(GENERIC_LIST(&src), (const int[]) {1005}, 1);
        IntList src_a  = ListInit(&alloc);
    
        ListPushBackR(&dest_l, 1);
        ListPushBackR(&dest_l, 2);
        ListPushBackR(&src_l, 3);
    
        ListPushBackR(&dest_l, 1);
        ListPushBackR(&dest_l, 2);
        ListPushBackR(&src_l, 3);
        ListPushBackR(&src_l, 4);
        ListPushBackR(&dest_l, 1);
        ListPushBackR(&dest_l, 2);
        ListPushBackR(&src_l, 3);
        ListPushBackR(&src_l, 4);
        ListMergeL(&dest_l, &src_l);
        ListPushBackR(&dest_l, 2);
        ListPushBackR(&src_l, 3);
        ListPushBackR(&src_l, 4);
        ListMergeL(&dest_l, &src_l);
        ListMergeL(&dest_l, &src_l);
    
        ListPushBackR(&dest_r, 1);
        ListPushBackR(&dest_r, 2);
        ListPushBackR(&src_r, 3);
    
        ListPushBackR(&dest_r, 1);
        ListPushBackR(&dest_r, 2);
        ListPushBackR(&src_r, 3);
        ListPushBackR(&src_r, 4);
        ListPushBackR(&dest_r, 1);
        ListPushBackR(&dest_r, 2);
        ListPushBackR(&src_r, 3);
        ListPushBackR(&src_r, 4);
        ListMergeR(&dest_r, &src_r);
        ListPushBackR(&dest_r, 2);
        ListPushBackR(&src_r, 3);
        ListPushBackR(&src_r, 4);
        ListMergeR(&dest_r, &src_r);
        ListMergeR(&dest_r, &src_r);
    
        ListPushBackR(&dest_a, 5);
        ListPushBackR(&src_a, 6);
        ListMerge(&dest_a, &src_a);
    
        ListPushBackR(&dest_a, 5);
        ListPushBackR(&src_a, 6);
        ListMerge(&dest_a, &src_a);
    
        reset_counters();
        ListPushBackR(&shallow_src, 11);
        ListPushBackR(&shallow_src, 12);
        ListMergeL(&deep_dest, &shallow_src);
        reset_counters();
        ListPushBackR(&shallow_src, 11);
        ListPushBackR(&shallow_src, 12);
        ListMergeL(&deep_dest, &shallow_src);
        ListMergeL(&empty_dest, &empty_src);
    #define FILL_INT_LIST(list_ptr)                                                                                        \
        do {                                                                                                               \
            ListPushBackR((list_ptr), 10);                                                                                 \
            ListPushBackR((list_ptr), 20);                                                                                 \
            ListPushBackR((list_ptr), 30);                                                                                 \
        do {                                                                                                               \
            ListPushBackR((list_ptr), 10);                                                                                 \
            ListPushBackR((list_ptr), 20);                                                                                 \
            ListPushBackR((list_ptr), 30);                                                                                 \
            ListPushBackR((list_ptr), 40);                                                                                 \
            ListPushBackR((list_ptr), 10);                                                                                 \
            ListPushBackR((list_ptr), 20);                                                                                 \
            ListPushBackR((list_ptr), 30);                                                                                 \
            ListPushBackR((list_ptr), 40);                                                                                 \
            ListPushBackR((list_ptr), 50);                                                                                 \
            ListPushBackR((list_ptr), 20);                                                                                 \
            ListPushBackR((list_ptr), 30);                                                                                 \
            ListPushBackR((list_ptr), 40);                                                                                 \
            ListPushBackR((list_ptr), 50);                                                                                 \
        } while (0)
            ListPushBackR((list_ptr), 30);                                                                                 \
            ListPushBackR((list_ptr), 40);                                                                                 \
            ListPushBackR((list_ptr), 50);                                                                                 \
        } while (0)
    
        ListClear(&list);
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
        ListClear(&list);
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
        ListClear(&list);
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
        ListClear(&list);
        bool result = (ListLen(&list) == 0) && (ListHead(&list) == NULL) && (ListTail(&list) == NULL);
    
        ListPushBackR(&list, 9);
        result = result && list_matches(GENERIC_LIST(&list), (const int[]) {9}, 1);
        IntList list = ListInit(&alloc);
    
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 3);
    
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 2);
    
        ListSort(&list, compare_ints);
        ListSort(&empty, compare_ints);
        ListReverse(&empty);
        ListPushBackR(&singleton, 42);
        ListSort(&singleton, compare_ints);
        ListReverse(&singleton);
    
        reset_counters();
        ListPushBackR(&list, 7);
        ListPushBackR(&list, 8);
        reset_counters();
        ListPushBackR(&list, 7);
        ListPushBackR(&list, 8);
    
        bool result = (g_copy_init_count == 2);
        result = result && (ListLen(&list) == 0) && (ListHead(&list) == NULL) && (ListTail(&list) == NULL);
    
        ListPushBackR(&list, 9);
        result = result && (g_copy_init_count == 3);
        result = result && list_matches(GENERIC_LIST(&list), (const int[]) {9}, 1);
        result      = result && ListEmpty(&list);
    
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
    
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
    
        result = result && (ListLen(&list) == 2);
        result = result && (ListHead(&list) == NULL) && (ListTail(&list) == NULL);
    
        ListPushBackR(&list, 30);
        result = result && list_matches(GENERIC_LIST(&list), (const int[]) {30}, 1);
        IntList list = ListInit(&alloc);
    
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
    
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 40);
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 40);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 40);
    
        bool result = ListPtrAt(&list, 0) && (*ListPtrAt(&list, 0) == 10);
        IntList list = ListInit(&alloc);
    
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
    
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 40);
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 40);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 40);
    
        GenericListNode *node1   = GENERIC_LIST_NODE(ListNodePtrAt(&list, 1));
        result       = result && !ListContains(&list, &needle, compare_ints);
    
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
    
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 20);
    
        result = result && (ListFind(&list, &needle, compare_ints) == 1);
        int     removed = 0;
    
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
    
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 40);
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 40);
        ListPushBackR(&list, 20);
        ListPushBackR(&list, 30);
        ListPushBackR(&list, 40);
    
        ListRemove(&list, &removed, 1);
        int     removed[2] = {0, 0};
    
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
    
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 5);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 5);
        ListPushBackR(&list, 6);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 5);
        ListPushBackR(&list, 6);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 5);
        ListPushBackR(&list, 6);
    
        ListRemoveRange(&list, removed, 2, 2);
        int     suffix[2] = {0, 0};
    
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
    
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 1);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 5);
        ListPushBackR(&list, 2);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 5);
        ListPushBackR(&list, 6);
        ListPushBackR(&list, 3);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 5);
        ListPushBackR(&list, 6);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 5);
        ListPushBackR(&list, 6);
    
        ListRemoveRange(&list, prefix, 0, 2);
        int     removed[3] = {0, 0, 0};
    
        ListPushBackR(&list, 7);
        ListPushBackR(&list, 8);
        ListPushBackR(&list, 9);
    
        ListPushBackR(&list, 7);
        ListPushBackR(&list, 8);
        ListPushBackR(&list, 9);
        ListRemoveRange(&list, removed, 0, 3);
        ListPushBackR(&list, 7);
        ListPushBackR(&list, 8);
        ListPushBackR(&list, 9);
        ListRemoveRange(&list, removed, 0, 3);
    
        reset_counters();
        ListPushBackR(&list, 7);
        ListPushBackR(&list, 8);
        ListPushBackR(&list, 9);
        reset_counters();
        ListPushBackR(&list, 7);
        ListPushBackR(&list, 8);
        ListPushBackR(&list, 9);
        ListPushBackR(&list, 7);
        ListPushBackR(&list, 8);
        ListPushBackR(&list, 9);
    
        ListRemoveRange(&list, NULL, 1, 0);
    
        reset_counters();
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 5);
        ListPushBackR(&list, 6);
        reset_counters();
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 5);
        ListPushBackR(&list, 6);
        ListPushBackR(&list, 4);
        ListPushBackR(&list, 5);
        ListPushBackR(&list, 6);
    
        ListRemoveRange(&list, removed, 1, 2);
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListPtrAt(&list, 1);
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        (void)ListAt(&list, 1);
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListNodePtrAt(&list, 1);
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        (void)ListNodeAt(&list, 1);
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListRemove(&list, NULL, 1);
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListRemoveRange(&list, NULL, 1, 2);
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListPushBackR(&list, 20);
        ListRemoveRange(&list, NULL, 1, 2);
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListSwapItems(&list, 0, 1);
        List(int) list = ListInit(get_test_alloc());
        int key        = 10;
        ListPushBackR(&list, 10);
        ListFind(&list, &key, NULL);
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListFind(&list, NULL, compare_ints);
    
        List(int) list = ListInit(get_test_alloc());
        ListPushBackR(&list, 10);
        ListSort(&list, NULL);
    #define ListMustPushBackR(l, rval)                                                                                     \
        do {                                                                                                               \
            if (!ListPushBackR((l), (rval))) {                                                                             \
                LOG_FATAL("ListMustPushBackR failed");                                                                     \
            }                                                                                                              \
Last updated on