ListDeinit
Description
Deinitialize a list and release every node back to its allocator. Element payloads are torn down through the configured copy_deinit handler when present.
After this call the list is empty and can either be re-initialized or discarded.
Parameters
| Name | Direction | Description |
|---|---|---|
v |
in,out | Pointer to list to deinitialize. |
Success
Returns to the caller. Every node has been freed back to the list’s allocator; head, tail, and length are reset; the allocator binding is unbound and replaced with AllocatorBind(DefaultAllocator()) so the list object can be safely re-initialized. When copy_deinit is configured it has been invoked on each previously-stored element.
Failure
Function cannot fail. A NULL v is a caller bug and aborts via LOG_FATAL.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
ListInt.c:24:
void deinit_int_list(IntList *list) {
ListDeinit(list);
}- In
ListInt.c:205:
ListMergeR(list, &temp);
ListDeinit(&temp); // Clean up temp to prevent memory leak
break;
} result = result && list_matches(GENERIC_LIST(&list), (const int[]) {10, 20, 30, 40, 50}, 5);
ListDeinit(&list);
return result;
} result = result && list_matches(GENERIC_LIST(&list), (const int[]) {10, 20, 30, 40, 50}, 5);
ListDeinit(&list);
return result;
} result = result && list_matches(GENERIC_LIST(&list), (const int[]) {10, 20, 30, 40, 50}, 5);
ListDeinit(&list);
return result;
} result = result && list_matches(GENERIC_LIST(&list), (const int[]) {10, 20, 30, 40, 50}, 5);
ListDeinit(&list);
return result;
} result = result && list_matches(GENERIC_LIST(&list), (const int[]) {10, 20, 30, 40, 50}, 5);
ListDeinit(&list);
return result;
} }
ListDeinit(&list);
return count == 0;
}- In
List.Ops.c:65:
result = result && list_matches(GENERIC_LIST(&list), (const int[]) {9}, 1);
ListDeinit(&list);
return result;
}- In
List.Ops.c:87:
result = result && list_matches(GENERIC_LIST(&list), (const int[]) {4, 3, 2, 2, 1}, 5);
ListDeinit(&list);
return result;
}- In
List.Ops.c:107:
result = result && list_matches(GENERIC_LIST(&singleton), (const int[]) {42}, 1);
ListDeinit(&empty);
ListDeinit(&singleton);
return result;- In
List.Ops.c:108:
ListDeinit(&empty);
ListDeinit(&singleton);
return result;
}- In
List.Ops.c:132:
result = result && list_matches(GENERIC_LIST(&list), (const int[]) {9}, 1);
ListDeinit(&list);
result = result && (g_copy_deinit_count == 3);
return result;- In
List.Access.c:51:
result = result && list_matches(GENERIC_LIST(&list), (const int[]) {30}, 1);
ListDeinit(&list);
return result;
}- In
List.Access.c:78:
result = result && list_matches(GENERIC_LIST(&list), (const int[]) {10, 40, 30, 20}, 4);
ListDeinit(&list);
return result;
} result = result && (ListNodePrev(null_node) == NULL);
ListDeinit(&list);
return result;
} result = result && (ListFind(&list, &missing, compare_ints) == SIZE_MAX);
ListDeinit(&list);
return result;
}- In
List.Init.c:46:
result = result && (list_d.copy_init == tracked_copy_init) && (list_d.copy_deinit == tracked_copy_deinit);
ListDeinit(&list_a);
ListDeinit(&list_b);
ListDeinit(&list_c);- In
List.Init.c:47:
ListDeinit(&list_a);
ListDeinit(&list_b);
ListDeinit(&list_c);
ListDeinit(&list_d);- In
List.Init.c:48:
ListDeinit(&list_a);
ListDeinit(&list_b);
ListDeinit(&list_c);
ListDeinit(&list_d);
return result;- In
List.Init.c:49:
ListDeinit(&list_b);
ListDeinit(&list_c);
ListDeinit(&list_d);
return result;
}- In
List.Init.c:74:
result = result && (list_c.copy_init == tracked_copy_init) && (list_d.copy_deinit == tracked_copy_deinit);
ListDeinit(&list_a);
ListDeinit(&list_b);
ListDeinit(&list_c);- In
List.Init.c:75:
ListDeinit(&list_a);
ListDeinit(&list_b);
ListDeinit(&list_c);
ListDeinit(&list_d);- In
List.Init.c:76:
ListDeinit(&list_a);
ListDeinit(&list_b);
ListDeinit(&list_c);
ListDeinit(&list_d);
return result;- In
List.Init.c:77:
ListDeinit(&list_b);
ListDeinit(&list_c);
ListDeinit(&list_d);
return result;
}- In
List.Init.c:82:
static bool test_list_deinit_with_deep_copy(void) {
WriteFmt("Testing ListDeinit with deep copy\n");
typedef List(int) IntList;- In
List.Init.c:95:
result = result && (ListAt(&list, 1) == 1009);
ListDeinit(&list);
result = result && (g_copy_deinit_count == 2);- In
List.Type.c:17:
(list.copy_deinit == NULL) && (list.length == 0) && (list.__magic == MISRA_LIST_MAGIC);
ListDeinit(&list);
return result;
}- In
List.Insert.c:72:
result = result && list_matches(GENERIC_LIST(&list), (const int[]) {60, 80, 40, 10, 30, 20, 50, 90, 70}, 9);
ListDeinit(&list);
return result;
}- In
List.Insert.c:88:
result = result && (arr[0] == 0) && (arr[1] == 0) && (arr[2] == 0);
ListDeinit(&list);
return result;
} result = result && (arr[0] == 4) && (arr[1] == 5) && (arr[2] == 6);
ListDeinit(&list);
return result;
} result = result && list_matches(GENERIC_LIST(&list), (const int[]) {1007, 1007, 1008, 1009}, 4);
ListDeinit(&list);
result = result && (g_copy_deinit_count == 4);
return result; result = result && list_matches(GENERIC_LIST(&src), (const int[]) {1005}, 1);
ListDeinit(&dest);
ListDeinit(&src);
result = result && (g_copy_deinit_count == 1);
ListDeinit(&dest);
ListDeinit(&src);
result = result && (g_copy_deinit_count == 1);
return result; result = result && (ListLen(&src_a) == 0) && (src_a.head == NULL) && (src_a.tail == NULL);
ListDeinit(&dest_l);
ListDeinit(&src_l);
ListDeinit(&dest_r);
ListDeinit(&dest_l);
ListDeinit(&src_l);
ListDeinit(&dest_r);
ListDeinit(&src_r); ListDeinit(&dest_l);
ListDeinit(&src_l);
ListDeinit(&dest_r);
ListDeinit(&src_r);
ListDeinit(&dest_a); ListDeinit(&src_l);
ListDeinit(&dest_r);
ListDeinit(&src_r);
ListDeinit(&dest_a);
ListDeinit(&src_a); ListDeinit(&dest_r);
ListDeinit(&src_r);
ListDeinit(&dest_a);
ListDeinit(&src_a);
return result; ListDeinit(&src_r);
ListDeinit(&dest_a);
ListDeinit(&src_a);
return result;
} result = result && (ListLen(&empty_dest) == 0) && (ListLen(&empty_src) == 0);
ListDeinit(&deep_dest);
ListDeinit(&shallow_src);
ListDeinit(&empty_dest);
ListDeinit(&deep_dest);
ListDeinit(&shallow_src);
ListDeinit(&empty_dest);
ListDeinit(&empty_src); ListDeinit(&deep_dest);
ListDeinit(&shallow_src);
ListDeinit(&empty_dest);
ListDeinit(&empty_src);
result = result && (g_copy_deinit_count == 2); ListDeinit(&shallow_src);
ListDeinit(&empty_dest);
ListDeinit(&empty_src);
result = result && (g_copy_deinit_count == 2);
return result;- In
List.Remove.c:69:
result = result && list.tail && list.tail->data && (*list.tail->data == 30);
ListDeinit(&list);
return result;
} result = result && (ListLen(&list) == 0) && (list.head == NULL) && (list.tail == NULL);
ListDeinit(&list);
return result;
} result = result && list.tail && list.tail->data && (*list.tail->data == 4);
ListDeinit(&list);
return result;
} result = result && (ListLen(&list) == 0) && (list.head == NULL) && (list.tail == NULL);
ListDeinit(&list);
return result;
} result = result && (ListLen(&list) == 0) && (list.head == NULL) && (list.tail == NULL);
ListDeinit(&list);
return result;
} result = result && list_matches(GENERIC_LIST(&list), (const int[]) {4}, 1);
ListDeinit(&list);
result = result && (g_copy_deinit_count == 1);
return result;
Last updated on